diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c3aaa26 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "rasenganjs-examples", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/templates/landing-page/model2/package.json b/templates/landing-page/model2/package.json index 464d721..10ac4a4 100644 --- a/templates/landing-page/model2/package.json +++ b/templates/landing-page/model2/package.json @@ -13,9 +13,11 @@ "@rasenganjs/image": "^1.0.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", + "framer-motion": "^12.0.0", "rasengan": "1.0.0-beta.46", "react": "^18.3.0", "react-dom": "^18.3.0", + "react-intersection-observer": "^9.15.1", "tailwind-merge": "^2.5.2", "tailwindcss-animate": "^1.0.7" }, diff --git a/templates/landing-page/model2/src/app/app.router.ts b/templates/landing-page/model2/src/app/app.router.ts index 7c68400..11eba72 100644 --- a/templates/landing-page/model2/src/app/app.router.ts +++ b/templates/landing-page/model2/src/app/app.router.ts @@ -5,7 +5,7 @@ import AppLayout from "@/app/root/app.layout"; class AppRouter extends RouterComponent {} export default defineRouter({ - imports: [], - layout: AppLayout, - pages: [Home], + imports: [], + layout: AppLayout, + pages: [Home], })(AppRouter); diff --git a/templates/landing-page/model2/src/app/root/app.layout.tsx b/templates/landing-page/model2/src/app/root/app.layout.tsx index 09b53b4..506167f 100644 --- a/templates/landing-page/model2/src/app/root/app.layout.tsx +++ b/templates/landing-page/model2/src/app/root/app.layout.tsx @@ -7,9 +7,9 @@ import Main from "./components/Main"; const AppLayout: LayoutComponent = () => { return ( <React.Fragment> - <Navbar /> - + <Main> + <Navbar /> <Outlet /> </Main> diff --git a/templates/landing-page/model2/src/app/root/components/Footer.tsx b/templates/landing-page/model2/src/app/root/components/Footer.tsx index 1326cdd..600ff30 100644 --- a/templates/landing-page/model2/src/app/root/components/Footer.tsx +++ b/templates/landing-page/model2/src/app/root/components/Footer.tsx @@ -1,48 +1,128 @@ import Typography from "@/components/atoms/Typography"; +import Image from "@rasenganjs/image"; +import profil_1 from "@/assets/images/profil_1.png"; +import profil_2 from "@/assets/images/profil_2.png"; +import profil_3 from "@/assets/images/profil_3.png"; +import profil_4 from "@/assets/images/profil_4.png"; +import play from "@/assets/play_white.svg"; +import money from "@/assets/money.svg"; +import Input from "@/components/atoms/input"; export default function Footer() { - return ( - <footer className='grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-10 bg-footer text-footer-foreground w-full max-w-[1500px] mx-auto px-10 lg:px-40 py-10'> - <div className='flex flex-col gap-5'> - <div className='flex flex-col gap-2'> - <Typography text='Biccas' weight='bold' className='text-2xl' /> - <Typography text='2024 @ Biccas' /> - <Typography text='All rights reserved' /> - </div> - </div> + return ( + <footer className="flex flex-col bg-footer text-footer-foreground p-8 lg:p-32"> + <div className="max-lg:flex-col flex flex-grow gap-16"> + <div className="flex flex-1 flex-col gap-8"> + <Typography + className="max-xl:text-3xl text-5xl" + weight="bold" + text="People are Saying About DoWhith" + /> + <Typography + className="text-lg text-[#A6A6A6]" + text="Everything you need to accept to payment and grow your money of manage anywhere on planet" + /> - <div className='flex flex-col gap-5'> - <Typography text='Company' weight='bold' className='text-lg' /> + <span className="text-gray-400 text-9xl font-bold leading-none"> + " + </span> - <div className='flex flex-col gap-2'> - <Typography text='About' /> - <Typography text='Blog' /> - <Typography text='Careers' /> - <Typography text='Contact' /> - <Typography text='Help Center' /> - </div> - </div> + <Typography + className="text-lg text-[#A6A6A6]" + text="I am very helped by this E-wallet application , my days are very easy to use this application and its very helpful in my life , even I can pay a short time 😍" + /> + <Typography + className="text-lg text-[#A6A6A6]" + text="_ Aria Zinanrio" + /> + <div className="flex gap-4"> + <Image src={profil_1} alt="profil_1" className="rounded-xl" /> + <Image src={profil_2} alt="profil_2" className="rounded-xl" /> + <Image src={profil_3} alt="profil_3" className="rounded-xl" /> + <Image src={profil_4} alt="profil_4" className="rounded-xl" /> + <Image + src={play} + alt="play" + className="rounded-xl w-[66px] h-[66px]" + /> + </div> + </div> + <div className="flex flex-1 flex-col bg-[#222938] py-12 rounded-2xl justify-center items-center"> + <form className="flex flex-col max-sm:px-12 lg:px-12 justify-center items-center"> + <Image src={money} alt="money" /> + <Typography className="text-3xl mt-2 mb-4" text="Get Started" /> + <Input label="Email" placeholder="Enter your email" /> + <Input + label="Message" + placeholder="What are you say ?" + isTextArea + /> + <button className="w-full py-4 bg-primary rounded-[10px]"> + Request Demo + </button> + <p className="w-full flex justify-end mt-2 text-sm gap-1"> + <span className="text-[#A6A6A6]">or</span>Start Free Trial + </p> + </form> + </div> + </div> - <div className='flex flex-col gap-5'> - <Typography text='Legal' weight='bold' className='text-lg' /> + <div className="max-lg:flex-col flex flex-grow gap-16 mt-16"> + <div className="flex flex-1 flex-col gap-8"> + <Typography + text="Biccas" + weight="bold" + className="text-4xl text-primary" + /> + <Typography + className="text-lg text-[#A6A6A6]" + text="Get started now try our product" + /> + <div className="border-2 border-[#A6A6A6] rounded-full flex items-center p-2 justify-between bg-transparent"> + <input + className="border-none bg-footer w-full" + placeholder="Enter your email here" + /> + <div className="bg-primary rounded-full w-10 h-10 p-2 text-center"> + -{">"} + </div> + </div> + </div> - <div className='flex flex-col gap-2'> - <Typography text='Cookies Policy' /> - <Typography text='Privacy Policy' /> - <Typography text='Terms of Service' /> - </div> - </div> + <div className="flex flex-1 flex-col md:flex-row items-center justify-between gap-16"> + <ul className="flex flex-col text-lg gap-6"> + <li className="">Support</li> + <li className="text-[#A6A6A6]">Help centre</li> + <li className="text-[#A6A6A6]">Account information</li> + <li className="text-[#A6A6A6]">About</li> + <li className="text-[#A6A6A6]">Contact us</li> + </ul> + <ul className="flex flex-col text-lg gap-6"> + <li className="">Help and Solution</li> + <li className="text-[#A6A6A6]">Talk to support</li> + <li className="text-[#A6A6A6]">Support docs</li> + <li className="text-[#A6A6A6]">System status</li> + <li className="text-[#A6A6A6]">Covid responde</li> + </ul> + <ul className="flex flex-col text-lg gap-6"> + <li className="">Product</li> + <li className="text-[#A6A6A6]">Update</li> + <li className="text-[#A6A6A6]">Security</li> + <li className="text-[#A6A6A6]">Beta test</li> + <li className="text-[#A6A6A6]">Pricing product</li> + </ul> + </div> + </div> - <div className='flex flex-col gap-5'> - <Typography text='Socials' weight='bold' className='text-lg' /> - - <div className='flex flex-col gap-2'> - <Typography text='Facebook' /> - <Typography text='Instagram' /> - <Typography text='Twitter' /> - <Typography text='LinkedIn' /> - </div> - </div> - </footer> - ); + <div className="max-lg:flex-col flex justify-between items-center mt-16"> + <Typography + text="© 2025 Rasengan Labs. all rights reserved" + className="text-center" + /> + <Typography + text="Terms and Condtions - Privacy Policy" + /> + </div> + </footer> + ); } diff --git a/templates/landing-page/model2/src/app/root/components/Main.tsx b/templates/landing-page/model2/src/app/root/components/Main.tsx index 73cfffd..bbc3d87 100644 --- a/templates/landing-page/model2/src/app/root/components/Main.tsx +++ b/templates/landing-page/model2/src/app/root/components/Main.tsx @@ -4,7 +4,7 @@ interface MainProps { export default function Main({ children }: MainProps) { return ( - <main className='w-full max-w-[1500px] mx-auto px-10 lg:px-40 py-2 min-h-[800px]'> + <main className='w-screen min-h-screen mx-auto'> {children} </main> ); diff --git a/templates/landing-page/model2/src/app/root/components/Navbar.tsx b/templates/landing-page/model2/src/app/root/components/Navbar.tsx index 0fd7085..59c6042 100644 --- a/templates/landing-page/model2/src/app/root/components/Navbar.tsx +++ b/templates/landing-page/model2/src/app/root/components/Navbar.tsx @@ -2,37 +2,134 @@ import Button from "@/components/atoms/Button"; import NavItem from "@/components/atoms/NavItem"; import Typography from "@/components/atoms/Typography"; import { useLocation } from "rasengan"; +import { useState, useEffect } from "react"; export default function Navbar() { - const { pathname } = useLocation(); - - const isActive = (path: string) => pathname === path; - - return ( - <header className='w-full max-w-[1500px] mx-auto px-10 lg:px-40 py-8 flex items-center justify-between'> - <div className='flex items-center gap-8'> - <Typography - text='Biccas' - weight='bold' - className='text-4xl text-primary' - /> - </div> - <nav className='flex items-center gap-8 ml-10'> - <NavItem text='Home' href='#home' isActive={isActive("/")} /> - <NavItem - text='Products' - href='#products' - isActive={isActive("/pricing")} - /> - <NavItem text='FAQ' href='#faq' isActive={isActive("/faq")} /> - <NavItem text='Blog' href='#blog' isActive={isActive("/blog")} /> - <NavItem text='About Us' href='#about-us' isActive={isActive("/about-us")} /> - </nav> - - <div className='flex items-center gap-2'> - <Button text='Log in' className='bg-transparent text-foreground' /> - <Button text='Sign up' className='bg-primary text-primary-foreground' /> - </div> - </header> - ); + const { pathname } = useLocation(); + const isActive = (path: string) => pathname === path; + + const [isOpen, setIsOpen] = useState(false); + + const toggleMenu = () => { + setIsOpen(!isOpen); + }; + + useEffect(() => { + setIsOpen(false); + }, []); + + return ( + <header className="w-full mx-auto px-8 lg:px-[130px] py-8 flex items-center justify-between bg-custom-gradient"> + <div className="flex items-center gap-8"> + <Typography + text="Biccas" + weight="bold" + className="text-4xl text-primary" + /> + </div> + + {/* hambuger svg */} + <div className="md:hidden"> + <button + onClick={toggleMenu} + className="text-primary focus:outline-none" + > + <svg + xmlns="http://www.w3.org/2000/svg" + className="h-6 w-6" + fill="none" + viewBox="0 0 24 24" + stroke="currentColor" + > + <path + strokeLinecap="round" + strokeLinejoin="round" + strokeWidth="2" + d="M4 6h16M4 12h16m-7 6h7" + /> + </svg> + </button> + </div> + {/* hambuger svg */} + + <nav className="hidden md:flex items-center gap-8 ml-10"> + <NavItem text="Home" href="/" isActive={isActive("/")} /> + <NavItem + text="Products" + href="#products" + isActive={isActive("/products")} + /> + <NavItem text="FAQ" href="#faq" isActive={isActive("/faq")} /> + <NavItem text="Blog" href="#blog" isActive={isActive("/blog")} /> + <NavItem + text="About Us" + href="#about-us" + isActive={isActive("/about-us")} + /> + </nav> + + <div className="hidden lg:flex items-center gap-2"> + <Button + text="Log in" + className="bg-transparent text-foreground text-[#A6A6A6]" + /> + <Button text="Sign up" className="bg-primary text-primary-foreground" /> + </div> + + {/* mobile menu*/} + <div + className={`md:hidden absolute top-0 right-0 w-full bg-white p-5 transform transition-all delay-300 duration-300 ease-in-out ${ + isOpen ? "translate-x-0" : "-translate-x-full" + }`} + > + <nav className="flex flex-col items-center gap-4"> + <button + onClick={toggleMenu} + className="text-primary focus:outline-none w-full flex justify-end" + > + <svg + xmlns="http://www.w3.org/2000/svg" + className="h-6 w-6" + fill="none" + viewBox="0 0 24 24" + stroke="currentColor" + > + <path + strokeLinecap="round" + strokeLinejoin="round" + strokeWidth="2" + d="M6 18L18 6M6 6l12 12" + /> + </svg> + </button> + <NavItem text="Home" href="/" isActive={isActive("/")} onClick={toggleMenu} /> + <NavItem + text="Products" + href="#products" + isActive={isActive("/products")} + onClick={toggleMenu} + /> + <NavItem text="FAQ" href="#faq" isActive={isActive("/faq")} onClick={toggleMenu} /> + <NavItem text="Blog" href="#blog" isActive={isActive("/blog")} onClick={toggleMenu} /> + <NavItem + text="About Us" + href="#about-us" + isActive={isActive("/about-us")} + onClick={toggleMenu} + /> + <div className="flex w-full mt-4"> + <Button + text="Log in" + className="w-full bg-transparent text-foreground text-[#A6A6A6] mt-2" + /> + <Button + text="Sign up" + className="p-2 w-full bg-primary text-primary-foreground mt-2" + /> + </div> + </nav> + </div> + {/* mobile menu*/} + </header> + ); } diff --git a/templates/landing-page/model2/src/app/root/pages/home.page.tsx b/templates/landing-page/model2/src/app/root/pages/home.page.tsx index 60a333e..9a5b81c 100644 --- a/templates/landing-page/model2/src/app/root/pages/home.page.tsx +++ b/templates/landing-page/model2/src/app/root/pages/home.page.tsx @@ -1,17 +1,166 @@ import { PageComponent } from "rasengan"; +import Products from "@/components/organismes/products"; +import Faq from "@/components/organismes/faq"; +import Blog from "@/components/organismes/blog"; +import AboutUs from "@/components/organismes/about-us"; +import Button from "@/components/atoms/Button"; +import Image from "@rasenganjs/image"; +import charlie from "@/assets/images/charlie.png"; +import play from "@/assets/play.svg"; +import curve from "@/assets/curve.svg"; +import unspash from "@/assets/unspash.svg"; +import notion from "@/assets/notion.svg"; +import intercom from "@/assets/intercom.svg"; +import descript from "@/assets/descript.svg"; +import ellipse from "@/assets/ellipse.svg"; +import database from "@/assets/database.svg"; +import message from "@/assets/message.svg"; +import { motion } from "framer-motion"; +import ButtonWithLogo from "@/components/atoms/ButtonWithLogo"; +import Typography from "@/components/atoms/Typography"; +import { MoveIn } from "@/components/molecules/move-in"; const Home: PageComponent = () => { - return ( - <section className="w-full h-full py-8"> - Home page - </section> - ); -} + return ( + <section className='w-full h-full flex flex-col'> + <MoveIn + id='section1' + className='max-lg:flex-col flex flex-grow px-8 lg:px-[130px] pt-4 lg:pt-14 bg-custom-gradient gap-4' + > + <div className='flex flex-1 flex-col max-w-[700px] mx-auto lg:mx-0 lg:max-w-full'> + <Typography + className='max-xl:text-5xl text-7xl pb-6 text-center lg:text-left' + weight='bold' + text='We’re here to Increase your Productivity' + /> + <img src={curve} alt='curve' className='py-8' /> + <p className='text-lg py-8 text-center lg:text-left'> + Let's make your work more organize and easily using the Taskio + Dashboard with many of the latest features in managing work every + day. + </p> + <div className='flex gap-6 mt-8 justify-center lg:justify-start'> + <Button + text='Try free trial' + className='text-lg bg-primary text-white' + /> + <ButtonWithLogo + logo={ + <img + src={play} + alt='Logo' + className='w-full h-full object-contain' + /> + } + text='View Demo' + className='bg-transparent text-foreground text-[#A6A6A6]' + /> + </div> + </div> + + <div className='relative flex flex-1 justify-center lg:justify-end max-lg:mt-12'> + <div className='relative'> + <Image src={charlie} alt='Charlie' className='rounded-xl' /> + <div className='absolute top-6 -right-4 bg-[#FBC75E] rotate-[15deg] h-10 w-10 rounded-[10px] flex items-center justify-center'> + <Image src={database} alt='database' /> + </div> + <div className='absolute bg-[#FFAA94] top-[510px] right-[50px] rotate-[15deg] h-10 w-10 rounded-[10px] flex items-center justify-center'> + <Image src={message} alt='message' /> + </div> + </div> + {/* <div className="absolute bg-[#4535AF] max-lg:right-[350px] right-[430px] top-[160px] rotate-[-15deg] h-10 w-10 rounded-[10px] flex items-center justify-center"><Image src={vector} alt="vector"/></div> */} + {/* <div className="absolute max-lg:right-[350px] left-[270px] gap-14 top-[25px] rounded-[10px] flex justify-between items-center p-4 bg-white"> + <div className="flex flex-col gap-2"> + <p className="text-[#A9A7B6] text-xs">Enter amount</p> + <span className="text-base">$450..00</span> + </div> + <Button + text="Send" + className="text-xs bg-primary text-white" + /> + </div> + <div className="absolute left-[340px] gap-2 top-[410px] rounded-[10px] flex flex-col justify-between p-4 bg-white"> + <p className="text-[#A9A7B6] text-xs">Total Income</p> + <div className="flex gap-8"> + <span className="text-base">$245.00</span> + <Image src={bar} alt="Bar" className="h-full"/> + </div> + </div> + <div className="absolute -right-20 top-[300px] rotate-[15deg] rounded-[10px] flex flex-col justify-between p-4 bg-[#161C28] overflow-hidden"> + <span className="absolute bg-white rounded-full w-[100px] h-[100px] -right-10 -top-10 p-2 opacity-20"></span> + <div className="flex"> + <p className="bg-white rounded-full w-7 h-7 p-2 opacity-20"> </p> + <p className="bg-white rounded-full w-7 h-7 p-2 opacity-20"> </p> + </div> + <p className="text-[#E6E6E6] text-xs mt-6">Creadit Crad</p> + <p className="text-[#E6E6E6] text-xs mb-6 mt-2">....1234</p> + <div className="flex justify-between items-center gap-10"> + <span className="p-3 w-10 bg-[#FFFFFF] rounded-[4px] opacity-20"></span> + <p className="text-[#E6E6E6] text-xs">09/25</p> + </div> + <span className="absolute bg-white rounded-full w-[150px] h-[150px] top-[100px] -left-10 p-2 opacity-20"></span> + </div> */} + </div> + </MoveIn> + + <MoveIn + id='section2' + className='flex flex-col bg-custom-gradient items-center pt-14 px-8 lg:px-[130px] pb-14 lg:py-28' + > + <Typography + className='text-4xl text-center' + weight='bold' + text='More than 25,000 teams use Collabs' + /> + <div className='flex flex-wrap justify-center items-center gap-12 mt-14 text-[#A6A6A6] text-xl md:text-2xl lg:text-3xl'> + <p className='flex items-center gap-2'> + <Image src={unspash} alt='unsplash' /> + <span>Unsplash</span> + </p> + <p className='flex items-center gap-2'> + <Image src={notion} alt='notion' /> + <span>Notion</span> + </p> + <p className='flex items-center gap-2'> + <Image src={intercom} alt='intercom' /> + <span>INTERCOM</span> + </p> + <p className='flex items-center gap-2'> + <Image src={descript} alt='descript' /> + <span>Descript</span> + </p> + <p className='flex items-center gap-2'> + <div className='bg-[#A6A6A6] rounded-full p-2 flex items-center justify-center'> + <Image src={ellipse} alt='grammarly' /> + </div> + <span>Grammarly</span> + </p> + </div> + </MoveIn> + + <MoveIn id='section3'> + <Products /> + </MoveIn> + + <MoveIn id='section4'> + <Faq /> + </MoveIn> + + <MoveIn id='section5'> + <Blog /> + </MoveIn> + + <MoveIn id='section6'> + <AboutUs /> + </MoveIn> + </section> + ); +}; Home.path = "/"; Home.metadata = { - title: "Home", - description: "Home page", + title: "Home", + description: "Home page", }; -export default Home; \ No newline at end of file +export default Home; diff --git a/templates/landing-page/model2/src/assets/activity.svg b/templates/landing-page/model2/src/assets/activity.svg new file mode 100644 index 0000000..615adce --- /dev/null +++ b/templates/landing-page/model2/src/assets/activity.svg @@ -0,0 +1,3 @@ +<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M27.5 15H22.5L18.75 26.25L11.25 3.75L7.5 15H2.5" stroke="#54BD95" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/amanda.png b/templates/landing-page/model2/src/assets/amanda.png new file mode 100644 index 0000000..cf11b6a Binary files /dev/null and b/templates/landing-page/model2/src/assets/amanda.png differ diff --git a/templates/landing-page/model2/src/assets/bar.svg b/templates/landing-page/model2/src/assets/bar.svg new file mode 100644 index 0000000..09e87b6 --- /dev/null +++ b/templates/landing-page/model2/src/assets/bar.svg @@ -0,0 +1,5 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M15 16.6663V8.33301" stroke="#52BD94" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M10 16.6663V3.33301" stroke="#52BD94" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M5 16.6665V11.6665" stroke="#52BD94" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/command.svg b/templates/landing-page/model2/src/assets/command.svg new file mode 100644 index 0000000..9745761 --- /dev/null +++ b/templates/landing-page/model2/src/assets/command.svg @@ -0,0 +1,3 @@ +<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M22.5 3.75C21.5054 3.75 20.5516 4.14509 19.8483 4.84835C19.1451 5.55161 18.75 6.50544 18.75 7.5V22.5C18.75 23.4946 19.1451 24.4484 19.8483 25.1517C20.5516 25.8549 21.5054 26.25 22.5 26.25C23.4946 26.25 24.4484 25.8549 25.1517 25.1517C25.8549 24.4484 26.25 23.4946 26.25 22.5C26.25 21.5054 25.8549 20.5516 25.1517 19.8483C24.4484 19.1451 23.4946 18.75 22.5 18.75H7.5C6.50544 18.75 5.55161 19.1451 4.84835 19.8483C4.14509 20.5516 3.75 21.5054 3.75 22.5C3.75 23.4946 4.14509 24.4484 4.84835 25.1517C5.55161 25.8549 6.50544 26.25 7.5 26.25C8.49456 26.25 9.44839 25.8549 10.1517 25.1517C10.8549 24.4484 11.25 23.4946 11.25 22.5V7.5C11.25 6.50544 10.8549 5.55161 10.1517 4.84835C9.44839 4.14509 8.49456 3.75 7.5 3.75C6.50544 3.75 5.55161 4.14509 4.84835 4.84835C4.14509 5.55161 3.75 6.50544 3.75 7.5C3.75 8.49456 4.14509 9.44839 4.84835 10.1517C5.55161 10.8549 6.50544 11.25 7.5 11.25H22.5C23.4946 11.25 24.4484 10.8549 25.1517 10.1517C25.8549 9.44839 26.25 8.49456 26.25 7.5C26.25 6.50544 25.8549 5.55161 25.1517 4.84835C24.4484 4.14509 23.4946 3.75 22.5 3.75Z" stroke="#54BD95" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/curve.svg b/templates/landing-page/model2/src/assets/curve.svg new file mode 100644 index 0000000..2851d82 --- /dev/null +++ b/templates/landing-page/model2/src/assets/curve.svg @@ -0,0 +1,3 @@ +<svg width="487" height="34" viewBox="0 0 487 34" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M4 30C73.6307 10.3798 266.914 -17.0885 483 30" stroke="#54BD95" stroke-width="8" stroke-linecap="round"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/database.svg b/templates/landing-page/model2/src/assets/database.svg new file mode 100644 index 0000000..b28bc87 --- /dev/null +++ b/templates/landing-page/model2/src/assets/database.svg @@ -0,0 +1,12 @@ +<svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_0_39)"> +<path d="M13.8627 9.78005C17.8637 10.8521 21.3968 10.64 21.7542 9.30638C22.1115 7.97271 19.1578 6.02248 15.1568 4.95042C11.1558 3.87836 7.62266 4.09043 7.26531 5.42409C6.90795 6.75776 9.86171 8.70799 13.8627 9.78005Z" stroke="#F8F8FA" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M20.244 14.9411C19.8859 16.2773 16.3772 16.4932 12.3525 15.4148C8.32777 14.3364 5.39703 12.395 5.75507 11.0588" stroke="#F8F8FA" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M7.26483 5.42432L4.24528 16.6935C3.88724 18.0296 6.81798 19.971 10.8427 21.0494C14.8674 22.1278 18.3761 21.9119 18.7342 20.5757L21.7537 9.3066" stroke="#F8F8FA" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> +</g> +<defs> +<clipPath id="clip0_0_39"> +<rect width="20" height="20" fill="white" transform="translate(5.92889 0.752441) rotate(15)"/> +</clipPath> +</defs> +</svg> diff --git a/templates/landing-page/model2/src/assets/descript.svg b/templates/landing-page/model2/src/assets/descript.svg new file mode 100644 index 0000000..df0e6ca --- /dev/null +++ b/templates/landing-page/model2/src/assets/descript.svg @@ -0,0 +1,3 @@ +<svg width="23" height="30" viewBox="0 0 23 30" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M17.0711 1.41723C18.9464 2.32466 20 3.5554 20 4.83871H10L0 4.83871C0 3.5554 1.05357 2.32466 2.92893 1.41722C4.8043 0.509791 7.34784 0 10 0C12.6522 0 15.1957 0.509791 17.0711 1.41723ZM2.92893 28.5828C1.05357 27.6753 0 26.4446 0 25.1613H10L20 25.1613C20 26.4446 18.9464 27.6753 17.0711 28.5828C15.1957 29.4902 12.6522 30 10 30C7.34783 30 4.8043 29.4902 2.92893 28.5828ZM23 17.4194V21.2903H17V17.4194H23ZM6 8.70968H0V12.5806H6V8.70968ZM11 8.70968H23V12.5806H11V8.70968ZM12 17.4194H0V21.2903H12V17.4194Z" fill="#A6A6A6"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/ellipse.svg b/templates/landing-page/model2/src/assets/ellipse.svg new file mode 100644 index 0000000..df38900 --- /dev/null +++ b/templates/landing-page/model2/src/assets/ellipse.svg @@ -0,0 +1,4 @@ +<svg width="19" height="16" viewBox="0 0 19 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1C9.95869 1 11.7295 1.80447 13 3.10102" stroke="white" stroke-width="2"/> +<path d="M11 10L15 8L17.5 11.5" stroke="white" stroke-width="2"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/empty-star.svg b/templates/landing-page/model2/src/assets/empty-star.svg new file mode 100644 index 0000000..c109801 --- /dev/null +++ b/templates/landing-page/model2/src/assets/empty-star.svg @@ -0,0 +1,3 @@ +<svg width="26" height="24" viewBox="0 0 26 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M13 0L15.9187 8.98278H25.3637L17.7225 14.5344L20.6412 23.5172L13 17.9656L5.35879 23.5172L8.27747 14.5344L0.636266 8.98278H10.0813L13 0Z" fill="#BBBBBB"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/full-star.svg b/templates/landing-page/model2/src/assets/full-star.svg new file mode 100644 index 0000000..a07084f --- /dev/null +++ b/templates/landing-page/model2/src/assets/full-star.svg @@ -0,0 +1,3 @@ +<svg width="26" height="24" viewBox="0 0 26 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M13 0L15.9187 8.98278H25.3637L17.7225 14.5344L20.6412 23.5172L13 17.9656L5.35879 23.5172L8.27747 14.5344L0.636266 8.98278H10.0813L13 0Z" fill="#FFC728"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/green-tick.svg b/templates/landing-page/model2/src/assets/green-tick.svg new file mode 100644 index 0000000..aba3e57 --- /dev/null +++ b/templates/landing-page/model2/src/assets/green-tick.svg @@ -0,0 +1,3 @@ +<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M2.83333 11C2.83333 5.9374 6.93739 1.83334 12 1.83334C17.0626 1.83334 21.1667 5.9374 21.1667 11C21.1667 16.0626 17.0626 20.1667 12 20.1667C6.93739 20.1667 2.83333 16.0626 2.83333 11ZM12 0.166672C6.01692 0.166672 1.16667 5.01692 1.16667 11C1.16667 16.9831 6.01692 21.8333 12 21.8333C17.9831 21.8333 22.8333 16.9831 22.8333 11C22.8333 5.01692 17.9831 0.166672 12 0.166672ZM11.9301 14.6944L17.7196 8.69437L16.2804 7.30564L11.1148 12.6591L7.61369 9.93773L6.38631 11.5168L10.5968 14.7896L11.3062 15.341L11.9301 14.6944Z" fill="#2B9B5B"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/images/analytics.png b/templates/landing-page/model2/src/assets/images/analytics.png new file mode 100644 index 0000000..3f230b8 Binary files /dev/null and b/templates/landing-page/model2/src/assets/images/analytics.png differ diff --git a/templates/landing-page/model2/src/assets/images/charlie.png b/templates/landing-page/model2/src/assets/images/charlie.png new file mode 100644 index 0000000..718d67c Binary files /dev/null and b/templates/landing-page/model2/src/assets/images/charlie.png differ diff --git a/templates/landing-page/model2/src/assets/images/cloud.png b/templates/landing-page/model2/src/assets/images/cloud.png new file mode 100644 index 0000000..0f57220 Binary files /dev/null and b/templates/landing-page/model2/src/assets/images/cloud.png differ diff --git a/templates/landing-page/model2/src/assets/images/computer.png b/templates/landing-page/model2/src/assets/images/computer.png new file mode 100644 index 0000000..106175f Binary files /dev/null and b/templates/landing-page/model2/src/assets/images/computer.png differ diff --git a/templates/landing-page/model2/src/assets/images/profil_1.png b/templates/landing-page/model2/src/assets/images/profil_1.png new file mode 100644 index 0000000..c48352a Binary files /dev/null and b/templates/landing-page/model2/src/assets/images/profil_1.png differ diff --git a/templates/landing-page/model2/src/assets/images/profil_2.png b/templates/landing-page/model2/src/assets/images/profil_2.png new file mode 100644 index 0000000..1371535 Binary files /dev/null and b/templates/landing-page/model2/src/assets/images/profil_2.png differ diff --git a/templates/landing-page/model2/src/assets/images/profil_3.png b/templates/landing-page/model2/src/assets/images/profil_3.png new file mode 100644 index 0000000..22f69f1 Binary files /dev/null and b/templates/landing-page/model2/src/assets/images/profil_3.png differ diff --git a/templates/landing-page/model2/src/assets/images/profil_4.png b/templates/landing-page/model2/src/assets/images/profil_4.png new file mode 100644 index 0000000..eee3a0e Binary files /dev/null and b/templates/landing-page/model2/src/assets/images/profil_4.png differ diff --git a/templates/landing-page/model2/src/assets/images/teams.png b/templates/landing-page/model2/src/assets/images/teams.png new file mode 100644 index 0000000..d2ee8ef Binary files /dev/null and b/templates/landing-page/model2/src/assets/images/teams.png differ diff --git a/templates/landing-page/model2/src/assets/intercom.svg b/templates/landing-page/model2/src/assets/intercom.svg new file mode 100644 index 0000000..c7f0c81 --- /dev/null +++ b/templates/landing-page/model2/src/assets/intercom.svg @@ -0,0 +1,9 @@ +<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect width="30" height="30" rx="3" fill="#A6A6A6"/> +<rect x="4" y="7" width="2" height="12" fill="white"/> +<rect x="9" y="4" width="2" height="18" fill="white"/> +<rect x="14" y="4" width="2" height="18" fill="white"/> +<rect x="19" y="4" width="2" height="18" fill="white"/> +<path d="M5 24C7.83333 26.2639 16 29.4333 26 24" stroke="white" stroke-width="2" stroke-linecap="round"/> +<rect x="24" y="7" width="2" height="12" fill="white"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/message.svg b/templates/landing-page/model2/src/assets/message.svg new file mode 100644 index 0000000..dfd80cb --- /dev/null +++ b/templates/landing-page/model2/src/assets/message.svg @@ -0,0 +1,10 @@ +<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_0_33)"> +<path d="M19.0921 16.8506C18.9777 17.2776 18.6984 17.6416 18.3156 17.8626C17.9328 18.0836 17.4778 18.1435 17.0509 18.0291L7.3916 15.4409L3.30912 17.798L6.76004 4.91896C6.87445 4.49199 7.15378 4.12796 7.53658 3.90695C7.91939 3.68593 8.37432 3.62604 8.80128 3.74045L20.0704 6.76C20.4974 6.87441 20.8614 7.15374 21.0824 7.53655C21.3034 7.91935 21.3633 8.37428 21.2489 8.80124L19.0921 16.8506Z" stroke="white" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> +</g> +<defs> +<clipPath id="clip0_0_33"> +<rect width="20" height="20" fill="white" transform="translate(5.42361 0.247314) rotate(15)"/> +</clipPath> +</defs> +</svg> diff --git a/templates/landing-page/model2/src/assets/money.svg b/templates/landing-page/model2/src/assets/money.svg new file mode 100644 index 0000000..ccac420 --- /dev/null +++ b/templates/landing-page/model2/src/assets/money.svg @@ -0,0 +1,3 @@ +<svg width="73" height="86" viewBox="0 0 73 86" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M72.0585 20.8486V20.4268H72.0234C71.8125 15.2245 68.2974 10.0574 61.4255 6.103C47.3302 -2.03433 24.4824 -2.03433 10.4749 6.103C3.46239 10.1805 -0.017509 15.5233 6.62377e-05 20.8662V31.8859V32.0792V42.9055V43.0989V53.9252V54.1185V65.1382C0.0352167 70.4811 3.58541 75.8239 10.6331 79.8838C17.6983 83.9613 26.9253 86 36.1347 86C45.3617 86 54.5536 83.9613 61.5837 79.8838C68.5962 75.8064 72.0761 70.4635 72.0585 65.1382V54.1185V53.5034V43.0989V42.4486V32.044V31.4289V20.8486C72.0585 20.8662 72.0585 20.8486 72.0585 20.8486ZM17.8038 14.2403L19.7546 13.1155C20.2467 12.8343 21.02 12.8343 21.5297 13.1155L23.9375 14.504C24.4648 14.1876 25.0096 13.8888 25.5369 13.5725L23.1291 12.184C22.637 11.9028 22.637 11.4459 23.1291 11.1647L25.0799 10.0399C25.572 9.75865 26.3629 9.75865 26.855 10.0399L29.9307 11.8149L30.3349 11.6919C33.7797 10.6374 37.4353 10.1629 41.337 10.4441C44.3951 10.6726 47.1368 11.3931 49.6501 12.4477C50.6343 12.8519 51.5482 13.3088 52.3743 13.7834C54.5536 15.0488 56.2232 16.5251 57.5238 18.1948L57.7874 18.6517C58.0862 19.2668 57.7347 19.6887 56.6978 19.9347C55.6081 20.2159 54.5009 20.462 53.3936 20.708C52.6203 20.8662 52.0755 20.831 51.6009 20.5498C51.4779 20.4795 51.3725 20.3917 51.2494 20.3038C50.5113 19.6184 49.8434 18.8802 49.0525 18.2123C48.3495 17.5972 47.5762 17.0172 46.6975 16.5075C45.5375 15.8397 44.2018 15.2773 42.6024 14.8906C40.2122 14.2931 37.8747 14.4337 35.5196 14.9785L35.4317 14.9961L41.3897 18.4408C41.8818 18.722 41.8818 19.179 41.3897 19.4602L39.4389 20.585C38.9468 20.8662 38.1559 20.8662 37.6638 20.585L30.827 16.6481C30.3173 16.9469 29.7725 17.2633 29.2277 17.5796L36.0644 21.5165C36.5565 21.7977 36.5565 22.2546 36.0644 22.5358L34.1136 23.6607C33.6215 23.9419 32.8482 23.9419 32.3385 23.6607L26.0993 20.0577C24.7108 21.745 24.2715 23.4146 25.8357 25.1546C26.5035 25.8927 27.3647 26.543 28.3665 27.123C29.2453 27.6327 30.2119 28.072 31.2488 28.4763C32.4088 28.8981 33.6391 29.2847 34.8342 29.7241C35.0275 29.7944 35.1857 29.8647 35.3263 29.9526C35.8008 30.2338 35.8711 30.5501 35.5899 30.9895C35.1857 31.6574 34.7287 32.3077 34.2366 32.9404C33.8324 33.5204 33.0767 33.7313 31.987 33.5204C30.8973 33.2743 29.8252 32.9755 28.7707 32.6416C26.8374 32.0089 25.0975 31.2707 23.586 30.392C22.0043 29.4781 20.6685 28.4235 19.5964 27.2284C17.0832 24.3812 17.1359 21.4813 19.1922 18.5638C19.5964 17.9839 20.1589 17.4742 20.651 16.9293L17.7335 15.2421C17.3117 14.9785 17.3117 14.5215 17.8038 14.2403ZM10.6331 35.6118C24.746 43.7667 47.5586 43.7667 61.5837 35.6118C63.763 34.3464 65.5732 32.9404 67.0671 31.4641V32.0792C67.0847 35.7348 64.1672 39.5487 59.0704 42.5013C53.0245 46.0163 44.8872 47.9496 36.1347 47.9496C27.3823 47.9496 19.1922 46.0163 13.1112 42.5013C7.96165 39.5311 4.99143 35.6997 4.95628 32.0616V31.341C6.52048 32.8525 8.38345 34.3112 10.6331 35.6118ZM59.088 64.5231C53.0421 68.0381 44.9048 69.9714 36.1523 69.9714C27.3999 69.9714 19.2098 68.0381 13.1288 64.5231C7.97922 61.5529 5.00901 57.7215 4.97386 54.0834V53.5561C6.52048 55.0852 8.36588 56.5263 10.6331 57.8269C17.6983 61.9044 26.9253 63.9431 36.1347 63.9431C45.3617 63.9431 54.5536 61.9044 61.5837 57.8269C63.763 56.5615 65.5732 55.1555 67.0671 53.6791V54.1185C67.1023 57.7742 64.1848 61.5704 59.088 64.5231ZM59.088 53.521C53.0421 57.036 44.9048 58.9693 36.1523 58.9693C27.3999 58.9693 19.2098 57.036 13.1288 53.521C7.97922 50.5508 5.00901 46.7194 4.97386 43.0813V42.554C6.52048 44.0831 8.36588 45.5242 10.6331 46.8248C17.6983 50.9023 26.9253 52.941 36.1347 52.941C45.3617 52.941 54.5536 50.9023 61.5837 46.8248C63.763 45.5594 65.5732 44.1534 67.0671 42.6771V43.1164C67.1023 46.7545 64.1848 50.5508 59.088 53.521ZM59.088 75.5427C53.0421 79.0578 44.9048 80.9911 36.1523 80.9911C27.3999 80.9911 19.2098 79.0578 13.1288 75.5427C7.97922 72.5725 5.00901 68.7411 4.97386 65.1031V64.5758C6.52048 66.1048 8.36588 67.546 10.6331 68.8466C17.6983 72.924 26.9253 74.9628 36.1347 74.9628C45.3617 74.9628 54.5536 72.924 61.5837 68.8466C63.763 67.5812 65.5732 66.1751 67.0671 64.6988V65.1382C67.1023 68.7763 64.1848 72.5901 59.088 75.5427Z" fill="#54BD95"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/notion.svg b/templates/landing-page/model2/src/assets/notion.svg new file mode 100644 index 0000000..8c0a6f1 --- /dev/null +++ b/templates/landing-page/model2/src/assets/notion.svg @@ -0,0 +1,12 @@ +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> + +<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools --> +<svg width="34" height="32" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="#A6A6A6"> + +<g id="SVGRepo_bgCarrier" stroke-width="0"/> + +<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round" stroke="#CCCCCC" stroke-width="0.06"/> + +<g id="SVGRepo_iconCarrier"> <path d="M3.25781 3.11684C3.67771 3.45796 3.83523 3.43193 4.62369 3.37933L12.0571 2.93299C12.2147 2.93299 12.0836 2.77571 12.0311 2.74957L10.7965 1.85711C10.56 1.67347 10.2448 1.46315 9.64083 1.51576L2.44308 2.04074C2.18059 2.06677 2.12815 2.19801 2.2327 2.30322L3.25781 3.11684ZM3.7041 4.84917V12.6704C3.7041 13.0907 3.91415 13.248 4.38693 13.222L12.5562 12.7493C13.0292 12.7233 13.0819 12.4341 13.0819 12.0927V4.32397C13.0819 3.98306 12.9508 3.79921 12.6612 3.82545L4.12422 4.32397C3.80918 4.35044 3.7041 4.50803 3.7041 4.84917ZM11.7688 5.26872C11.8212 5.50518 11.7688 5.74142 11.5319 5.76799L11.1383 5.84641V11.6205C10.7965 11.8042 10.4814 11.9092 10.2188 11.9092C9.79835 11.9092 9.69305 11.7779 9.37812 11.3844L6.80345 7.34249V11.2532L7.61816 11.437C7.61816 11.437 7.61816 11.9092 6.96086 11.9092L5.14879 12.0143C5.09615 11.9092 5.14879 11.647 5.33259 11.5944L5.80546 11.4634V6.29276L5.1489 6.24015C5.09625 6.00369 5.22739 5.66278 5.5954 5.63631L7.53935 5.50528L10.2188 9.5998V5.97765L9.53564 5.89924C9.4832 5.61018 9.69305 5.40028 9.95576 5.37425L11.7688 5.26872ZM1.83874 1.33212L9.32557 0.780787C10.245 0.701932 10.4815 0.754753 11.0594 1.17452L13.4492 2.85424C13.8436 3.14309 13.975 3.22173 13.975 3.53661V12.7493C13.975 13.3266 13.7647 13.6681 13.0293 13.7203L4.33492 14.2454C3.78291 14.2717 3.52019 14.193 3.23111 13.8253L1.47116 11.5419C1.1558 11.1216 1.02466 10.8071 1.02466 10.4392V2.25041C1.02466 1.77825 1.23504 1.38441 1.83874 1.33212Z" fill="#A6A6A6"/> </g> + +</svg> \ No newline at end of file diff --git a/templates/landing-page/model2/src/assets/photo.svg b/templates/landing-page/model2/src/assets/photo.svg new file mode 100644 index 0000000..880c752 --- /dev/null +++ b/templates/landing-page/model2/src/assets/photo.svg @@ -0,0 +1,6 @@ + +<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M8 11C9.10457 11 10 10.1046 10 9C10 7.89543 9.10457 7 8 7C6.89543 7 6 7.89543 6 9C6 10.1046 6.89543 11 8 11Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M6.56055 21C12.1305 8.89998 16.7605 6.77998 22.0005 14.63" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M18 3H6C3.79086 3 2 4.79086 2 7V17C2 19.2091 3.79086 21 6 21H18C20.2091 21 22 19.2091 22 17V7C22 4.79086 20.2091 3 18 3Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> +</svg> \ No newline at end of file diff --git a/templates/landing-page/model2/src/assets/pie-chart.svg b/templates/landing-page/model2/src/assets/pie-chart.svg new file mode 100644 index 0000000..ab4fb8f --- /dev/null +++ b/templates/landing-page/model2/src/assets/pie-chart.svg @@ -0,0 +1,4 @@ +<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M26.512 19.8626C25.7168 21.7432 24.473 23.4004 22.8894 24.6892C21.3057 25.9781 19.4305 26.8594 17.4276 27.2561C15.4247 27.6528 13.3551 27.5528 11.3997 26.9648C9.44436 26.3769 7.66281 25.3189 6.2108 23.8834C4.75879 22.4479 3.68055 20.6785 3.07032 18.73C2.4601 16.7815 2.33648 14.7132 2.71027 12.7059C3.08407 10.6986 3.9439 8.81338 5.21458 7.21513C6.48527 5.61689 8.12813 4.35424 9.99953 3.5376" stroke="#54BD95" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M27.5 15C27.5 13.3585 27.1767 11.733 26.5485 10.2165C25.9203 8.69989 24.9996 7.3219 23.8388 6.16117C22.6781 5.00043 21.3001 4.07969 19.7835 3.45151C18.267 2.82332 16.6415 2.5 15 2.5V15H27.5Z" stroke="#54BD95" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/play.svg b/templates/landing-page/model2/src/assets/play.svg new file mode 100644 index 0000000..b0aa224 --- /dev/null +++ b/templates/landing-page/model2/src/assets/play.svg @@ -0,0 +1,4 @@ +<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M20 4.16675C28.7432 4.16675 35.8333 11.2553 35.8333 20.0001C35.8333 28.7448 28.7432 35.8334 20 35.8334C11.2552 35.8334 4.16666 28.7448 4.16666 20.0001C4.16666 11.2553 11.2552 4.16675 20 4.16675Z" stroke="#191A15" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M25 19.9919C25 18.64 18.0709 14.3152 17.2848 15.0928C16.4988 15.8705 16.4232 24.0401 17.2848 24.891C18.1464 25.7449 25 21.3438 25 19.9919Z" stroke="#191A15" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/play_white.svg b/templates/landing-page/model2/src/assets/play_white.svg new file mode 100644 index 0000000..cb56f69 --- /dev/null +++ b/templates/landing-page/model2/src/assets/play_white.svg @@ -0,0 +1,4 @@ +<svg width="66" height="66" viewBox="0 0 66 66" fill="none" xmlns="http://www.w3.org/2000/svg"> +<circle cx="33" cy="33" r="32" stroke="white" stroke-width="2"/> +<path d="M42 33L28.5 43.3923L28.5 22.6077L42 33Z" fill="white"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/sms.svg b/templates/landing-page/model2/src/assets/sms.svg new file mode 100644 index 0000000..2e3ff4d --- /dev/null +++ b/templates/landing-page/model2/src/assets/sms.svg @@ -0,0 +1,3 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M17.5 9.58336C17.5029 10.6832 17.2459 11.7683 16.75 12.75C16.162 13.9265 15.2581 14.916 14.1395 15.6078C13.021 16.2995 11.7319 16.6662 10.4167 16.6667C9.31678 16.6696 8.23176 16.4126 7.25 15.9167L2.5 17.5L4.08333 12.75C3.58744 11.7683 3.33047 10.6832 3.33333 9.58336C3.33384 8.26815 3.70051 6.97907 4.39227 5.86048C5.08402 4.7419 6.07355 3.838 7.25 3.25002C8.23176 2.75413 9.31678 2.49716 10.4167 2.50002H10.8333C12.5703 2.59585 14.2109 3.32899 15.441 4.55907C16.671 5.78915 17.4042 7.42973 17.5 9.16669V9.58336Z" stroke="white" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/unspash.svg b/templates/landing-page/model2/src/assets/unspash.svg new file mode 100644 index 0000000..341146b --- /dev/null +++ b/templates/landing-page/model2/src/assets/unspash.svg @@ -0,0 +1,6 @@ +<svg width="34" height="32" viewBox="0 0 34 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect x="11" width="12" height="9" fill="#A6A6A6"/> +<rect y="23" width="34" height="9" fill="#A6A6A6"/> +<rect x="24" y="14" width="10" height="18" fill="#A6A6A6"/> +<rect y="14" width="10" height="18" fill="#A6A6A6"/> +</svg> diff --git a/templates/landing-page/model2/src/assets/vector.svg b/templates/landing-page/model2/src/assets/vector.svg new file mode 100644 index 0000000..a6436fa --- /dev/null +++ b/templates/landing-page/model2/src/assets/vector.svg @@ -0,0 +1,3 @@ +<svg width="14" height="11" viewBox="0 0 14 11" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M1 4.73309L5.17391 8.99976L13 0.999756" stroke="white" stroke-width="2"/> +</svg> diff --git a/templates/landing-page/model2/src/components/atoms/Button.tsx b/templates/landing-page/model2/src/components/atoms/Button.tsx index 1491ee2..e5aeda9 100644 --- a/templates/landing-page/model2/src/components/atoms/Button.tsx +++ b/templates/landing-page/model2/src/components/atoms/Button.tsx @@ -21,7 +21,7 @@ export default function Button({ }: ButtonProps): JSX.Element { return ( <button - className={`${className} rounded-lg px-4 py-2`} + className={`${className} rounded-[40px] px-4 py-2`} > <div>{children}</div> <p className='font-urbanist-medium'>{text}</p> diff --git a/templates/landing-page/model2/src/components/atoms/ButtonWithLogo.tsx b/templates/landing-page/model2/src/components/atoms/ButtonWithLogo.tsx new file mode 100644 index 0000000..1dc4f96 --- /dev/null +++ b/templates/landing-page/model2/src/components/atoms/ButtonWithLogo.tsx @@ -0,0 +1,37 @@ +import { ComponentProps } from "react"; + +interface ButtonWithLogoProps { + children?: React.ReactNode; + text: string; + logo: React.ReactNode; // Accepts any React Node for the logo + className?: ComponentProps<"button">["className"]; +} + +/** + * Renders a button component with a logo and the provided text. + * + * @param {ButtonWithLogoProps} props - The props for the button component. + * @param {React.ReactNode} [props.children] - Optional children to render inside the button. + * @param {string} props.text - The text to display on the button. + * @param {React.ReactNode} props.logo - The logo to display alongside the text. + * @param {string} [props.className] - Additional class names for the button. + * @returns {JSX.Element} - The rendered button component with a logo. + */ +export default function ButtonWithLogo({ + children, + text, + logo, + className, +}: ButtonWithLogoProps): JSX.Element { + return ( + <button + className={`${className} flex justify-center items-center gap-2`} + > + <span className="flex-shrink-0">{logo}</span> + + <p className="font-urbanist-medium">{text}</p> + + <div>{children}</div> + </button> + ); +} diff --git a/templates/landing-page/model2/src/components/atoms/NavItem.tsx b/templates/landing-page/model2/src/components/atoms/NavItem.tsx index 208e34c..c36f763 100644 --- a/templates/landing-page/model2/src/components/atoms/NavItem.tsx +++ b/templates/landing-page/model2/src/components/atoms/NavItem.tsx @@ -7,6 +7,7 @@ interface NavItemProps { href?: string; className?: ComponentProps<"button">["className"]; isActive?: boolean; + onClick?: () => void; } export default function NavItem({ @@ -15,13 +16,14 @@ export default function NavItem({ href = "#", className, isActive, + onClick }: NavItemProps) { return ( - <Link to={href} className='flex items-center gap-2'> + <Link to={href} className='flex items-center gap-2' onClick={onClick}> <div>{children}</div> <p className={`font-urbanist font-normal ${className} ${ - isActive && "text-primary" + isActive ? "text-[#000000]":"text-[#A6A6A6]" }`} > {text} diff --git a/templates/landing-page/model2/src/components/atoms/ToggleButton.tsx b/templates/landing-page/model2/src/components/atoms/ToggleButton.tsx new file mode 100644 index 0000000..f74fe58 --- /dev/null +++ b/templates/landing-page/model2/src/components/atoms/ToggleButton.tsx @@ -0,0 +1,43 @@ + +import { ComponentProps } from "react"; + +interface ToggleSwitchProps { + options: string[]; + selected: string; + onToggle: (option: string) => void; + className?: ComponentProps<"button">["className"]; +} + +/** + * Renders a toggle switch component with customizable styles and toggle functionality. + * + * @param {ToggleSwitchProps} props - The props for the toggle switch component. + * @param {() => void} props.onToggle - Callback function to handle toggle state change. + * @param {string} [props.className] - Optional custom class names for the button wrapper. + * @param {string} [props.className] - Additional class names for the button. + * @returns {JSX.Element} - The rendered toggle switch component. + */ +export default function ToggleSwitch({ + options, + selected, + className, + onToggle, + }: ToggleSwitchProps): JSX.Element { + return ( + <div className="flex rounded-lg bg-white p-2"> + {options.map((option) => ( + <button + key={option} + onClick={() => onToggle(option)} + className={`${className} flex-1 rounded-lg px-4 py-2 w-[120px] text-center text-sm font-medium transition-colors ${ + selected === option + ? "bg-primary text-white" + : "bg-transparent text-gray-800" + }`} + > + {option} + </button> + ))} + </div> + ); + } diff --git a/templates/landing-page/model2/src/components/atoms/input.tsx b/templates/landing-page/model2/src/components/atoms/input.tsx new file mode 100644 index 0000000..4d5334d --- /dev/null +++ b/templates/landing-page/model2/src/components/atoms/input.tsx @@ -0,0 +1,70 @@ +import React, { ComponentProps } from 'react'; + +interface InputProps extends ComponentProps<'input'> { + label?: string; + isTextArea?: boolean; + icon?: React.ReactNode; + rightIcon?: React.ReactNode; + containerClassName?: string; +} + +/** + * Renders an input component with the provided label, icon, and input properties. + * + * @param {InputProps} props - The props for the input component. + * @param {string} [props.label] - The optional label for the input field. + * @param {React.ReactNode} [props.icon] - The optional icon to display inside the input field. + * @param {React.ReactNode} [props.rightIcon] - The optional icon to display on the right side inside the input field. + * @param {string} [props.containerClassName] - The optional class name for the container. + * @returns {JSX.Element} - The rendered input component. + */ +export default function Input({ + label, + isTextArea, + icon, + rightIcon, + containerClassName, + className, + ...props +}: InputProps): JSX.Element { + + + return ( + <div className={`w-full mb-5 space-y-4 ${containerClassName}`}> + {label && ( + <label + className={`text-md font-semibold px-1 ${ + 'text-rasengan-light-text' + }`} + > + {label} + </label> + )} + <div className="flex items-center"> + {isTextArea ? ( + <textarea + id="w3review" + name="w3review" + rows={4} + cols={50} + className={`w-full ${icon ? 'pl-10' : 'pl-3'} ${ + rightIcon ? 'pr-10' : 'pr-3' + } py-2 rounded-lg border-[1px] ${ + 'bg-rasengan-light-background text-rasengan-light-text border-rasengan-light-border outline-none focus:border-rasengan-light-primary' + } ${className}`} + placeholder={props.placeholder} + ></textarea> + ) : ( + <input + {...props} + className={`w-full ${icon ? 'pl-10' : 'pl-3'} ${ + rightIcon ? 'pr-10' : 'pr-3' + } py-2 rounded-lg border-[1px] outline-none focus:border-rasengan-primary ${ + 'bg-rasengan-light-background text-rasengan-light-text border-rasengan-light-border outline-none focus:border-rasengan-light-primary' + } ${className}`} + /> + )} + </div> + </div> + ); +} diff --git a/templates/landing-page/model2/src/components/molecules/move-in.tsx b/templates/landing-page/model2/src/components/molecules/move-in.tsx new file mode 100644 index 0000000..81e578d --- /dev/null +++ b/templates/landing-page/model2/src/components/molecules/move-in.tsx @@ -0,0 +1,29 @@ +import { motion } from "framer-motion"; +import { ComponentProps } from "react"; + +type Props = { + children: React.ReactNode; + id?: string; + className?: ComponentProps<"div">["className"]; +}; + +export const MoveIn = ({ children, className, id }: Props) => { + const variants = { + hidden: { opacity: 0, translateY: 20 }, + visible: { opacity: 1, translateY: 0 }, + }; + + return ( + <motion.div + id={id} + className={className} + variants={variants} + initial='hidden' + whileInView='visible' + viewport={{ once: true, amount: 0.3 }} + transition={{ duration: 0.7, ease: "easeInOut" }} + > + {children} + </motion.div> + ); +}; diff --git a/templates/landing-page/model2/src/components/organismes/about-us.tsx b/templates/landing-page/model2/src/components/organismes/about-us.tsx new file mode 100644 index 0000000..d4bc68e --- /dev/null +++ b/templates/landing-page/model2/src/components/organismes/about-us.tsx @@ -0,0 +1,172 @@ +import Button from "@/components/atoms/Button"; +import ToggleSwitch from "@/components/atoms/ToggleButton"; +import Typography from "@/components/atoms/Typography"; +import { useState } from "react"; + +const AboutUs = () => { + const [selectedOption, setSelectedOption] = useState("Bill Monthly"); + + const handleToggle = (option: string) => { + setSelectedOption(option); + }; + + const plans = [ + { + name: "Free", + currency: "$", + price: "0", + description: "Have a go and test your superpowers", + features: [ + "2 Users", + "2 Files", + "Public Share & Comments", + "Chat Support", + "New income apps", + ], + buttonText: "Signup for free", + buttonColor: "bg-white", + textColor: "text-primary", + bgColor: "bg-white", + detailBgColor: "bg-[#F9FAFB]", + descriptionColor: "text-[#A6A6A6]", + priceColor: "text-[#191A15]", + }, + { + name: "Pro", + currency: "$", + price: "8", + description: "Experiment the power of infinite possibilities", + features: [ + "4 Users", + "All apps", + "Unlimited editable exports", + "Folders and collaboration", + "All incoming apps", + ], + buttonText: "Go to pro", + buttonColor: "bg-primary", + textColor: "text-white", + bgColor: "bg-primary", + detailBgColor: "bg-white", + highlight: true, + descriptionColor: "text-white", + priceColor: "text-white", + }, + { + name: "Business", + currency: "$", + price: "16", + description: "Unveil new superpowers and join the Design League", + features: [ + "All the features of pro plan", + "Account success Manager", + "Single Sign-On (SSO)", + "Co-conception program", + "Collaboration-Soon", + ], + buttonText: "Go to Business", + buttonColor: "bg-white", + textColor: "text-primary", + bgColor: "bg-white", + detailBgColor: "bg-[#F9FAFB]", + descriptionColor: "text-[#A6A6A6]", + priceColor: "text-[#191A15]", + }, + ]; + + return ( + <section + id="about-us" + className="bg-custom-gradient-4 px-4 pb-8 lg:px-[130px] lg:pb-[130px] flex flex-col" + > + <div className="flex flex-col items-center text-center"> + <Typography + className="text-3xl md:text-4xl lg:text-5xl" + weight="bold" + text="Choose Plan" + /> + <Typography + className="text-3xl md:text-4xl lg:text-5xl mt-4" + weight="bold" + text="That’s Right For You" + /> + <p className="text-sm md:text-base lg:text-lg text-[#A6A6A6] mt-6 mb-10"> + Choose a plan that works best for you. Feel free to contact us. + </p> + <ToggleSwitch + options={["Bill Monthly", "Bill Yearly"]} + selected={selectedOption} + onToggle={handleToggle} + /> + </div> + + <div className="grid grid-cols-1 lg:grid-cols-3 gap-12 mt-10"> + {plans.map((plan, index) => ( + <div + key={index} + className={`relative max-w-[500px] mx-auto lg:max-w-full flex flex-col justify-between p-6 rounded-xl shadow-lg ${ + plan.highlight ? "scale-105 overflow-hidden" : "" + } ${plan.bgColor}`} + > + {/* Highlighted Background */} + {/* {plan.highlight && ( + <div className="absolute inset-0 -z-10 flex items-center justify-center w-full h-full top-32"> + <div className="w-full max-w-[600px] h-full max-h-[600px] bg-[#6BC2A1] rounded-full"></div> + </div> + )} */} + + <div className="text-center"> + <h2 + className={`text-2xl md:text-3xl font-bold ${plan.priceColor}`} + > + {plan.name} + </h2> + <p + className={`text-sm md:text-base mt-2 ${plan.descriptionColor}`} + > + {plan.description} + </p> + <div className="mt-4"> + <p + className={`text-sm md:text-base inline-block mr-12 ${plan.descriptionColor}`} + > + {plan.currency} + </p> + <p className={`text-4xl md:text-5xl ${plan.priceColor}`}> + {plan.price} + </p> + </div> + {plan.highlight && ( + <p className="text-xs md:text-sm text-white bg-[#85DAB9] px-3 py-1 rounded-md mt-2 inline-block"> + Save $50 a year + </p> + )} + </div> + <div + className={`flex flex-col justify-between flex-grow p-4 rounded-xl mt-6 shadow-sm ${plan.detailBgColor}`} + > + <ul className="space-y-4 md:space-y-6"> + {plan.features.map((feature, index) => ( + <li key={index} className="flex items-center gap-2"> + <p className="bg-primary px-2 py-1 rounded-full flex items-center justify-center text-white text-xs"> + ✔ + </p> + <p className="text-xs md:text-sm lg:text-lg text-[#191A15]"> + {feature} + </p> + </li> + ))} + </ul> + <Button + text={plan.buttonText} + className={`mt-6 w-full py-2 shadow rounded-lg text-sm md:text-base lg:text-base ${plan.buttonColor} ${plan.textColor}`} + /> + </div> + </div> + ))} + </div> + </section> + ); +}; + +export default AboutUs; diff --git a/templates/landing-page/model2/src/components/organismes/blog.tsx b/templates/landing-page/model2/src/components/organismes/blog.tsx new file mode 100644 index 0000000..2a312a3 --- /dev/null +++ b/templates/landing-page/model2/src/components/organismes/blog.tsx @@ -0,0 +1,71 @@ +import Image from "@rasenganjs/image"; +import computer from "@/assets/images/computer.png"; +import Typography from "@/components/atoms/Typography"; + +const Blog = () => { + return ( + <section + id="blog" + className="flex flex-col lg:flex-row bg-custom-gradient-3 p-6 md:p-10 lg:p-[130px] gap-12" + > + <div className="flex flex-1 flex-col items-center lg:items-start text-center lg:text-left"> + <Typography + className="text-2xl md:text-4xl lg:text-5xl" + text="What Benefits Will You Get" + weight="bold" + /> + <div className="flex flex-col gap-6 mt-8"> + {[ + "Free Consulting With Experts Saving Money", + "Online Banking", + "Investment Report Every Month", + "Saving Money For The Future", + "Online Transactions", + ].map((benefit, index) => ( + <p + key={index} + className="flex items-center gap-4 text-base md:text-lg" + > + <span className="bg-primary px-2 py-1 rounded-full flex items-center justify-center text-white text-xs"> + ✔ + </span> + {benefit} + </p> + ))} + </div> + </div> + + <div className="relative flex flex-1 justify-center lg:justify-end"> + <Image src={computer} alt="computer" className="rounded-xl w-full" /> + {/* <div className="absolute max-lg:right-[350px] left-[270px] top-[150px] bg-primary rotate-[15deg] h-10 w-10 rounded-[10px] flex items-center justify-center"> + <Image src={sms} alt="sms" /> + </div> + <div className="absolute top-6 -right-4 gap-2 rounded-[10px] flex flex-col justify-between p-4 bg-white"> + <p className="text-[#A9A7B6] text-xs">Total Income</p> + <div className="flex gap-8"> + <span className="text-base">$245.00</span> + <Image src={bar} alt="Bar" className="h-full" /> + </div> + </div> + <div className="absolute left-[340px] top-[410px] gap-14 rounded-[10px] flex justify-between items-center p-4 bg-white"> + <div className="flex justify-between items-center gap-2"> + <Image src={green_tick} alt="green_tick" className="h-full" /> + <span className="text-base">Money Transfer Succesfull</span> + </div> + </div> + <div className="absolute max-lg:right-[350px] left-[270px] gap-14 rounded-[10px] flex justify-between items-center p-4 bg-white"> + <Image src={amanda} alt="amanda" className="h-full" /> + <div className="flex flex-col gap-2"> + <p className="text-[#191A15] text-base">Amanda Young</p> + <span className="text-xs text-[#A6A6A6]">Expert Saving Money</span> + </div> + <p className="bg-primary p-2 rounded-full flex items-center justify-center"> + <Image src={sms} alt="sms" className="h-4 w-4" /> + </p> + </div> */} + </div> + </section> + ); +}; + +export default Blog; diff --git a/templates/landing-page/model2/src/components/organismes/faq.tsx b/templates/landing-page/model2/src/components/organismes/faq.tsx new file mode 100644 index 0000000..7a17f51 --- /dev/null +++ b/templates/landing-page/model2/src/components/organismes/faq.tsx @@ -0,0 +1,106 @@ +import Button from "@/components/atoms/Button"; +import teams from "@/assets/images/teams.png"; +import cloud from "@/assets/images/cloud.png"; +import analytics from "@/assets/images/analytics.png"; +import { motion } from "framer-motion"; + +const Faq = () => { + const sectionVariants = { + hidden: { opacity: 0, translateY: 20 }, + visible: { opacity: 1, translateY: 0 }, + }; + + //conteneur parent pour les animations + const containerVariants = { + hidden: {}, + visible: { + transition: { + staggerChildren: 0.3, //délai d'animation de chaque enfant + }, + }, + }; + return ( + <section id="faq" className="bg-custom-gradient-2"> + <div className="flex flex-col items-center text-center gap-6 px-4 pt-8 lg:flex-row lg:justify-between lg:items-start lg:text-left lg:px-[130px] lg:pt-[130px]"> + <h1 className="text-2xl md:text-3xl lg:text-4xl font-bold text-black leading-snug"> + Our Features + <span className="block">you can get</span> + </h1> + <p className="text-[#A6A6A6] text-sm md:text-base lg:text-lg max-w-xl"> + We offer a variety of interesting features that can help increase your + productivity at work and make it easy to manage your projects. + </p> + <Button + text="Get Started" + className="px-6 py-3 bg-primary text-white text-sm md:text-base rounded-full" + /> + </div> + + <div className="pt-12 px-4 lg:px-[130px]"> + <motion.div + className="grid grid-cols-1 gap-10 md:grid-cols-2 lg:grid-cols-3" + variants={containerVariants} + initial="hidden" + whileInView="visible" + viewport={{ once: true, amount: 0.3 }} + > + <motion.div + className="flex flex-col items-center text-center" + variants={sectionVariants} + transition={{ duration: 0.7, ease: "easeInOut" }} + > + <img + src={teams} + alt="Collaboration Teams" + className="w-full max-md:p-4" + /> + <h3 className="mt-6 text-2xl md:text-3xl font-bold"> + Collaboration Teams + </h3> + <p className="text-[#A6A6A6] text-sm md:text-base mt-2"> + Handle projects together with your team virtually. + </p> + </motion.div> + + <motion.div + className="flex flex-col items-center text-center" + variants={sectionVariants} + transition={{ duration: 0.7, ease: "easeInOut" }} + > + <img + src={cloud} + alt="Cloud Storage" + className="w-full max-md:p-4" + /> + <h3 className="mt-6 text-2xl md:text-3xl font-bold"> + Cloud Storage + </h3> + <p className="text-[#A6A6A6] text-sm md:text-base mt-2"> + No need to worry about storage as we provide up to 2 TB. + </p> + </motion.div> + + <motion.div + className="flex flex-col items-center text-center" + variants={sectionVariants} + transition={{ duration: 0.7, ease: "easeInOut" }} + > + <img + src={analytics} + alt="Daily Analytics" + className="w-full max-md:p-4" + /> + <h3 className="mt-6 text-2xl md:text-3xl font-bold"> + Daily Analytics + </h3> + <p className="text-[#A6A6A6] text-sm md:text-base mt-2"> + Get useful information daily to make your work easier. + </p> + </motion.div> + </motion.div> + </div> + </section> + ); +}; + +export default Faq; diff --git a/templates/landing-page/model2/src/components/organismes/products.tsx b/templates/landing-page/model2/src/components/organismes/products.tsx new file mode 100644 index 0000000..f1c1af5 --- /dev/null +++ b/templates/landing-page/model2/src/components/organismes/products.tsx @@ -0,0 +1,89 @@ +import fullStar from "@/assets/full-star.svg"; +import emptyStar from "@/assets/empty-star.svg"; +import activity from "@/assets/activity.svg"; +import pieChart from "@/assets/activity.svg"; +import command from "@/assets/command.svg"; +import Image from "@rasenganjs/image"; + +const Products = () => { + const starCount = 5; + const starCount_ = 4; + + return ( + <section + id="products" + className="flex flex-col lg:flex-row p-8 lg:px-[130px] lg:py-16 bg-[#faf8ff] gap-8" + > + <div className="flex flex-col flex-1"> + <h3 className="text-3xl md:text-4xl lg:text-5xl font-bold text-center lg:text-left"> + How we support our partners all over the world + </h3> + <p className="pt-6 pb-8 text-base text-[#A6A6A6] text-center lg:text-left"> + SaaS has become a common delivery model for many business + applications, including office software, messaging software, payroll + processing software, DBMS software, and management software. + </p> + + <div className="flex flex-col lg:flex-row items-center justify-center lg:justify-start gap-8 mt-12"> + {[ + { stars: starCount, rating: "4.9", name: "Databricks" }, + { stars: starCount_, rating: "4.8", name: "Chainalysis" }, + ].map(({ stars, rating, name }, idx) => ( + <div key={idx} className="text-center"> + <div className="flex justify-center gap-1"> + {Array.from({ length: stars }).map((_, index) => ( + <Image key={index} src={fullStar} alt="fullStar" /> + ))} + {stars < 5 && <Image src={emptyStar} alt="emptyStar" />} + </div> + <p> + <span className="font-bold">{rating}</span> / 5 rating + </p> + <span className="text-[#A6A6A6]">{name}</span> + </div> + ))} + </div> + </div> + + <div className="flex flex-col flex-1 max-md:pt-8 max-md:gap-8 justify-between"> + {[ + { + icon: activity, + title: "Publishing", + description: + "Plan, collaborate, and publish your content that drives meaningful engagement and growth for your brand.", + }, + { + icon: pieChart, + title: "Analytics", + description: + "Analyze your performance and create gorgeous reports.", + }, + { + icon: command, + title: "Engagement", + description: "Quickly navigate and engage with your audience.", + }, + ].map(({ icon, title, description }, idx) => ( + <div key={idx} className="flex items-start gap-4"> + <div className="bg-white p-4 h-[60px] w-[60px] flex items-center justify-center"> + <Image + src={icon} + alt={title} + className="object-contain w-full h-full" + /> + </div> + <div> + <h6 className="text-2xl font-bold">{title}</h6> + <p className="text-base md:text-lg text-[#A6A6A6]"> + {description} + </p> + </div> + </div> + ))} + </div> + </section> + ); +}; + +export default Products; diff --git a/templates/landing-page/model2/src/styles/index.css b/templates/landing-page/model2/src/styles/index.css index aed3eca..c6684c1 100644 --- a/templates/landing-page/model2/src/styles/index.css +++ b/templates/landing-page/model2/src/styles/index.css @@ -87,3 +87,14 @@ font-feature-settings: "rlig" 1, "calt" 1; } } + +.fade-in-up { + opacity: 0; + transform: translateY(20px); + transition: opacity 1s ease, transform 1s ease; +} + +.fade-in-up.visible { + opacity: 1; + transform: translateY(0); +} diff --git a/templates/landing-page/model2/tailwind.config.js b/templates/landing-page/model2/tailwind.config.js index 6b7476d..92bf494 100644 --- a/templates/landing-page/model2/tailwind.config.js +++ b/templates/landing-page/model2/tailwind.config.js @@ -59,7 +59,7 @@ module.exports = { sm: "calc(var(--radius) - 4px)", }, fontFamily: { - sans: ["var(--font-sans)", ...fontFamily.sans], + sans: ["var(--font-sans)", ...fontFamily.sans], }, keyframes: { "accordion-down": { @@ -75,6 +75,12 @@ module.exports = { "accordion-down": "accordion-down 0.2s ease-out", "accordion-up": "accordion-up 0.2s ease-out", }, + backgroundImage: { + 'custom-gradient': 'linear-gradient(to right, #d9efeb, #f2f1ef, #e6f1eb)', + 'custom-gradient-2': 'linear-gradient(to bottom right, #fff7f6, #feffff, #fff5f6, #fdfffd)', + 'custom-gradient-3': 'linear-gradient(to bottom right, #fff7f6, #fff7f6, #ffffff, #d7f0e7)', + 'custom-gradient-4': 'linear-gradient(to right, #fffbfb, #fefdfd, #f8fdfc, #f0f9f7, #e3f5ee, #d7f0e7)', + }, }, }, plugins: [require("tailwindcss-animate")], diff --git a/templates/landing-page/model3/.gitignore b/templates/landing-page/model3/.gitignore new file mode 100644 index 0000000..5ce9760 --- /dev/null +++ b/templates/landing-page/model3/.gitignore @@ -0,0 +1,31 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Cache +.vite +.rasengan + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Local Netlify folder +.netlify diff --git a/templates/landing-page/model3/package-lock.json b/templates/landing-page/model3/package-lock.json new file mode 100644 index 0000000..ae8b8ef --- /dev/null +++ b/templates/landing-page/model3/package-lock.json @@ -0,0 +1,5237 @@ +{ + "name": "model-4", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "model-4", + "version": "1.0.0", + "dependencies": { + "@rasenganjs/image": "^1.0.0", + "rasengan": "1.0.0-beta.50", + "react": "^18.3.0", + "react-dom": "^18.3.0" + }, + "devDependencies": { + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "autoprefixer": "^10.4.16", + "cross-env": "^7.0.3", + "postcss": "^8.4.31", + "tailwindcss": "^3.3.5", + "vite": "^5.2.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.6.tgz", + "integrity": "sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "license": "MIT" + }, + "node_modules/@rasenganjs/image": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rasenganjs/image/-/image-1.1.2.tgz", + "integrity": "sha512-g9c19gSFYn7R2acrSMkxKlQk7juEWY/NZB2RmQcrPclVfNXSWRPtkXGrT07XYMnO+utX0azlGw+dhk5KgUvnIw==", + "license": "MIT", + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/@remix-run/router": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.23.0.tgz", + "integrity": "sha512-8OR+Ok3SGEMsAZispLx8jruuXw0HVF16k+ub2eNXKHDmdxL4cf9NlNpAzhlOhNyXzKDEJuFeq0nZm+XlNb1IFw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.23.0.tgz", + "integrity": "sha512-rEFtX1nP8gqmLmPZsXRMoLVNB5JBwOzIAk/XAcEPuKrPa2nPJ+DuGGpfQUR0XjRm8KjHfTZLpWbKXkA5BoFL3w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.23.0.tgz", + "integrity": "sha512-ZbqlMkJRMMPeapfaU4drYHns7Q5MIxjM/QeOO62qQZGPh9XWziap+NF9fsqPHT0KzEL6HaPspC7sOwpgyA3J9g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.23.0.tgz", + "integrity": "sha512-PfmgQp78xx5rBCgn2oYPQ1rQTtOaQCna0kRaBlc5w7RlA3TDGGo7m3XaptgitUZ54US9915i7KeVPHoy3/W8tA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.23.0.tgz", + "integrity": "sha512-WAeZfAAPus56eQgBioezXRRzArAjWJGjNo/M+BHZygUcs9EePIuGI1Wfc6U/Ki+tMW17FFGvhCfYnfcKPh18SA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.23.0.tgz", + "integrity": "sha512-v7PGcp1O5XKZxKX8phTXtmJDVpE20Ub1eF6w9iMmI3qrrPak6yR9/5eeq7ziLMrMTjppkkskXyxnmm00HdtXjA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.23.0.tgz", + "integrity": "sha512-nAbWsDZ9UkU6xQiXEyXBNHAKbzSAi95H3gTStJq9UGiS1v+YVXwRHcQOQEF/3CHuhX5BVhShKoeOf6Q/1M+Zhg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.23.0.tgz", + "integrity": "sha512-5QT/Di5FbGNPaVw8hHO1wETunwkPuZBIu6W+5GNArlKHD9fkMHy7vS8zGHJk38oObXfWdsuLMogD4sBySLJ54g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.23.0.tgz", + "integrity": "sha512-Sefl6vPyn5axzCsO13r1sHLcmPuiSOrKIImnq34CBurntcJ+lkQgAaTt/9JkgGmaZJ+OkaHmAJl4Bfd0DmdtOQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.23.0.tgz", + "integrity": "sha512-o4QI2KU/QbP7ZExMse6ULotdV3oJUYMrdx3rBZCgUF3ur3gJPfe8Fuasn6tia16c5kZBBw0aTmaUygad6VB/hQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.23.0.tgz", + "integrity": "sha512-+bxqx+V/D4FGrpXzPGKp/SEZIZ8cIW3K7wOtcJAoCrmXvzRtmdUhYNbgd+RztLzfDEfA2WtKj5F4tcbNPuqgeg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.23.0.tgz", + "integrity": "sha512-I/eXsdVoCKtSgK9OwyQKPAfricWKUMNCwJKtatRYMmDo5N859tbO3UsBw5kT3dU1n6ZcM1JDzPRSGhAUkxfLxw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.23.0.tgz", + "integrity": "sha512-4ZoDZy5ShLbbe1KPSafbFh1vbl0asTVfkABC7eWqIs01+66ncM82YJxV2VtV3YVJTqq2P8HMx3DCoRSWB/N3rw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.23.0.tgz", + "integrity": "sha512-+5Ky8dhft4STaOEbZu3/NU4QIyYssKO+r1cD3FzuusA0vO5gso15on7qGzKdNXnc1gOrsgCqZjRw1w+zL4y4hQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.23.0.tgz", + "integrity": "sha512-0SPJk4cPZQhq9qA1UhIRumSE3+JJIBBjtlGl5PNC///BoaByckNZd53rOYD0glpTkYFBQSt7AkMeLVPfx65+BQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.23.0.tgz", + "integrity": "sha512-lqCK5GQC8fNo0+JvTSxcG7YB1UKYp8yrNLhsArlvPWN+16ovSZgoehlVHg6X0sSWPUkpjRBR5TuR12ZugowZ4g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.10.tgz", + "integrity": "sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.2.tgz", + "integrity": "sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001664", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz", + "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.30", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.30.tgz", + "integrity": "sha512-sXI35EBN4lYxzc/pIGorlymYNzDBOqkSlVRe6MkgBsW/hW1tpC/HDJ2fjG7XnjakzfLEuvdmux0Mjs6jHq4UOA==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-type": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.5.0.tgz", + "integrity": "sha512-dMuq6WWnP6BpQY0zYJNpTtQWgeCImSMG0BTIzUBXvxbwc1HWP/E7AE4UWU9XSCOPGJuOHda0HpDnwM2FW+d90A==", + "license": "MIT", + "dependencies": { + "get-stream": "^9.0.1", + "strtok3": "^8.1.0", + "token-types": "^6.0.0", + "uint8array-extras": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/file-type/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "9.3.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.7.tgz", + "integrity": "sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==", + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.3", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/inquirer/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/inquirer/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keypress": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.2.1.tgz", + "integrity": "sha512-HjorDJFNhnM4SicvaUXac0X77NiskggxJdesG72+O5zBKpSqKFCrqmndKVqpu3pFqkla0St6uGk8Ju0sCurrmg==", + "license": "MIT" + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "license": "MIT", + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", + "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.9.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.3.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "string-width": "^6.1.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "license": "MIT" + }, + "node_modules/ora/node_modules/string-width": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^10.2.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + }, + "node_modules/peek-readable": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.2.0.tgz", + "integrity": "sha512-U94a+eXHzct7vAd19GH3UQ2dH4Satbng0MyYTMaQatL0pvYYL5CTPR25HBhKtecl+4bfu1/i3vC6k0hydO5Vcw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rasengan": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/rasengan/-/rasengan-1.0.0-beta.50.tgz", + "integrity": "sha512-v93DGCaL2N1cjmoXluVZc+xmfQ7i7wnOfhb5JeSLK9SDeSZWxto3oqVeUeyoy4kgCtrfRf2LM8/WxBB0EB8ojQ==", + "dependencies": { + "@vitejs/plugin-react": "^4.2.1", + "chalk": "^5.3.0", + "commander": "^11.1.0", + "compression": "^1.7.4", + "cross-spawn": "^7.0.3", + "execa": "^8.0.1", + "express": "^4.18.2", + "file-type": "^19.0.0", + "inquirer": "^9.2.12", + "keypress": "^0.2.1", + "node-fetch": "^3.3.2", + "open": "^10.1.0", + "ora": "^7.0.1", + "path-browserify": "^1.0.1", + "react-helmet-async": "^2.0.4", + "react-router-dom": "^6.20.1", + "sirv": "^2.0.3" + }, + "bin": { + "rasengan": "lib/esm/cli/index.js" + }, + "engines": { + "node": ">=18.19.0", + "npm": ">=7.0.0" + }, + "peerDependencies": { + "@netlify/functions": "^2.6.0", + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "react": "^18.3.*", + "react-dom": "^18.3.*", + "sass": "*", + "stylus": "*", + "vite": "^5.2.0" + }, + "peerDependenciesMeta": { + "@netlify/functions": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-helmet-async": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.5.tgz", + "integrity": "sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg==", + "license": "Apache-2.0", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.23.0.tgz", + "integrity": "sha512-vXB4IT9/KLDrS2WRXmY22sVB2wTsTwkpxjB8Q3mnakTENcYw3FRmfdYDy/acNmls+lHmDazgrRjK/yQ6hQAtwA==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.23.0", + "@rollup/rollup-android-arm64": "4.23.0", + "@rollup/rollup-darwin-arm64": "4.23.0", + "@rollup/rollup-darwin-x64": "4.23.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.23.0", + "@rollup/rollup-linux-arm-musleabihf": "4.23.0", + "@rollup/rollup-linux-arm64-gnu": "4.23.0", + "@rollup/rollup-linux-arm64-musl": "4.23.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.23.0", + "@rollup/rollup-linux-riscv64-gnu": "4.23.0", + "@rollup/rollup-linux-s390x-gnu": "4.23.0", + "@rollup/rollup-linux-x64-gnu": "4.23.0", + "@rollup/rollup-linux-x64-musl": "4.23.0", + "@rollup/rollup-win32-arm64-msvc": "4.23.0", + "@rollup/rollup-win32-ia32-msvc": "4.23.0", + "@rollup/rollup-win32-x64-msvc": "4.23.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "license": "MIT", + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strtok3": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-8.1.0.tgz", + "integrity": "sha512-ExzDvHYPj6F6QkSNe/JxSlBxTh3OrI6wrAIz53ulxo1c4hBJ1bT9C/JrAthEKHWG9riVH3Xzg7B03Oxty6S2Lw==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.1.4" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz", + "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", + "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uint8array-extras": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", + "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/templates/landing-page/model3/package.json b/templates/landing-page/model3/package.json new file mode 100644 index 0000000..cf042cb --- /dev/null +++ b/templates/landing-page/model3/package.json @@ -0,0 +1,27 @@ +{ + "name": "model-4", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "rasengan dev", + "build": "rasengan build", + "build:prepare": "rasengan prepare", + "start": "rasengan start" + }, + "dependencies": { + "rasengan": "1.0.0-beta.50", + "@rasenganjs/image": "^1.0.0", + "react": "^18.3.0", + "react-dom": "^18.3.0" + }, + "devDependencies": { + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "cross-env": "^7.0.3", + "tailwindcss": "^3.3.5", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.31", + "vite": "^5.2.0" + } +} \ No newline at end of file diff --git a/templates/landing-page/model3/postcss.config.js b/templates/landing-page/model3/postcss.config.js new file mode 100644 index 0000000..669db9b --- /dev/null +++ b/templates/landing-page/model3/postcss.config.js @@ -0,0 +1,10 @@ +import { adaptPath } from "rasengan"; + +export default { + plugins: { + tailwindcss: { + config: adaptPath("./tailwind.config"), + }, + autoprefixer: {}, + }, +}; diff --git a/templates/landing-page/model3/public/about-bg.png b/templates/landing-page/model3/public/about-bg.png new file mode 100644 index 0000000..e20b585 Binary files /dev/null and b/templates/landing-page/model3/public/about-bg.png differ diff --git a/templates/landing-page/model3/public/hero.webp b/templates/landing-page/model3/public/hero.webp new file mode 100644 index 0000000..935b8e3 Binary files /dev/null and b/templates/landing-page/model3/public/hero.webp differ diff --git a/templates/landing-page/model3/public/logo.png b/templates/landing-page/model3/public/logo.png new file mode 100644 index 0000000..90a9db0 Binary files /dev/null and b/templates/landing-page/model3/public/logo.png differ diff --git a/templates/landing-page/model3/public/portofolio-1.png b/templates/landing-page/model3/public/portofolio-1.png new file mode 100644 index 0000000..93587fb Binary files /dev/null and b/templates/landing-page/model3/public/portofolio-1.png differ diff --git a/templates/landing-page/model3/public/portofolio-2.png b/templates/landing-page/model3/public/portofolio-2.png new file mode 100644 index 0000000..ba22c19 Binary files /dev/null and b/templates/landing-page/model3/public/portofolio-2.png differ diff --git a/templates/landing-page/model3/public/portofolio-3.png b/templates/landing-page/model3/public/portofolio-3.png new file mode 100644 index 0000000..d11e02b Binary files /dev/null and b/templates/landing-page/model3/public/portofolio-3.png differ diff --git a/templates/landing-page/model3/rasengan-env.d.ts b/templates/landing-page/model3/rasengan-env.d.ts new file mode 100644 index 0000000..e7d4de0 --- /dev/null +++ b/templates/landing-page/model3/rasengan-env.d.ts @@ -0,0 +1 @@ +/// <reference types="rasengan/types/client" /> \ No newline at end of file diff --git a/templates/landing-page/model3/rasengan.config.js b/templates/landing-page/model3/rasengan.config.js new file mode 100644 index 0000000..302261c --- /dev/null +++ b/templates/landing-page/model3/rasengan.config.js @@ -0,0 +1,5 @@ +import { defineConfig } from "rasengan"; + +export default defineConfig({ + reactStrictMode: true, +}); diff --git a/templates/landing-page/model3/src/app/app.layout.tsx b/templates/landing-page/model3/src/app/app.layout.tsx new file mode 100644 index 0000000..7dc903f --- /dev/null +++ b/templates/landing-page/model3/src/app/app.layout.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import { Outlet, LayoutComponent } from "rasengan"; + +const AppLayout: LayoutComponent = () => { + return ( + <React.Fragment> + <Outlet /> + </React.Fragment> + ); +}; + +AppLayout.path = "/"; + +export default AppLayout; \ No newline at end of file diff --git a/templates/landing-page/model3/src/app/app.router.ts b/templates/landing-page/model3/src/app/app.router.ts new file mode 100644 index 0000000..b832612 --- /dev/null +++ b/templates/landing-page/model3/src/app/app.router.ts @@ -0,0 +1,11 @@ +import { RouterComponent, defineRouter } from "rasengan"; +import Home from "@/app/home.page"; +import AppLayout from "@/app/app.layout"; + +class AppRouter extends RouterComponent {} + +export default defineRouter({ + imports: [], + layout: AppLayout, + pages: [Home], +})(AppRouter); diff --git a/templates/landing-page/model3/src/app/home.page.tsx b/templates/landing-page/model3/src/app/home.page.tsx new file mode 100644 index 0000000..d5ae92f --- /dev/null +++ b/templates/landing-page/model3/src/app/home.page.tsx @@ -0,0 +1,33 @@ +import { About } from "@/components/molecules/about"; +import { Contact } from "@/components/molecules/contact"; +import { Footer } from "@/components/molecules/footer"; +import { Header } from "@/components/molecules/header"; +import { Portfolio } from "@/components/molecules/portofolio"; +import { Hero } from "@/components/molecules/hero"; +import { Services } from "@/components/molecules/services"; +import { PageComponent } from "rasengan"; + +const Home: PageComponent = () => { + + return ( + <> + <Header /> + <Hero /> + <About /> + <div className="my-20" /> + <Services /> + <div className="my-20" /> + <Portfolio /> + <Contact /> + <Footer /> + </> + ); +} + +Home.path = "/"; +Home.metadata = { + title: "Home", + description: "Home page", +}; + +export default Home; \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/button.tsx b/templates/landing-page/model3/src/components/atoms/button.tsx new file mode 100644 index 0000000..9ff8865 --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/button.tsx @@ -0,0 +1,17 @@ +import { HTMLAttributes, ReactNode } from "react"; + +interface Props extends HTMLAttributes<HTMLButtonElement> { + icon: ReactNode +} + +export function Button(props: Props) { + return ( + <button + {...props} + className="bg-primary bg-opacity-80 duration-150 hover:bg-opacity-100 text-white h-12 w-40 font-medium flex justify-center items-center gap-x-1" + > + {props.children} + {props.icon} + </button> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/arrow.tsx b/templates/landing-page/model3/src/components/atoms/svg/arrow.tsx new file mode 100644 index 0000000..9c60dd4 --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/arrow.tsx @@ -0,0 +1,9 @@ +import { SVGAttributes } from "react"; + +export function Arrow(props: SVGAttributes<SVGElement>) { + return ( + <svg width="24" height="25" viewBox="0 0 24 25" fill="none" {...props}> + <path d="M8 7.5C8 6.94772 8.44772 6.5 9 6.5L17 6.5C17.5523 6.5 18 6.94772 18 7.5V15.5C18 16.0523 17.5523 16.5 17 16.5C16.4477 16.5 16 16.0523 16 15.5V9.91421L7.70711 18.2071C7.31658 18.5976 6.68342 18.5976 6.29289 18.2071C5.90237 17.8166 5.90237 17.1834 6.29289 16.7929L14.5858 8.5L9 8.5C8.44772 8.5 8 8.05228 8 7.5Z" fill="white"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/chevron-left.tsx b/templates/landing-page/model3/src/components/atoms/svg/chevron-left.tsx new file mode 100644 index 0000000..85f105b --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/chevron-left.tsx @@ -0,0 +1,7 @@ +export function ChevronLeft() { + return ( + <svg width="9" height="15" viewBox="0 0 8 13" fill="none"> + <path d="M6.82486 12.4565C7.16841 12.1129 7.16841 11.5559 6.82486 11.2124L2.16869 6.55619L6.82486 1.90002C7.16841 1.55647 7.16841 0.999474 6.82486 0.655929C6.48132 0.312383 5.92432 0.312383 5.58077 0.655929L0.302555 5.93415C-0.0409903 6.27769 -0.0409904 6.83469 0.302555 7.17823L5.58077 12.4565C5.92432 12.8 6.48132 12.8 6.82486 12.4565Z" fill="white"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/chevron-right.tsx b/templates/landing-page/model3/src/components/atoms/svg/chevron-right.tsx new file mode 100644 index 0000000..239c2fb --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/chevron-right.tsx @@ -0,0 +1,7 @@ +export function ChevronRight() { + return ( + <svg width="9" height="15" viewBox="0 0 9 15" fill="none"> + <path d="M0.66122 13.8498C0.268526 13.4571 0.268526 12.8204 0.66122 12.4277L5.98352 7.1054L0.661219 1.7831C0.268525 1.39041 0.268525 0.753724 0.661219 0.361031C1.05391 -0.0316639 1.6906 -0.0316639 2.08329 0.36103L8.11662 6.39436C8.50932 6.78706 8.50932 7.42374 8.11662 7.81643L2.08329 13.8498C1.6906 14.2425 1.05391 14.2425 0.66122 13.8498Z" fill="white"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/close.tsx b/templates/landing-page/model3/src/components/atoms/svg/close.tsx new file mode 100644 index 0000000..ce35bfc --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/close.tsx @@ -0,0 +1,18 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number +} + +export function Close(props: Props) { + return ( + <svg + width={props.size} + height={props.size} + viewBox="0 0 16 16" + {...props} + > + <path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/development.tsx b/templates/landing-page/model3/src/components/atoms/svg/development.tsx new file mode 100644 index 0000000..cc76b26 --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/development.tsx @@ -0,0 +1,16 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number +} + +export function DevelopmentSVG(props: Props) { + return ( + <svg {...props} height={props.size} width={props.size} viewBox="0 0 32 32" fill="none"> + <path d="M12 17.3333C11.12 17.7733 10.3867 18.4267 9.83999 19.24C9.53332 19.7067 9.53332 20.2933 9.83999 20.76C10.3867 21.5733 11.12 22.2267 12 22.6667" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M20.28 17.3333C21.16 17.7733 21.8933 18.4267 22.44 19.24C22.7467 19.7067 22.7467 20.2933 22.44 20.76C21.8933 21.5733 21.16 22.2267 20.28 22.6667" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M12 29.3333H20C26.6667 29.3333 29.3333 26.6667 29.3333 20V12C29.3333 5.33333 26.6667 2.66667 20 2.66667H12C5.33332 2.66667 2.66666 5.33333 2.66666 12V20C2.66666 26.6667 5.33332 29.3333 12 29.3333Z" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M2.97336 10.68L28.6 10.6667" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/graphic-design.tsx b/templates/landing-page/model3/src/components/atoms/svg/graphic-design.tsx new file mode 100644 index 0000000..330e3d4 --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/graphic-design.tsx @@ -0,0 +1,16 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number +} + +export function GraphicDesignSVG(props: Props) { + return ( + <svg {...props} height={props.size} width={props.size} viewBox="0 0 32 32" fill="none"> + <path d="M12 17.3333C11.12 17.7733 10.3867 18.4267 9.83999 19.24C9.53332 19.7067 9.53332 20.2933 9.83999 20.76C10.3867 21.5733 11.12 22.2267 12 22.6667" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M20.28 17.3333C21.16 17.7733 21.8933 18.4267 22.44 19.24C22.7467 19.7067 22.7467 20.2933 22.44 20.76C21.8933 21.5733 21.16 22.2267 20.28 22.6667" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M12 29.3333H20C26.6667 29.3333 29.3333 26.6667 29.3333 20V12C29.3333 5.33333 26.6667 2.66667 20 2.66667H12C5.33332 2.66667 2.66666 5.33333 2.66666 12V20C2.66666 26.6667 5.33332 29.3333 12 29.3333Z" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M2.97336 10.68L28.6 10.6667" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/motion-graphik.tsx b/templates/landing-page/model3/src/components/atoms/svg/motion-graphik.tsx new file mode 100644 index 0000000..142f9dd --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/motion-graphik.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number +} + +export function MotionGraphikSVG(props: Props) { + return ( + <svg {...props} height={props.size} width={props.size} viewBox="0 0 32 32" fill="none"> + <path d="M23.2 25.6667H8.8C6.8 25.6667 6 24.8133 6 22.6933V21.3067C6 19.1867 6.8 18.3333 8.8 18.3333H23.2C25.2 18.3333 26 19.1867 26 21.3067V22.6933C26 24.8133 25.2 25.6667 23.2 25.6667Z" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M20.5333 14.3333H11.4667C9.46666 14.3333 8.66666 13.48 8.66666 11.36V9.97333C8.66666 7.85333 9.46666 7 11.4667 7H20.5333C22.5333 7 23.3333 7.85333 23.3333 9.97333V11.36C23.3333 13.48 22.5333 14.3333 20.5333 14.3333Z" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M16 29.3333V26.1333" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M16 17.3333V14.6667" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M16 2.66666V6.25332" stroke="none" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/photography.tsx b/templates/landing-page/model3/src/components/atoms/svg/photography.tsx new file mode 100644 index 0000000..b0614de --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/photography.tsx @@ -0,0 +1,15 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number +} + +export function PhotographySVG(props: Props) { + return ( + <svg {...props} height={props.size} width={props.size} viewBox="0 0 32 32" fill="none"> + <path d="M9.01333 29.3333H22.9867C26.6667 29.3333 28.1333 27.08 28.3067 24.3333L29 13.32C29.1867 10.44 26.8933 7.99999 24 7.99999C23.1867 7.99999 22.44 7.53332 22.0667 6.81332L21.1067 4.87999C20.4933 3.66666 18.8933 2.66666 17.5333 2.66666H14.48C13.1067 2.66666 11.5067 3.66666 10.8933 4.87999L9.93333 6.81332C9.56 7.53332 8.81333 7.99999 8 7.99999C5.10667 7.99999 2.81333 10.44 3 13.32L3.69333 24.3333C3.85333 27.08 5.33333 29.3333 9.01333 29.3333Z" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M14 10.6667H18" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M16 24C18.3867 24 20.3333 22.0533 20.3333 19.6667C20.3333 17.28 18.3867 15.3333 16 15.3333C13.6133 15.3333 11.6667 17.28 11.6667 19.6667C11.6667 22.0533 13.6133 24 16 24Z" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/play.tsx b/templates/landing-page/model3/src/components/atoms/svg/play.tsx new file mode 100644 index 0000000..74b6d87 --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/play.tsx @@ -0,0 +1,7 @@ +export function PlaySVG() { + return ( + <svg width="20" height="22" viewBox="0 0 20 22" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path d="M19.74 10.565L0.766135 0.0652675C0.60735 -0.0226937 0.412567 -0.0216833 0.254751 0.0679202C0.0969347 0.157524 -9.82103e-05 0.322198 7.4594e-08 0.500257V21.4997C-9.82103e-05 21.6778 0.0969347 21.8425 0.254751 21.9321C0.412567 22.0217 0.60735 22.0227 0.766135 21.9347L19.74 11.435C19.9007 11.3462 20 11.1801 20 11C20 10.8199 19.9007 10.6538 19.74 10.565Z" fill="white"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/ui-ux-design.tsx b/templates/landing-page/model3/src/components/atoms/svg/ui-ux-design.tsx new file mode 100644 index 0000000..bd61578 --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/ui-ux-design.tsx @@ -0,0 +1,15 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number +} + +export function UiUxDesignSVG(props: Props) { + return ( + <svg {...props} height={props.size} width={props.size} viewBox="0 0 32 32" fill="none"> + <path d="M17.3467 3.89333L25.2133 7.38667C27.48 8.38667 27.48 10.04 25.2133 11.04L17.3467 14.5333C16.4533 14.9333 14.9867 14.9333 14.0933 14.5333L6.22667 11.04C3.96 10.04 3.96 8.38667 6.22667 7.38667L14.0933 3.89333C14.9867 3.49333 16.4533 3.49333 17.3467 3.89333Z" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M4 14.6667C4 15.7867 4.84 17.08 5.86667 17.5333L14.92 21.56C15.6133 21.8667 16.4 21.8667 17.08 21.56L26.1333 17.5333C27.16 17.08 28 15.7867 28 14.6667" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M4 21.3333C4 22.5733 4.73333 23.6933 5.86667 24.2L14.92 28.2267C15.6133 28.5333 16.4 28.5333 17.08 28.2267L26.1333 24.2C27.2667 23.6933 28 22.5733 28 21.3333" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/vector-1.tsx b/templates/landing-page/model3/src/components/atoms/svg/vector-1.tsx new file mode 100644 index 0000000..3c293a2 --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/vector-1.tsx @@ -0,0 +1,19 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number +} + +export function Vector1(props: Props) { + return ( + <svg {...props} + width={props.size} + height={props.size + 9} + viewBox="0 0 51 60" + fill="none" + > + <circle cx="20" cy="20" r="18.5" stroke="white" strokeWidth="3"/> + <circle cx="31" cy="40" r="19.5" stroke="white"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/vector-2.tsx b/templates/landing-page/model3/src/components/atoms/svg/vector-2.tsx new file mode 100644 index 0000000..a6b4b01 --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/vector-2.tsx @@ -0,0 +1,21 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number, +} + +export function Vector2(props: Props) { + return ( + <svg + {...props} + width={props.size} + height={props.size} + viewBox="0 0 106 121" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <path d="M32.5135 78.1455L33.8715 20.1376L83.4287 50.3176L32.5135 78.1455Z" stroke="#E7E7E7" strokeWidth="3" strokeLinejoin="round"/> + <path d="M37.0689 100.854L38.508 39.3827L91.0239 71.3644L37.0689 100.854Z" stroke="#E7E7E7" strokeLinejoin="round"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/vector-3.tsx b/templates/landing-page/model3/src/components/atoms/svg/vector-3.tsx new file mode 100644 index 0000000..822aaf6 --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/vector-3.tsx @@ -0,0 +1,20 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number +} + +export function Vector3(props: Props) { + return ( + <svg + {...props} + width={props.size} + height={props.size} + viewBox="0 0 34 34" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <path d="M17 0.333374C18.1506 0.333374 19.0833 1.26611 19.0833 2.41671V14.9167H31.5833C32.7339 14.9167 33.6666 15.8495 33.6666 17.0001C33.6666 18.1506 32.7339 19.0834 31.5833 19.0834H19.0833V31.5834C19.0833 32.734 18.1506 33.6667 17 33.6667C15.8494 33.6667 14.9166 32.734 14.9166 31.5834V19.0834H2.41665C1.26605 19.0834 0.333313 18.1506 0.333313 17.0001C0.333313 15.8495 1.26605 14.9167 2.41665 14.9167H14.9166V2.41671C14.9166 1.26611 15.8494 0.333374 17 0.333374Z" fill="#E7E7E7"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/vector-4.tsx b/templates/landing-page/model3/src/components/atoms/svg/vector-4.tsx new file mode 100644 index 0000000..3e0d5e9 --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/vector-4.tsx @@ -0,0 +1,19 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number +} + +export function Vector4(props: Props) { + return ( + <svg {...props} + width={props.size + 67} + height={props.size} + viewBox="0 0 99 32" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <path d="M2 2L25.2781 26.2247L39.7483 8.60674L57.0497 26.2247L75.9238 8.60674L97 30" stroke="#E7E7E7" strokeWidth="4"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/atoms/svg/videography.tsx b/templates/landing-page/model3/src/components/atoms/svg/videography.tsx new file mode 100644 index 0000000..e824f8a --- /dev/null +++ b/templates/landing-page/model3/src/components/atoms/svg/videography.tsx @@ -0,0 +1,17 @@ +import { SVGProps } from "react"; + +interface Props extends SVGProps<SVGSVGElement> { + size: number +} + +export function VideographySVG(props: Props) { + return ( + <svg {...props} height={props.size} width={props.size} viewBox="0 0 32 32" fill="none" > + <path d="M29.3333 20V12C29.3333 5.33332 26.6667 2.66666 20 2.66666H12C5.33332 2.66666 2.66666 5.33332 2.66666 12V20C2.66666 26.6667 5.33332 29.3333 12 29.3333H20C26.6667 29.3333 29.3333 26.6667 29.3333 20Z" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M3.35999 9.47998H28.64" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M11.36 2.81332V9.29332" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M20.64 2.81332V8.69332" stroke="inherit" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/> + <path d="M13 19.2667V17.6667C13 15.6133 14.4533 14.7733 16.2267 15.8L17.6133 16.6L19 17.4C20.7733 18.4267 20.7733 20.1067 19 21.1333L17.6133 21.9333L16.2267 22.7333C14.4533 23.76 13 22.92 13 20.8667V19.2667V19.2667Z" stroke="inherit" strokeWidth="2" strokeMiterlimit="10" strokeLinecap="round" strokeLinejoin="round"/> + </svg> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/about.tsx b/templates/landing-page/model3/src/components/molecules/about.tsx new file mode 100644 index 0000000..9209669 --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/about.tsx @@ -0,0 +1,30 @@ +import Image from "@rasenganjs/image"; +import { PlaySVG } from "../atoms/svg/play"; + +export function About() { + return ( + <section id="about" className="px-3 lg:px-32"> + <section className="grid grid-cols-1 gap-y-6 lg:gap-y-0 lg:grid-cols-2"> + <h2 className="font-bold text-3xl lg:text-5xl lg:text-balance">Why Enver Is The Best Choice?</h2> + <h4 className="font-extralight text-pretty">Watch this one minute video so you understand why you should use our services!</h4> + </section> + <section className="h-[450px] flex justify-center items-center mt-8 relative"> + <div className="h-full w-full"> + {/* remove this image and uncomment <video> line */} + <Image + alt="About" + src={'/about-bg.png'} + width={'100%'} + height={'100%'} + objectfit="cover" + /> + {/* <video src="" controls /> */} + </div> + {/* remove this component */} + <span className="absolute w-20 h-20 rounded-full flex items-center justify-center bg-opacity-90 hover:bg-opacity-100 duration-150 bg-primary"> + <PlaySVG /> + </span> + </section> + </section> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/contact.tsx b/templates/landing-page/model3/src/components/molecules/contact.tsx new file mode 100644 index 0000000..e8e8899 --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/contact.tsx @@ -0,0 +1,24 @@ +import { Button } from "../atoms/button"; +import { Vector1 } from "../atoms/svg/vector-1"; +import { Vector3 } from "../atoms/svg/vector-3"; + +export function Contact() { + return ( + <section className="bg-[#1E1E2080] relative px-3 lg:px-32 h-80 flex gap-y-10 flex-col lg:flex-row justify-center lg:justify-between lg:items-center"> + <h2 className="text-3xl lg:text-5xl font-bold text-balance"> + Contact us for the service you want to use + </h2> + <Button icon={null}>Contact Us</Button> + {/* for big screens */} + <div className="hidden lg:block"> + <Vector1 size={40} className="absolute bottom-4 left-32" /> + <Vector3 size={20} className="absolute top-8 right-32" /> + </div> + {/* for small screens */} + <div className="block lg:hidden"> + <Vector1 size={40} className="absolute bottom-5 left-5" /> + <Vector3 size={20} className="absolute top-8 right-5" /> + </div> + </section> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/footer.tsx b/templates/landing-page/model3/src/components/molecules/footer.tsx new file mode 100644 index 0000000..368fa1d --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/footer.tsx @@ -0,0 +1,21 @@ +import Image from "@rasenganjs/image"; +import { Link } from "rasengan"; + +export function Footer() { + return ( + <footer className="h-80 lg:h-32 flex flex-col gap-y-8 lg:flex-row items-center justify-center lg:justify-between px-3 lg:px-32"> + <Link className="flex items-center gap-2" to="" target="_blank"> + <Image src="/logo.png" alt="logo" width={40} height={40} /> + <span className="font-bold">Enver</span> + </Link> + <nav> + <ul className="flex flex-col lg:flex-row items-center gap-5 font-light"> + <li><Link className="hover:opacity-80 duration-150" to="">Support</Link></li> + <li><Link className="hover:opacity-80 duration-150" to="">Privacy Policy</Link></li> + <li><Link className="hover:opacity-80 duration-150" to="">Terms and Conditions</Link></li> + </ul> + </nav> + <span>© 2024 Rasengan Labs, All Rights Reserved</span> + </footer> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/header-lg.tsx b/templates/landing-page/model3/src/components/molecules/header-lg.tsx new file mode 100644 index 0000000..dba26ab --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/header-lg.tsx @@ -0,0 +1,29 @@ +import Image from "@rasenganjs/image"; +import { Link } from "rasengan"; + +export function HeaderLg() { + return ( + <header className="flex px-3 lg:px-32 h-16 items-center justify-between"> + <Link className="flex items-center gap-2" to="" target="_blank"> + <Image src="/logo.png" alt="logo" width={40} height={40} /> + <span className="font-bold">Enver</span> + </Link> + <nav className="w-[75%] flex justify-between items-center"> + <ul className="flex flex-row gap-12 text-lg"> + <li><Link className="hover:opacity-85 duration-150" to="#">Home</Link></li> + <li><Link className="hover:opacity-85 duration-150" to="#services">Services</Link></li> + <li><Link className="hover:opacity-85 duration-150" to="#portofolio">Our projects</Link></li> + <li><Link className="hover:opacity-85 duration-150" to="#about">About us</Link></li> + </ul> + <button className="relative text-lg h-11 group overflow-hidden w-40 flex items-center justify-center border-[1px] border-white rounded-md"> + <span + className="absolute inset-0 duration-150 ease-in-out origin-left bg-white scale-x-0 group-hover:scale-x-100" + /> + <span className="relative group-hover:text-black duration-150"> + Contact Us + </span> + </button> + </nav> + </header> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/header-sm.tsx b/templates/landing-page/model3/src/components/molecules/header-sm.tsx new file mode 100644 index 0000000..71ec9ee --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/header-sm.tsx @@ -0,0 +1,79 @@ +import Image from "@rasenganjs/image"; +import { Link } from "rasengan"; +import { AnimationEvent, MouseEvent, useState } from "react"; +import { Close } from "../atoms/svg/close"; + +export function HeaderSm() { + const [showNav, setShowNav] = useState(false); + const [displayInDom, setDisplayInDom] = useState(false) + + function handleAnimationEnd(e: AnimationEvent) { + if(e.animationName == 'moveIn') return ; + + setDisplayInDom(false) + } + + function handleNavClick(e: MouseEvent<HTMLUListElement>) { + const target = e.target as HTMLElement ; + + if(!target.closest('li')) return + + setShowNav(false) + } + + return ( + <> + <header className="flex px-3 h-16 items-center justify-between"> + <Link className="flex items-center gap-2" to="" target="_blank"> + <Image src="/logo.png" alt="logo" width={40} height={40} /> + <span className="font-bold">Enver</span> + </Link> + <div + onClick={() => { + setDisplayInDom(true) + setShowNav(true) + }} + className="md:hidden flex flex-col items-end gap-1" + > + <div className="w-8 h-[2px] rounded-3xl bg-white"></div> + <div className="w-6 h-[2px] rounded-3xl bg-white"></div> + <div className="w-4 h-[2px] rounded-3xl bg-white"></div> + </div> + </header> + { + displayInDom && ( + <> + <div + onClick={() => setShowNav(false)} + className={`fixed inset-0 z-50 bg-black/80 ${showNav ? 'fade-in' : 'fade-out'}`} + /> + <nav + onClick={handleNavClick} + onAnimationEnd={handleAnimationEnd} + className={` + fixed z-50 top-0 bottom-0 right-0 w-3/5 bg-white p-10 flex flex-col gap-6 + ${showNav ? 'move-in' : 'move-out'} + `} + > + <ul className="flex flex-col gap-6 text-lg text-black"> + <li><Link to="#">Home</Link></li> + <li><Link to="#services">Services</Link></li> + <li><Link to="#portofolio">Our projects</Link></li> + <li><Link to="#about">About us</Link></li> + </ul> + <button className="text-lg text-black h-11 w-40 flex items-center justify-center border-[1px] border-black rounded-md"> + Contact Us + </button> + <div + onClick={() => setShowNav(false)} + className="absolute right-5 cursor-pointer top-10 flex flex-col gap-2" + > + <Close size={28} /> + </div> + </nav> + </> + ) + } + </> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/header.tsx b/templates/landing-page/model3/src/components/molecules/header.tsx new file mode 100644 index 0000000..eae7a9b --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/header.tsx @@ -0,0 +1,17 @@ +import { HeaderLg } from "./header-lg"; +import { HeaderSm } from "./header-sm"; + +export function Header() { + return ( + <> + {/* small screen */} + <div className="lg:hidden"> + <HeaderSm /> + </div> + {/* big screen */} + <div className="hidden lg:block"> + <HeaderLg /> + </div> + </> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/hero.tsx b/templates/landing-page/model3/src/components/molecules/hero.tsx new file mode 100644 index 0000000..697cdb0 --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/hero.tsx @@ -0,0 +1,52 @@ +import Image from "@rasenganjs/image"; +import { Button } from "../atoms/button"; +import { Arrow } from "../atoms/svg/arrow"; +import { Vector1 } from "../atoms/svg/vector-1"; +import { Vector2 } from "../atoms/svg/vector-2"; +import { Vector3 } from "../atoms/svg/vector-3"; +import { Vector4 } from "../atoms/svg/vector-4"; + +export function Hero() { + return ( + <section className="lg:min-h-[600px] lg:h-[calc(100dvh-64px)] max-h-[1000px] py-14 lg:py-0 flex flex-col gap-y-20 lg:flex-row gap-2"> + <section className="h-full flex px-3 lg:px-32 flex-col gap-4 justify-center"> + <h1 className="font-bold text-5xl lg:text-6xl"> + <span>Build Your</span> <br /> + <span>Awesome </span> <br /> + <span>Platform</span> + </h1> + <p className="font-thin"> + Enver studio is a digital studio that offers several services such as UI/UX Design to developers, we will provide the best service for those of you who use our services. + </p> + <Button icon={<Arrow />}> + Our services + </Button> + </section> + <section className="h-full w-full justify-center lg:justify-start flex items-center px-3 lg:px-0 lg:pr-32 relative"> + <div className="flex justify-center lg:w-96 h-96 lg:h-[500px] relative"> + {/* small screen */} + <div className="lg:hidden"> + <Vector1 size={40} className=" absolute right-0 top-0" /> + <Vector2 size={60} className=" absolute left-0 bottom-0" /> + <Vector3 size={30} className=" absolute right-0 bottom-0" /> + <Vector4 size={20} className=" absolute left-0 top-0" /> + </div> + {/* big screen */} + <div className="hidden lg:block"> + <Vector1 size={40} className=" absolute right-0 top-0" /> + <Vector2 size={60} className=" absolute left-0 bottom-0" /> + <Vector3 size={30} className=" absolute right-0 bottom-0" /> + <Vector4 size={20} className=" absolute left-0 top-0" /> + </div> + <Image + alt="Hero Section" + src={'/hero.webp'} + width={'100%'} + height={'100%'} + objectfit="contain" + /> + </div> + </section> + </section> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/portofolio-lg.tsx b/templates/landing-page/model3/src/components/molecules/portofolio-lg.tsx new file mode 100644 index 0000000..7d3b420 --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/portofolio-lg.tsx @@ -0,0 +1,42 @@ +import Image from "@rasenganjs/image" + +export function PortofolioLg() { + const items = [ + { img: '/portofolio-1.png' }, + { img: '/portofolio-2.png' }, + { img: '/portofolio-3.png' } + ] + + return ( + <section className="mt-10 w-full"> + <section className={` mt-10 px-32 flex lg:grid grid-cols-1 lg:grid-cols-3 lg:gap-x-6`}> + { + items.map((item, index) => { + const y = `${index * 60}px`; + + return ( + <article + key={index + 'big'} + style={{ transform: `translateY(${y})` }} + className="w-full group h-60 rounded-xl bg-[#1E1E20] p-4" + > + <div className="w-full h-full rounded-lg overflow-hidden"> + <Image + width={'100%'} + height={'100%'} + alt="Image" + src={item.img} + objectfit="cover" + className="group-hover:scale-110 duration-150 ease-in-out" + /> + </div> + </article> + ) + }) + } + </section> + {/* white space to fix translate y */} + <div className="h-32" /> + </section> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/portofolio-sm.tsx b/templates/landing-page/model3/src/components/molecules/portofolio-sm.tsx new file mode 100644 index 0000000..f96e23c --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/portofolio-sm.tsx @@ -0,0 +1,71 @@ +import { useState } from "react"; +import { ChevronLeft } from "../atoms/svg/chevron-left"; +import { ChevronRight } from "../atoms/svg/chevron-right"; +import Image from "@rasenganjs/image"; + +export function PortofolioSm() { + const items = [ + { img: '/portofolio-1.png' }, + { img: '/portofolio-2.png' }, + { img: '/portofolio-3.png' } + ] + const [activeIndex, setActiveIndex] = useState(0) ; + + const handlePrev = () => { + if(activeIndex == 0) return + + setActiveIndex(activeIndex - 1) + } + + const handleNext = () => { + if(activeIndex == (items.length - 1)) return + + setActiveIndex(activeIndex + 1) + } + + const x = -100 * ( activeIndex / items.length ) + + return ( + <> + <section className="w-full overflow-hidden"> + <section + style={{ transform: `translateX(${x}%)` }} + className={`mt-10 lg:px-32 flex duration-200 ease-in-out lg:grid grid-cols-1 lg:grid-cols-3 lg:gap-x-6 w-[300%] lg:w-full`} + > + { + items.map((item, index) => ( + <article + key={index} + className={`w-full h-60 p-4 rounded-xl bg-[#1E1E20] flex justify-center items-center`} + > + <div className="w-full h-full rounded-lg overflow-hidden"> + <Image + width={'100%'} + height={'100%'} + alt="Image" + src={item.img} + objectfit="cover" + /> + </div> + </article> + )) + } + </section> + </section> + <div className="flex justify-center gap-4 my-10 items-center"> + <span + onClick={handlePrev} + className="bg-[#1E1E20] hover:bg-primary cursor-pointer w-14 h-14 flex justify-center items-center rounded-full" + > + <ChevronLeft /> + </span> + <span + onClick={handleNext} + className="bg-[#1E1E20] hover:bg-primary cursor-pointer w-14 h-14 flex justify-center items-center rounded-full" + > + <ChevronRight /> + </span> + </div> + </> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/portofolio.tsx b/templates/landing-page/model3/src/components/molecules/portofolio.tsx new file mode 100644 index 0000000..c57e51c --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/portofolio.tsx @@ -0,0 +1,27 @@ +import { PortofolioSm } from "./portofolio-sm"; +import { PortofolioLg } from "./portofolio-lg"; +import { Vector1 } from "../atoms/svg/vector-1"; +import { Vector4 } from "../atoms/svg/vector-4"; + +export function Portfolio() { + + return ( + <section id="portofolio" className="relative"> + <section className="px-3 lg:px-32"> + <h1 className="text-3xl lg:text-5xl font-bold">Our Awesome Portofolio</h1> + </section> + {/* small screen */} + <div className="lg:hidden"> + <PortofolioSm /> + <Vector1 size={30} className=" absolute right-5 top-8" /> + <Vector4 size={15} className=" absolute left-5 -bottom-0" /> + </div> + {/* big screen */} + <div className=" hidden lg:block"> + <PortofolioLg /> + <Vector1 size={50} className="absolute right-32 top-10" /> + <Vector4 size={30} className="absolute left-20 bottom-10" /> + </div> + </section> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/components/molecules/services.tsx b/templates/landing-page/model3/src/components/molecules/services.tsx new file mode 100644 index 0000000..c2dda24 --- /dev/null +++ b/templates/landing-page/model3/src/components/molecules/services.tsx @@ -0,0 +1,78 @@ +import { DevelopmentSVG } from "../atoms/svg/development"; +import { GraphicDesignSVG } from "../atoms/svg/graphic-design"; +import { MotionGraphikSVG } from "../atoms/svg/motion-graphik"; +import { PhotographySVG } from "../atoms/svg/photography"; +import { UiUxDesignSVG } from "../atoms/svg/ui-ux-design"; +import { Vector2 } from "../atoms/svg/vector-2"; +import { Vector3 } from "../atoms/svg/vector-3"; +import { VideographySVG } from "../atoms/svg/videography"; + +export function Services() { + const items = [ + { + title: 'Development', + description: 'Create a platform with the best and coolest quality from us.', + icon: <DevelopmentSVG size={32} stroke="#5454D4" />, + bgColor: 'bg-primary', + }, + { + title: 'UI/UX Designer', + description: 'We provide UI/UX Design services, and of course with the best quality', + icon: <UiUxDesignSVG size={32} stroke="#F04037" />, + bgColor: 'bg-[#F04037]', + }, + { + title: 'Graphik Designer', + description: 'We provide Graphic Design services, with the best designers', + icon: <GraphicDesignSVG size={32} stroke="#FEDC5A" />, + bgColor: 'bg-[#FEDC5A]', + }, + { + title: 'Motion Graphik', + description: 'Create a platform with the best and coolest quality from us.', + icon: <MotionGraphikSVG size={32} stroke="#FEDC5A" />, + bgColor: 'bg-[#FEDC5A]', + }, + { + title: 'Photography', + description: 'We provide Photography services, and of course with the best quality', + icon: <PhotographySVG size={32} stroke="#5454D4" />, + bgColor: 'bg-primary', + }, + { + title: 'Videography', + description: 'Create a platform with the best and coolest quality from us.', + icon: <VideographySVG size={32} stroke="#F04037" />, + bgColor: 'bg-[#F04037]', + }, + ] + + return ( + <> + <section id="services" className="px-3 lg:px-32"> + <div className="relative"> + <Vector2 size={70} className="absolute left-0 lg:-top-6 -top-16" /> + <Vector3 size={16} className="absolute right-0 bottom-0 rotate-[32deg]" /> + <h1 className="w-full lg:w-1/2 lg:mx-auto text-balance lg:text-pretty text-3xl lg:text-5xl font-bold lg:text-center">The Service We Provide For You</h1> + </div> + <section className="mt-6 grid grid-cols-1 lg:grid-cols-3 gap-12"> + { + items.map((item, index) => ( + <div key={index} className="flex flex-col gap-4"> + <div className="flex justify-center group"> + <div + className={`p-3 rounded-full bg-opacity-30 duration-150 group-hover:bg-opacity-20 ${item.bgColor}`} + > + {item.icon} + </div> + </div> + <h5 className="text-center font-medium text-2xl">{item.title}</h5> + <p className="text-center text-balance font-extralight">{item.description}</p> + </div> + )) + } + </section> + </section> + </> + ) +} \ No newline at end of file diff --git a/templates/landing-page/model3/src/main.tsx b/templates/landing-page/model3/src/main.tsx new file mode 100644 index 0000000..da7b185 --- /dev/null +++ b/templates/landing-page/model3/src/main.tsx @@ -0,0 +1,8 @@ +import "@rasenganjs/image/lib/styles/index.css"; +import "@/styles/index.css"; +import { type AppProps } from "rasengan"; +import AppRouter from "@/app/app.router"; + +export default function App({ Component, children }: AppProps) { + return <Component router={AppRouter}>{children}</Component>; +} diff --git a/templates/landing-page/model3/src/styles/index.css b/templates/landing-page/model3/src/styles/index.css new file mode 100644 index 0000000..f44255b --- /dev/null +++ b/templates/landing-page/model3/src/styles/index.css @@ -0,0 +1,60 @@ +@import url('https://fonts.googleapis.com/css2?family=Nunito+Sans:ital,opsz,wght@0,6..12,200..1000;1,6..12,200..1000&display=swap'); + +/** + * These directives tell Tailwind to include the base styles for the project, + * any components that are used, and any utilities that are used. + * So don't remove them! + */ +@tailwind base; +@tailwind components; +@tailwind utilities; + +* { + box-sizing: border-box; + margin: 0; + padding: 0; + scroll-behavior: smooth; +} + +body { + font-family: "Nunito Sans", sans-serif; + font-optical-sizing: auto; + background-color: #19191B ; + color: white; +} + +.fade-in { + animation: fadeIn 200ms ease-out both; +} + +.fade-out { + animation: fadeOut 150ms ease-out both; +} + +@keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes fadeOut { + from { opacity: 1; } + to { opacity: 0; } +} + +.move-in { + animation: moveIn 200ms ease-out both; +} + +.move-out { + animation: moveOut 150ms ease-out both; +} + +@keyframes moveIn { + from { transform: translateX(100%); } + to { transform: translateX(0); } +} + +@keyframes moveOut { + from { transform: translateX(0); } + to { transform: translateX(100%); } +} diff --git a/templates/landing-page/model3/src/template.tsx b/templates/landing-page/model3/src/template.tsx new file mode 100644 index 0000000..9adca10 --- /dev/null +++ b/templates/landing-page/model3/src/template.tsx @@ -0,0 +1,27 @@ +import { type TemplateProps } from "rasengan"; + +export default function Template({ + children, + Head, + Body, + Script +}: TemplateProps) { + return ( + <html lang="en"> + <Head> + <meta charSet="UTF-8" /> + <link rel="preconnect" href="https://fonts.googleapis.com" /> + <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="" /> + <link href="https://fonts.googleapis.com/css2?family=Nunito+Sans:ital,opsz,wght@0,6..12,200..1000;1,6..12,200..1000&display=swap" rel="stylesheet"></link> + <link rel="icon" type="image/png" href="/logo.png" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </Head> + + <Body> + {children} + + <Script /> + </Body> + </html> + ); +} diff --git a/templates/landing-page/model3/tailwind.config.js b/templates/landing-page/model3/tailwind.config.js new file mode 100644 index 0000000..c474fb3 --- /dev/null +++ b/templates/landing-page/model3/tailwind.config.js @@ -0,0 +1,14 @@ +import { adaptPath } from "rasengan"; + +/** @type {import('tailwindcss').Config} */ +export default { + content: adaptPath(["./src/**/*.{ts,tsx,js,jsx}"]), + theme: { + extend: { + colors: { + primary: "#5454D4", + }, + }, + }, + plugins: [], +}; diff --git a/templates/landing-page/model3/tsconfig.json b/templates/landing-page/model3/tsconfig.json new file mode 100644 index 0000000..dfb9f13 --- /dev/null +++ b/templates/landing-page/model3/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "ES2020", + + /* Bundler mode */ + "moduleResolution": "bundler", + "module": "ESNext", + "jsx": "react-jsx", + + /* Aliases for intellisence */ + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src", "rasengan-env.d.ts"], + + "extends": "./node_modules/rasengan/tsconfig.base.json" +} diff --git a/templates/portfolio/model1/.gitignore b/templates/portfolio/model1/.gitignore new file mode 100644 index 0000000..358d1d6 --- /dev/null +++ b/templates/portfolio/model1/.gitignore @@ -0,0 +1,34 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Cache +.vite +.rasengan + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Local Netlify folder +.netlify + +package-lock.json +yarn.lock \ No newline at end of file diff --git a/templates/portfolio/model1/components.json b/templates/portfolio/model1/components.json new file mode 100644 index 0000000..12ccc49 --- /dev/null +++ b/templates/portfolio/model1/components.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/atom", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" + } + \ No newline at end of file diff --git a/templates/portfolio/model1/package.json b/templates/portfolio/model1/package.json new file mode 100644 index 0000000..4004e94 --- /dev/null +++ b/templates/portfolio/model1/package.json @@ -0,0 +1,41 @@ +{ + "name": "designer", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "rasengan dev", + "build": "rasengan build", + "build:prepare": "rasengan prepare", + "start": "rasengan start" + }, + "dependencies": { + "@headlessui/react": "^2.2.0", + "@radix-ui/react-avatar": "^1.1.2", + "@radix-ui/react-label": "^2.1.1", + "@radix-ui/react-progress": "^1.1.1", + "@radix-ui/react-select": "^2.1.4", + "@radix-ui/react-slot": "^1.1.1", + "@rasenganjs/image": "^1.0.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "embla-carousel-react": "^8.5.1", + "framer-motion": "^11.15.0", + "lucide-react": "^0.468.0", + "rasengan": "^1.0.0-beta.50", + "react": "^18.3.0", + "react-dom": "^18.3.0", + "tailwind-merge": "^2.5.5", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "autoprefixer": "^10.4.16", + "cross-env": "^7.0.3", + "postcss": "^8.4.31", + "prettier": "3.4.2", + "tailwindcss": "^3.3.5", + "vite": "^5.2.0" + } +} diff --git a/templates/portfolio/model1/postcss.config.js b/templates/portfolio/model1/postcss.config.js new file mode 100644 index 0000000..669db9b --- /dev/null +++ b/templates/portfolio/model1/postcss.config.js @@ -0,0 +1,10 @@ +import { adaptPath } from "rasengan"; + +export default { + plugins: { + tailwindcss: { + config: adaptPath("./tailwind.config"), + }, + autoprefixer: {}, + }, +}; diff --git a/templates/portfolio/model1/public/Favicon.png b/templates/portfolio/model1/public/Favicon.png new file mode 100644 index 0000000..3a482c1 Binary files /dev/null and b/templates/portfolio/model1/public/Favicon.png differ diff --git a/templates/portfolio/model1/public/Group 16.png b/templates/portfolio/model1/public/Group 16.png new file mode 100644 index 0000000..a39123a Binary files /dev/null and b/templates/portfolio/model1/public/Group 16.png differ diff --git a/templates/portfolio/model1/public/Image(1).png b/templates/portfolio/model1/public/Image(1).png new file mode 100644 index 0000000..4e465f2 Binary files /dev/null and b/templates/portfolio/model1/public/Image(1).png differ diff --git a/templates/portfolio/model1/public/Image(2).png b/templates/portfolio/model1/public/Image(2).png new file mode 100644 index 0000000..f2a3964 Binary files /dev/null and b/templates/portfolio/model1/public/Image(2).png differ diff --git a/templates/portfolio/model1/public/Image(3).png b/templates/portfolio/model1/public/Image(3).png new file mode 100644 index 0000000..18d10d2 Binary files /dev/null and b/templates/portfolio/model1/public/Image(3).png differ diff --git a/templates/portfolio/model1/public/Image(4).png b/templates/portfolio/model1/public/Image(4).png new file mode 100644 index 0000000..18d10d2 Binary files /dev/null and b/templates/portfolio/model1/public/Image(4).png differ diff --git a/templates/portfolio/model1/public/Image(5).png b/templates/portfolio/model1/public/Image(5).png new file mode 100644 index 0000000..998337f Binary files /dev/null and b/templates/portfolio/model1/public/Image(5).png differ diff --git a/templates/portfolio/model1/public/Image(6).png b/templates/portfolio/model1/public/Image(6).png new file mode 100644 index 0000000..d61772f Binary files /dev/null and b/templates/portfolio/model1/public/Image(6).png differ diff --git a/templates/portfolio/model1/public/Image(7).png b/templates/portfolio/model1/public/Image(7).png new file mode 100644 index 0000000..cd6a3c6 Binary files /dev/null and b/templates/portfolio/model1/public/Image(7).png differ diff --git a/templates/portfolio/model1/public/Image(8).png b/templates/portfolio/model1/public/Image(8).png new file mode 100644 index 0000000..c675923 Binary files /dev/null and b/templates/portfolio/model1/public/Image(8).png differ diff --git a/templates/portfolio/model1/public/Image(9).png b/templates/portfolio/model1/public/Image(9).png new file mode 100644 index 0000000..0afb2c4 Binary files /dev/null and b/templates/portfolio/model1/public/Image(9).png differ diff --git a/templates/portfolio/model1/public/Image.png b/templates/portfolio/model1/public/Image.png new file mode 100644 index 0000000..5f3a626 Binary files /dev/null and b/templates/portfolio/model1/public/Image.png differ diff --git a/templates/portfolio/model1/public/Image1.png b/templates/portfolio/model1/public/Image1.png new file mode 100644 index 0000000..cb9838c Binary files /dev/null and b/templates/portfolio/model1/public/Image1.png differ diff --git a/templates/portfolio/model1/public/Logo(1).png b/templates/portfolio/model1/public/Logo(1).png new file mode 100644 index 0000000..9209ad7 Binary files /dev/null and b/templates/portfolio/model1/public/Logo(1).png differ diff --git a/templates/portfolio/model1/public/Logo(2).png b/templates/portfolio/model1/public/Logo(2).png new file mode 100644 index 0000000..f292f74 Binary files /dev/null and b/templates/portfolio/model1/public/Logo(2).png differ diff --git a/templates/portfolio/model1/public/Logo(3).png b/templates/portfolio/model1/public/Logo(3).png new file mode 100644 index 0000000..24c3358 Binary files /dev/null and b/templates/portfolio/model1/public/Logo(3).png differ diff --git a/templates/portfolio/model1/public/Logo(4).png b/templates/portfolio/model1/public/Logo(4).png new file mode 100644 index 0000000..0d0ebf0 Binary files /dev/null and b/templates/portfolio/model1/public/Logo(4).png differ diff --git a/templates/portfolio/model1/public/Logo(5).png b/templates/portfolio/model1/public/Logo(5).png new file mode 100644 index 0000000..d1e36b0 Binary files /dev/null and b/templates/portfolio/model1/public/Logo(5).png differ diff --git a/templates/portfolio/model1/public/Logo.png b/templates/portfolio/model1/public/Logo.png new file mode 100644 index 0000000..57fa1ab Binary files /dev/null and b/templates/portfolio/model1/public/Logo.png differ diff --git a/templates/portfolio/model1/public/af6d936b4e935451c2fe2257d07c8ea7.jpeg b/templates/portfolio/model1/public/af6d936b4e935451c2fe2257d07c8ea7.jpeg new file mode 100644 index 0000000..ff77898 Binary files /dev/null and b/templates/portfolio/model1/public/af6d936b4e935451c2fe2257d07c8ea7.jpeg differ diff --git a/templates/portfolio/model1/public/rasengan.svg b/templates/portfolio/model1/public/rasengan.svg new file mode 100644 index 0000000..b3f17f8 --- /dev/null +++ b/templates/portfolio/model1/public/rasengan.svg @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="1000mm" + height="1000mm" + viewBox="0 0 1000 1000" + version="1.1" + id="svg5747" + xml:space="preserve" + inkscape:version="1.2.2 (b0a8486, 2022-12-01)" + sodipodi:docname="Rasengan-with-text.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview + id="namedview5749" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + showgrid="false" + inkscape:zoom="0.07763865" + inkscape:cx="1397.4998" + inkscape:cy="135.24192" + inkscape:window-width="1366" + inkscape:window-height="683" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" /><defs + id="defs5744"><linearGradient + id="linearGradient5409" + inkscape:swatch="solid"><stop + style="stop-color:#2a7fff;stop-opacity:1;" + offset="0" + id="stop5407" /></linearGradient><linearGradient + id="linearGradient3395" + inkscape:swatch="gradient"><stop + style="stop-color:#2a7fff;stop-opacity:1;" + offset="0" + id="stop3391" /><stop + style="stop-color:#2a7fff;stop-opacity:0;" + offset="1" + id="stop3393" /></linearGradient></defs><g + inkscape:label="Calque 1" + inkscape:groupmode="layer" + id="layer1"><rect + style="display:none;fill:#ff0000;stroke-width:0.611165" + id="rect1746" + width="110.27086" + height="246.44173" + x="201.10553" + y="85.215645" /><path + id="path1500-7-3" + style="display:inline;mix-blend-mode:normal;fill:#2a7fff;fill-opacity:1;stroke:none;stroke-width:1.47465;stroke-opacity:1" + inkscape:label="ball-contour" + d="m 334.94145,181.97173 c -14.5298,0.0394 -30.22546,1.8968 -44.04392,6.90572 -81.61238,29.58269 -68.26562,121.92724 -58.37212,162.51928 2.27806,9.3466 7.69649,24.6066 15.6356,43.55817 a 263.91787,263.91787 0 0 0 -24.90809,111.72989 263.91787,263.91787 0 0 0 19.49239,99.32057 c -4.45449,10.96292 -8.89889,22.48002 -13.54442,34.85238 -31.56968,84.07935 -22.25656,169.23288 31.96539,195.768 54.22199,26.53538 152.2477,-61.93435 152.2477,-61.93435 0,0 -99.69665,62.37931 -141.09418,18.34689 -16.71896,-17.78299 -10.4693,-64.71165 4.68707,-113.635 l -0.2377,-0.25832 c 1.37354,-4.06018 2.7922,-8.18022 4.27364,-12.3748 23.13788,-65.51308 54.9138,-119.86707 90.24962,-164.81889 -56.853,-89.95593 -74.3882,-167.5697 -76.20224,-176.12402 a 263.91787,263.91787 0 0 0 -0.055,0.055 c -14.82152,-73.48389 2.44034,-111.93117 36.84022,-126.62131 50.52831,-21.57791 126.13211,36.79024 126.13211,36.79024 0,0 -32.72778,-26.94782 -44.683,-33.2487 -12.7895,-6.74028 -32.07736,-15.33631 -48.02647,-18.24699 -8.4587,-1.54366 -19.05562,-2.61412 -30.3565,-2.58382 z m 366.94654,47.66991 c -25.93348,0.232 -50.61709,6.42298 -66.81435,11.49628 -10.10576,3.16542 -27.0808,10.5606 -48.10224,21.23562 A 263.91787,263.91787 0 0 0 487.17021,242.7692 263.91787,263.91787 0 0 0 305.33769,315.59179 C 318.57011,385.00817 344.70601,444.581 376.79084,495.04205 495.99591,348.15073 651.6643,305.65513 656.58832,304.34007 a 263.91787,263.91787 0 0 0 -0.1794,-0.1604 c 77.58321,-22.89389 119.3885,-8.31452 136.88774,26.29992 24.78842,49.03294 -28.58921,128.24225 -28.58921,128.24225 0,0 24.78233,-34.39644 30.29971,-46.73282 5.90242,-13.19706 13.23674,-33.00133 15.11368,-49.10479 2.27532,-19.52134 1.36356,-50.02504 -9.10542,-73.96637 -20.65032,-47.22496 -61.22491,-59.61578 -99.12765,-59.27642 z m -34.81105,84.08119 c -132.91673,34.21476 -224.2211,114.26571 -284.09182,190.83632 96.12445,144.43163 239.52042,211.05562 255.4785,218.14736 A 263.91787,263.91787 0 0 0 751.08749,506.68479 263.91787,263.91787 0 0 0 667.07694,313.72283 Z m -289.5368,197.9005 c -61.11327,80.4817 -87.38115,154.64823 -91.19187,165.99711 a 263.91787,263.91787 0 0 0 200.82194,92.98331 263.91787,263.91787 0 0 0 72.13356,-10.12686 c 14.18653,7.14952 29.27937,14.1819 45.95941,21.70416 81.87051,36.92141 167.4478,33.11403 197.42162,-19.28572 29.97374,-52.3996 -51.99867,-155.92017 -51.99867,-155.92017 0,0 55.82735,103.50689 9.21912,141.98131 -21.22992,17.52504 -77.57204,3.50462 -131.45999,-19.42004 a 263.91787,263.91787 0 0 0 0.21866,-0.15 C 506.87897,672.17456 427.91472,588.22571 377.54004,511.62319 Z" /><path + id="path1419-6-0" + style="display:none;fill:#501616;fill-opacity:1;stroke-width:0.660163" + d="m 151.41797,63.570972 c -6.42283,-0.04862 -13.36922,0.701054 -19.5002,2.852304 -36.20995,12.705418 -30.73011,53.585154 -26.54144,71.573304 4.26671,18.32309 34.94985,87.74981 71.19301,125.94727 36.24315,38.1975 55.58871,49.47595 91.61045,66.16882 36.02165,16.69285 73.86628,15.39909 87.35406,-7.62701 13.48772,-23.02615 -22.27559,-69.15873 -22.27559,-69.15873 0,0 24.20635,46.00753 3.42889,62.80257 -14.3078,11.56552 -63.76302,-9.09547 -91.33853,-26.83743 -28.40447,-18.27534 -82.96121,-77.85518 -104.35845,-133.46558 -17.66079,-51.81124 -10.27184,-76.633079 8.99395,-84.627039 22.43337,-9.30836 55.58724,16.836317 55.58724,16.836317 0,0 -14.34405,-12.061263 -19.60001,-14.900828 -5.62273,-3.03764 -14.11006,-6.924771 -21.14684,-8.283914 -3.73201,-0.720819 -8.41101,-1.242056 -13.40654,-1.280054 z M 313.404,86.311101 c -11.46453,-0.01535 -22.40368,2.609256 -29.58649,4.778204 -18.01015,5.438365 -85.31551,40.531835 -121.0984,79.160915 -2.32528,2.51023 -4.53117,4.93502 -6.64704,7.29794 4.71632,8.45881 9.7325,16.8043 14.96007,24.93852 25.40019,-27.55545 61.73654,-58.32678 97.28673,-74.70784 50.56548,-20.96237 75.8129,-15.18881 85.03158,3.52196 10.73434,21.78702 -13.22007,56.55735 -13.22007,56.55735 0,0 11.1107,-15.09134 13.60567,-20.51936 2.6691,-5.80675 6.00165,-14.52749 6.90457,-21.63723 1.09457,-8.61882 0.83023,-22.10661 -3.68854,-32.73714 C 348.03868,91.995436 330.15986,86.333476 313.404,86.311101 Z M 131.56067,208.01841 c -12.80561,18.4386 -20.05515,34.89333 -28.97041,57.9147 -14.337144,37.02237 -10.608121,74.705 13.23908,86.68107 23.84728,11.97613 67.58023,-26.68448 67.58023,-26.68448 0,0 -44.35282,27.12 -62.45172,7.46791 -12.46329,-13.5329 4.9687,-64.21716 20.89702,-92.87843 1.28201,-2.30682 2.83189,-4.80585 4.5769,-7.43422 -5.18699,-8.08597 -10.15799,-16.50948 -14.8711,-25.06655 z" + sodipodi:insensitive="true" /><rect + style="display:none;fill:#800080;stroke-width:0.584152" + id="rect1746-7" + width="261.36807" + height="94.98568" + x="60.192574" + y="205.02565" /></g></svg> diff --git a/templates/portfolio/model1/public/unsplash_bsy0-z5RTfk.png b/templates/portfolio/model1/public/unsplash_bsy0-z5RTfk.png new file mode 100644 index 0000000..e94aeda Binary files /dev/null and b/templates/portfolio/model1/public/unsplash_bsy0-z5RTfk.png differ diff --git a/templates/portfolio/model1/public/unsplash_jMEs4objgIA.png b/templates/portfolio/model1/public/unsplash_jMEs4objgIA.png new file mode 100644 index 0000000..3fd355a Binary files /dev/null and b/templates/portfolio/model1/public/unsplash_jMEs4objgIA.png differ diff --git a/templates/portfolio/model1/public/unsplash_mKLjUjUkX6c.png b/templates/portfolio/model1/public/unsplash_mKLjUjUkX6c.png new file mode 100644 index 0000000..b679c8d Binary files /dev/null and b/templates/portfolio/model1/public/unsplash_mKLjUjUkX6c.png differ diff --git a/templates/portfolio/model1/rasengan-env.d.ts b/templates/portfolio/model1/rasengan-env.d.ts new file mode 100644 index 0000000..e7d4de0 --- /dev/null +++ b/templates/portfolio/model1/rasengan-env.d.ts @@ -0,0 +1 @@ +/// <reference types="rasengan/types/client" /> \ No newline at end of file diff --git a/templates/portfolio/model1/rasengan.config.js b/templates/portfolio/model1/rasengan.config.js new file mode 100644 index 0000000..302261c --- /dev/null +++ b/templates/portfolio/model1/rasengan.config.js @@ -0,0 +1,5 @@ +import { defineConfig } from "rasengan"; + +export default defineConfig({ + reactStrictMode: true, +}); diff --git a/templates/portfolio/model1/src/app/app.layout.tsx b/templates/portfolio/model1/src/app/app.layout.tsx new file mode 100644 index 0000000..dda983b --- /dev/null +++ b/templates/portfolio/model1/src/app/app.layout.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import { Outlet, LayoutComponent } from "rasengan"; + +const AppLayout: LayoutComponent = () => { + return ( + <React.Fragment> + <Outlet /> + </React.Fragment> + ); +}; + +AppLayout.path = "/"; + +export default AppLayout; diff --git a/templates/portfolio/model1/src/app/app.router.ts b/templates/portfolio/model1/src/app/app.router.ts new file mode 100644 index 0000000..b832612 --- /dev/null +++ b/templates/portfolio/model1/src/app/app.router.ts @@ -0,0 +1,11 @@ +import { RouterComponent, defineRouter } from "rasengan"; +import Home from "@/app/home.page"; +import AppLayout from "@/app/app.layout"; + +class AppRouter extends RouterComponent {} + +export default defineRouter({ + imports: [], + layout: AppLayout, + pages: [Home], +})(AppRouter); diff --git a/templates/portfolio/model1/src/app/home.page.tsx b/templates/portfolio/model1/src/app/home.page.tsx new file mode 100644 index 0000000..9101891 --- /dev/null +++ b/templates/portfolio/model1/src/app/home.page.tsx @@ -0,0 +1,47 @@ +import { PageComponent } from "rasengan"; +import Navbar from "@/components/organism/Navbar"; +import MenuProvider from "@/providers/MenuProvider"; +import HeroSection from "@/components/organism/HeroSection"; +import RecentProject from "@/components/organism/Projects"; +import Bio from "@/components/organism/Bio"; +import HonorAwards from "@/components/organism/HonorAwards"; +import Service from "@/components/organism/Service"; +import WorkProcess from "@/components/organism/WorkProcess"; +import Skills from "@/components/organism/Skills"; +import Testimonial from "@/components/organism/Testimonial"; +import CallToAction from "@/components/organism/CallToAction"; +import Blog from "@/components/organism/Blog"; +import Contact from "@/components/organism/Contact"; +import Footer from "@/components/organism/Footer"; + + + +const Home: PageComponent = () => { + return ( + <div className="scroll-smooth"> + <MenuProvider> + <Navbar /> + <HeroSection /> + <RecentProject /> + <Bio /> + <HonorAwards /> + <Service /> + <WorkProcess /> + <Skills /> + <Testimonial /> + <CallToAction /> + <Blog /> + <Contact /> + <Footer /> + </MenuProvider> + </div> + ); +}; + +Home.path = "/"; +Home.metadata = { + title: "Home", + description: "Home page", +}; + +export default Home; diff --git a/templates/portfolio/model1/src/assets/Favicon.png b/templates/portfolio/model1/src/assets/Favicon.png new file mode 100644 index 0000000..3a482c1 Binary files /dev/null and b/templates/portfolio/model1/src/assets/Favicon.png differ diff --git a/templates/portfolio/model1/src/assets/Honor&Awards/honor1.png b/templates/portfolio/model1/src/assets/Honor&Awards/honor1.png new file mode 100644 index 0000000..c68c793 Binary files /dev/null and b/templates/portfolio/model1/src/assets/Honor&Awards/honor1.png differ diff --git a/templates/portfolio/model1/src/assets/Honor&Awards/honor2.png b/templates/portfolio/model1/src/assets/Honor&Awards/honor2.png new file mode 100644 index 0000000..18d10d2 Binary files /dev/null and b/templates/portfolio/model1/src/assets/Honor&Awards/honor2.png differ diff --git a/templates/portfolio/model1/src/assets/Honor&Awards/honor3.png b/templates/portfolio/model1/src/assets/Honor&Awards/honor3.png new file mode 100644 index 0000000..5f3a626 Binary files /dev/null and b/templates/portfolio/model1/src/assets/Honor&Awards/honor3.png differ diff --git a/templates/portfolio/model1/src/assets/Tools/tool1.png b/templates/portfolio/model1/src/assets/Tools/tool1.png new file mode 100644 index 0000000..34826e8 Binary files /dev/null and b/templates/portfolio/model1/src/assets/Tools/tool1.png differ diff --git a/templates/portfolio/model1/src/assets/Tools/tool2.png b/templates/portfolio/model1/src/assets/Tools/tool2.png new file mode 100644 index 0000000..70bf369 Binary files /dev/null and b/templates/portfolio/model1/src/assets/Tools/tool2.png differ diff --git a/templates/portfolio/model1/src/assets/Tools/tool3.png b/templates/portfolio/model1/src/assets/Tools/tool3.png new file mode 100644 index 0000000..1bc7feb Binary files /dev/null and b/templates/portfolio/model1/src/assets/Tools/tool3.png differ diff --git a/templates/portfolio/model1/src/assets/Tools/tool4.png b/templates/portfolio/model1/src/assets/Tools/tool4.png new file mode 100644 index 0000000..6de385c Binary files /dev/null and b/templates/portfolio/model1/src/assets/Tools/tool4.png differ diff --git a/templates/portfolio/model1/src/assets/Tools/tool5.png b/templates/portfolio/model1/src/assets/Tools/tool5.png new file mode 100644 index 0000000..9453094 Binary files /dev/null and b/templates/portfolio/model1/src/assets/Tools/tool5.png differ diff --git a/templates/portfolio/model1/src/assets/article/article1.png b/templates/portfolio/model1/src/assets/article/article1.png new file mode 100644 index 0000000..e94aeda Binary files /dev/null and b/templates/portfolio/model1/src/assets/article/article1.png differ diff --git a/templates/portfolio/model1/src/assets/article/article2.png b/templates/portfolio/model1/src/assets/article/article2.png new file mode 100644 index 0000000..b679c8d Binary files /dev/null and b/templates/portfolio/model1/src/assets/article/article2.png differ diff --git a/templates/portfolio/model1/src/assets/article/article3.png b/templates/portfolio/model1/src/assets/article/article3.png new file mode 100644 index 0000000..3fd355a Binary files /dev/null and b/templates/portfolio/model1/src/assets/article/article3.png differ diff --git a/templates/portfolio/model1/src/assets/banner.png b/templates/portfolio/model1/src/assets/banner.png new file mode 100644 index 0000000..ff77898 Binary files /dev/null and b/templates/portfolio/model1/src/assets/banner.png differ diff --git a/templates/portfolio/model1/src/assets/bio.png b/templates/portfolio/model1/src/assets/bio.png new file mode 100644 index 0000000..a8a4ac8 Binary files /dev/null and b/templates/portfolio/model1/src/assets/bio.png differ diff --git a/templates/portfolio/model1/src/assets/hero.png b/templates/portfolio/model1/src/assets/hero.png new file mode 100644 index 0000000..a39123a Binary files /dev/null and b/templates/portfolio/model1/src/assets/hero.png differ diff --git a/templates/portfolio/model1/src/assets/heroImg.png b/templates/portfolio/model1/src/assets/heroImg.png new file mode 100644 index 0000000..cb9838c Binary files /dev/null and b/templates/portfolio/model1/src/assets/heroImg.png differ diff --git a/templates/portfolio/model1/src/assets/logos/l1.svg b/templates/portfolio/model1/src/assets/logos/l1.svg new file mode 100644 index 0000000..7fe710e --- /dev/null +++ b/templates/portfolio/model1/src/assets/logos/l1.svg @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="1000mm" + height="400mm" + viewBox="0 0 1000 400" + version="1.1" + id="svg5747" + xml:space="preserve" + inkscape:version="1.2.2 (b0a8486, 2022-12-01)" + sodipodi:docname="Rasengan-with-text.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview + id="namedview5749" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + showgrid="false" + inkscape:zoom="0.07763865" + inkscape:cx="1397.4998" + inkscape:cy="135.24192" + inkscape:window-width="1366" + inkscape:window-height="683" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" /><defs + id="defs5744"><linearGradient + id="linearGradient5409" + inkscape:swatch="solid"><stop + style="stop-color:#2a7fff;stop-opacity:1;" + offset="0" + id="stop5407" /></linearGradient><linearGradient + id="linearGradient3395" + inkscape:swatch="gradient"><stop + style="stop-color:#2a7fff;stop-opacity:1;" + offset="0" + id="stop3391" /><stop + style="stop-color:#2a7fff;stop-opacity:0;" + offset="1" + id="stop3393" /></linearGradient></defs><g + inkscape:label="Calque 1" + inkscape:groupmode="layer" + id="layer1"><rect + style="display:none;fill:#ff0000;stroke-width:0.264583" + id="rect1746" + width="47.738033" + height="106.6886" + x="83.348618" + y="108.20568" + transform="matrix(2.3099163,0,0,2.3099163,8.5771974,-164.73042)" /><path + id="path1500-7-3" + style="display:inline;mix-blend-mode:normal;fill:#2a7fff;fill-opacity:1;stroke:none;stroke-width:0.442394;stroke-opacity:1" + inkscape:label="ball-contour" + d="M 116.76962 101.1747 C 112.41069 101.1865 107.702 101.74374 103.55647 103.24641 C 79.072813 112.1212 83.076831 139.8245 86.044877 152.00209 C 86.728291 154.80606 88.353819 159.38405 90.735547 165.06951 A 79.175188 79.175188 0 0 0 83.263135 198.5884 A 79.175188 79.175188 0 0 0 89.11084 228.38451 C 87.774495 231.67338 86.441179 235.1285 85.047522 238.8402 C 75.57664 264.06395 78.370569 289.60995 94.637118 297.57047 C 110.90368 305.53107 140.31133 278.99021 140.31133 278.99021 C 140.31133 278.99021 110.4024 297.70396 97.983167 284.49426 C 92.967492 279.15938 94.842387 265.08081 99.389282 250.40384 L 99.317969 250.32632 C 99.73003 249.10827 100.15563 247.87226 100.60006 246.61389 C 107.54141 226.96001 117.07417 210.65385 127.67489 197.16833 C 110.61903 170.18161 105.35848 146.89753 104.81427 144.33124 A 79.175188 79.175188 0 0 0 104.79774 144.34778 C 100.35129 122.30266 105.52984 110.7685 115.84978 106.36147 C 131.00824 99.888111 153.68933 117.39852 153.68933 117.39852 C 153.68933 117.39852 143.87102 109.31419 140.28446 107.42393 C 136.44762 105.40185 130.66127 102.82305 125.87655 101.94985 C 123.33895 101.48675 120.15988 101.16561 116.76962 101.1747 z M 226.85334 115.47564 C 219.07331 115.54524 211.66825 117.40253 206.80908 118.92452 C 203.77736 119.87414 198.68486 122.09269 192.37844 125.29519 A 79.175188 79.175188 0 0 0 162.43815 119.4139 A 79.175188 79.175188 0 0 0 107.88851 141.26063 C 111.85823 162.0855 119.69898 179.95731 129.32441 195.09559 C 165.08585 151.02829 211.78627 138.27964 213.26347 137.88512 A 79.175188 79.175188 0 0 0 213.20972 137.83706 C 236.48463 130.96891 249.02619 135.34271 254.27595 145.72702 C 261.71246 160.43687 245.69921 184.19961 245.69921 184.19961 C 245.69921 184.19961 253.13389 173.8807 254.7891 170.17979 C 256.55982 166.22068 258.76011 160.27942 259.32319 155.44839 C 260.00579 149.592 259.73226 140.44091 256.59157 133.25853 C 250.39649 119.09107 238.22414 115.37383 226.85334 115.47564 z M 216.41005 140.69994 C 176.53512 150.96435 149.14387 174.97958 131.18269 197.95071 C 160.01996 241.28011 203.03866 261.26726 207.82607 263.39478 A 79.175188 79.175188 0 0 0 241.61316 198.5884 A 79.175188 79.175188 0 0 0 216.41005 140.69994 z M 129.5492 200.06996 C 111.21526 224.21442 103.33491 246.46433 102.1917 249.86899 A 79.175188 79.175188 0 0 0 162.43815 277.76392 A 79.175188 79.175188 0 0 0 184.07817 274.72587 C 188.33412 276.87072 192.86196 278.98043 197.86596 281.2371 C 222.42706 292.3135 248.10019 291.17129 257.09232 275.4514 C 266.08442 259.73155 241.49275 228.67545 241.49275 228.67545 C 241.49275 228.67545 258.24092 259.72745 244.25848 271.26975 C 237.88952 276.52725 220.98692 272.32113 204.82057 265.44375 A 79.175188 79.175188 0 0 0 204.8862 265.39879 C 168.35079 248.23527 144.66157 223.05067 129.5492 200.06996 z " /><path + id="path1419-6-0" + style="display:none;fill:#501616;fill-opacity:1;stroke-width:0.660163" + d="m 151.41797,63.570972 c -6.42283,-0.04862 -13.36922,0.701054 -19.5002,2.852304 -36.20995,12.705418 -30.73011,53.585154 -26.54144,71.573304 4.26671,18.32309 34.94985,87.74981 71.19301,125.94727 36.24315,38.1975 55.58871,49.47595 91.61045,66.16882 36.02165,16.69285 73.86628,15.39909 87.35406,-7.62701 13.48772,-23.02615 -22.27559,-69.15873 -22.27559,-69.15873 0,0 24.20635,46.00753 3.42889,62.80257 -14.3078,11.56552 -63.76302,-9.09547 -91.33853,-26.83743 -28.40447,-18.27534 -82.96121,-77.85518 -104.35845,-133.46558 -17.66079,-51.81124 -10.27184,-76.633079 8.99395,-84.627039 22.43337,-9.30836 55.58724,16.836317 55.58724,16.836317 0,0 -14.34405,-12.061263 -19.60001,-14.900828 -5.62273,-3.03764 -14.11006,-6.924771 -21.14684,-8.283914 -3.73201,-0.720819 -8.41101,-1.242056 -13.40654,-1.280054 z M 313.404,86.311101 c -11.46453,-0.01535 -22.40368,2.609256 -29.58649,4.778204 -18.01015,5.438365 -85.31551,40.531835 -121.0984,79.160915 -2.32528,2.51023 -4.53117,4.93502 -6.64704,7.29794 4.71632,8.45881 9.7325,16.8043 14.96007,24.93852 25.40019,-27.55545 61.73654,-58.32678 97.28673,-74.70784 50.56548,-20.96237 75.8129,-15.18881 85.03158,3.52196 10.73434,21.78702 -13.22007,56.55735 -13.22007,56.55735 0,0 11.1107,-15.09134 13.60567,-20.51936 2.6691,-5.80675 6.00165,-14.52749 6.90457,-21.63723 1.09457,-8.61882 0.83023,-22.10661 -3.68854,-32.73714 C 348.03868,91.995436 330.15986,86.333476 313.404,86.311101 Z M 131.56067,208.01841 c -12.80561,18.4386 -20.05515,34.89333 -28.97041,57.9147 -14.337144,37.02237 -10.608121,74.705 13.23908,86.68107 23.84728,11.97613 67.58023,-26.68448 67.58023,-26.68448 0,0 -44.35282,27.12 -62.45172,7.46791 -12.46329,-13.5329 4.9687,-64.21716 20.89702,-92.87843 1.28201,-2.30682 2.83189,-4.80585 4.5769,-7.43422 -5.18699,-8.08597 -10.15799,-16.50948 -14.8711,-25.06655 z" + sodipodi:insensitive="true" /><rect + style="display:none;fill:#800080;stroke-width:0.252889" + id="rect1746-7" + width="113.15045" + height="41.120831" + x="22.345129" + y="160.07336" + transform="matrix(2.3099163,0,0,2.3099163,8.5771974,-164.73042)" /><path + id="text7892" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:105.833px;font-family:Urbanist;-inkscape-font-specification:'Urbanist, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#2a7fff;fill-opacity:1;stroke:none;stroke-width:0.264583" + d="m 459.42829,166.15938 c -4.97415,0 -9.61311,0.97015 -13.91698,2.91042 -4.2686,1.94027 -7.70821,4.65688 -10.31875,8.14937 -2.61055,3.45721 -3.91553,7.49624 -3.91553,12.11761 0,4.83303 1.21679,8.81976 3.65094,11.95947 2.46944,3.13971 5.82086,5.60918 10.05417,7.40834 4.26859,1.76388 9.08395,3.03348 14.44615,3.80958 1.97555,0.28222 3.89841,0.7232 5.76812,1.32292 1.90499,0.56444 3.45712,1.34077 4.65656,2.32854 1.23472,0.9525 1.85209,2.1698 1.85209,3.65146 0,1.44638 -0.58199,2.71598 -1.74615,3.80958 -1.16416,1.09361 -2.68143,1.95813 -4.55114,2.59313 -1.86972,0.59972 -3.86282,0.89968 -5.97948,0.89968 -2.29305,0 -4.37435,-0.29996 -6.24407,-0.89968 -1.86971,-0.635 -3.42184,-1.42876 -4.65656,-2.38125 -1.19944,-0.9525 -1.97576,-1.94008 -2.32854,-2.96313 l -14.92209,5.50302 c 1.27,3.45721 3.33335,6.43842 6.19084,8.94313 2.85749,2.46943 6.19147,4.37434 10.00146,5.71489 3.80998,1.30528 7.7962,1.95802 11.95896,1.95802 5.0447,0 9.70161,-0.97014 13.9702,-2.91041 4.2686,-1.94027 7.69026,-4.63894 10.26553,-8.09615 2.61054,-3.49249 3.91604,-7.54946 3.91604,-12.17083 0,-4.55082 -1.28755,-8.41397 -3.86282,-11.58896 -2.57526,-3.17499 -5.99744,-5.7147 -10.26604,-7.61969 -4.26859,-1.90499 -8.94293,-3.22792 -14.02291,-3.96875 -2.22249,-0.3175 -4.26841,-0.67028 -6.13813,-1.05833 -1.83444,-0.38806 -3.31632,-1.0408 -4.44521,-1.95802 -1.12888,-0.9525 -1.69292,-2.38157 -1.69292,-4.28656 0,-1.37583 0.59942,-2.61056 1.79886,-3.70417 1.19944,-1.09361 2.73414,-1.95761 4.60385,-2.59261 1.86972,-0.63499 3.82745,-0.93496 5.87355,-0.89968 2.29304,0 4.37435,0.29996 6.24406,0.89968 1.86972,0.59972 3.40441,1.37553 4.60385,2.32803 1.23472,0.91722 2.02848,1.88736 2.38125,2.91041 l 14.92261,-5.39708 c -1.23472,-3.49249 -3.28064,-6.49112 -6.13813,-8.99584 -2.85749,-2.50471 -6.2089,-4.40962 -10.05417,-5.71489 -3.80998,-1.34055 -7.79671,-2.01125 -11.95947,-2.01125 z m 206.05667,0.10594 c -4.69192,0 -9.24269,0.91733 -13.6524,2.75177 -4.37442,1.83443 -8.30782,4.46234 -11.80031,7.88427 -3.45721,3.38665 -6.20869,7.40877 -8.25479,12.06541 -2.01083,4.65665 -3.01636,9.82478 -3.01636,15.50448 0,5.25637 0.91734,10.21273 2.75177,14.86938 1.83444,4.65665 4.3921,8.76644 7.67292,12.32948 3.28082,3.52776 7.12603,6.2972 11.53573,8.30802 4.44498,2.01083 9.26034,3.01635 14.44615,3.01635 5.25636,0 10.14248,-1.05834 14.65802,-3.175 4.51553,-2.11665 8.44894,-5.04504 11.80031,-8.78447 3.35138,-3.73943 5.90904,-8.04305 7.67292,-12.91136 1.79916,-4.90359 2.55753,-10.12454 2.27531,-15.66313 h -28.68094 v 13.75782 h 9.94875 c -1.09361,1.86971 -2.31091,3.49261 -3.65146,4.86844 -1.34055,1.37582 -2.7691,2.50493 -4.28604,3.38687 -1.51694,0.88194 -3.08702,1.55212 -4.70979,2.01073 -1.58749,0.42333 -3.19244,0.6351 -4.81521,0.6351 -2.85749,0 -5.53872,-0.56455 -8.04344,-1.69343 -2.50471,-1.16416 -4.70959,-2.75168 -6.61458,-4.7625 -1.90499,-2.04611 -3.40431,-4.42738 -4.49792,-7.14375 -1.05832,-2.71638 -1.5875,-5.62682 -1.5875,-8.73125 0,-3.38666 0.56456,-6.47349 1.69344,-9.26042 1.16416,-2.78693 2.71629,-5.18563 4.65656,-7.19646 1.94027,-2.01082 4.14515,-3.56296 6.61459,-4.65656 2.46943,-1.09361 5.02709,-1.64073 7.67291,-1.64073 2.61055,0 5.18564,0.58199 7.72563,1.74615 2.57527,1.12888 4.93911,2.91073 7.09104,5.34489 l 14.18156,-7.62021 c -4.02165,-5.3622 -8.53703,-9.24278 -13.54646,-11.64166 -5.00942,-2.39888 -10.08987,-3.59823 -15.24041,-3.59823 z m -370.20324,1.2702 v 74.08282 h 15.875 v -28.78636 h 5.50354 l 16.72146,28.78636 h 18.30896 l -17.56792,-30.26792 c 2.64582,-1.26999 4.93889,-2.9457 6.87916,-5.02708 1.97555,-2.11666 3.4923,-4.53331 4.55063,-7.24969 1.05833,-2.75166 1.5875,-5.71491 1.5875,-8.8899 0,-4.12748 -0.97015,-7.90244 -2.91042,-11.32437 -1.90499,-3.45721 -4.49803,-6.20869 -7.77885,-8.25479 -3.28082,-2.04611 -6.94963,-3.06907 -11.00656,-3.06907 z m 88.05302,0 -26.88156,74.08282 h 16.82739 l 4.23334,-11.64167 h 29.52739 l 4.23334,11.64167 h 16.82739 l -26.88156,-74.08282 z m 115.88698,0 v 74.08282 h 47.20126 v -15.875 h -31.32626 v -15.875 h 24.1298 v -15.87448 h -24.1298 v -10.58334 h 31.32626 v -15.875 z m 58.84292,0 v 74.08282 h 15.875 v -45.4024 l 27.09344,45.4024 h 17.14469 v -74.08282 h -15.875 v 45.4024 l -27.09292,-45.4024 z m 172.56053,0 -26.88156,74.08282 H 720.571 l 4.23334,-11.64167 h 29.52739 l 4.23334,11.64167 h 16.82739 L 748.5109,167.53552 Z m 53.23396,0 v 74.08282 h 15.875 v -45.4024 l 27.09344,45.4024 h 17.14469 v -74.08282 h -15.875 v 45.4024 l -27.09292,-45.4024 z m -472.70241,13.54646 h 12.3827 c 1.41111,0 2.69866,0.37022 3.86282,1.11105 1.16416,0.70555 2.09893,1.65826 2.80448,2.8577 0.70555,1.19944 1.05833,2.52237 1.05833,3.96875 0,1.44639 -0.35278,2.76931 -1.05833,3.96875 -0.70555,1.19944 -1.64032,2.16959 -2.80448,2.91042 -1.16416,0.70555 -2.45171,1.05833 -3.86282,1.05833 h -12.3827 z m 81.06792,8.46667 8.99583,24.55302 h -17.88573 z m 347.29043,0 8.99583,24.55302 h -17.88573 z m 170.67847,22.85132 c -1.98966,0 -3.84555,0.38816 -5.5671,1.16427 -1.70745,0.77611 -3.08318,1.86275 -4.1274,3.25975 -1.04422,1.38288 -1.56631,2.99818 -1.56631,4.84673 0,1.93322 0.48671,3.5278 1.46037,4.78369 0.98778,1.25588 2.32865,2.24398 4.02198,2.96364 1.70744,0.70556 3.63357,1.2135 5.77846,1.52394 0.79022,0.11289 1.55895,0.28928 2.30683,0.52917 0.762,0.22577 1.38316,0.53609 1.86294,0.93121 0.49389,0.38099 0.74052,0.86771 0.74052,1.46037 0,0.57856 -0.23248,1.08701 -0.69815,1.52446 -0.46566,0.43744 -1.07267,0.78314 -1.82056,1.03714 -0.74788,0.23989 -1.54492,0.35967 -2.39158,0.35967 -0.91722,0 -1.75015,-0.11978 -2.49804,-0.35967 -0.74789,-0.254 -1.36853,-0.57191 -1.86242,-0.95291 -0.47978,-0.381 -0.7901,-0.77572 -0.93121,-1.18494 l -5.96914,2.2009 c 0.508,1.38288 1.33333,2.57567 2.47633,3.57756 1.143,0.98777 2.47679,1.74942 4.00079,2.28565 1.524,0.52211 3.11858,0.78341 4.78369,0.78341 2.01788,0 3.88033,-0.38816 5.58777,-1.16427 1.70744,-0.77611 3.0761,-1.85568 4.10621,-3.23856 1.04422,-1.397 1.56631,-3.01989 1.56631,-4.86844 0,-1.82033 -0.51501,-3.36538 -1.54512,-4.63537 -1.03011,-1.27 -2.39877,-2.28588 -4.10621,-3.04788 -1.70744,-0.762 -3.57697,-1.29117 -5.60896,-1.5875 -0.889,-0.127 -1.70778,-0.26801 -2.45567,-0.42323 -0.73377,-0.15522 -1.32611,-0.41653 -1.77766,-0.78342 -0.45156,-0.38099 -0.67748,-0.95262 -0.67748,-1.71462 0,-0.55033 0.24007,-1.04412 0.71985,-1.48156 0.47978,-0.43745 1.09334,-0.78315 1.84123,-1.03715 0.74789,-0.254 1.53129,-0.37378 2.34973,-0.35967 0.91722,0 1.74963,0.11978 2.49752,0.35967 0.74789,0.23989 1.36145,0.55021 1.84123,0.93121 0.49389,0.36689 0.8118,0.75505 0.95292,1.16427 l 5.96862,-2.15904 c -0.49389,-1.397 -1.31215,-2.59634 -2.45514,-3.59823 -1.143,-1.00189 -2.48336,-1.76406 -4.02146,-2.28617 -1.524,-0.53622 -3.11858,-0.80408 -4.78369,-0.80408 z m -22.26738,0.55035 v 20.19309 c 0,0.66322 -0.16931,1.26971 -0.50798,1.82004 -0.32455,0.55033 -0.76224,0.9951 -1.31258,1.33377 -0.55033,0.32455 -1.15682,0.48679 -1.82004,0.48679 -0.55033,0 -1.01633,-0.092 -1.39733,-0.27544 -0.381,-0.19755 -0.69132,-0.38758 -0.93121,-0.57102 l -4.06384,4.86792 c 0.889,0.762 1.88365,1.3407 2.98432,1.73581 1.11477,0.39511 2.25095,0.59273 3.40806,0.59273 1.83444,0 3.50634,-0.45185 5.01623,-1.35496 1.50989,-0.90311 2.71631,-2.10953 3.61942,-3.61941 0.90311,-1.50989 1.35495,-3.18179 1.35495,-5.01623 v -20.19309 z m -25.43307,14.16916 c -2.22249,0 -4.10997,0.77581 -5.66219,2.32803 -1.51693,1.55221 -2.27531,3.42226 -2.27531,5.60947 0,2.22249 0.75838,4.10946 2.27531,5.66167 1.55222,1.51694 3.4397,2.27583 5.66219,2.27583 2.18721,0 4.05674,-0.75889 5.60896,-2.27583 1.55222,-1.55221 2.32854,-3.43918 2.32854,-5.66167 0,-2.18721 -0.77632,-4.05726 -2.32854,-5.60947 -1.55222,-1.55222 -3.42175,-2.32803 -5.60896,-2.32803 z" /></g></svg> diff --git a/templates/portfolio/model1/src/assets/logos/l2.png b/templates/portfolio/model1/src/assets/logos/l2.png new file mode 100644 index 0000000..0d0ebf0 Binary files /dev/null and b/templates/portfolio/model1/src/assets/logos/l2.png differ diff --git a/templates/portfolio/model1/src/assets/logos/l3.png b/templates/portfolio/model1/src/assets/logos/l3.png new file mode 100644 index 0000000..6f75c78 Binary files /dev/null and b/templates/portfolio/model1/src/assets/logos/l3.png differ diff --git a/templates/portfolio/model1/src/assets/logos/l4.png b/templates/portfolio/model1/src/assets/logos/l4.png new file mode 100644 index 0000000..7a18417 Binary files /dev/null and b/templates/portfolio/model1/src/assets/logos/l4.png differ diff --git a/templates/portfolio/model1/src/assets/logos/l5.png b/templates/portfolio/model1/src/assets/logos/l5.png new file mode 100644 index 0000000..399ec8c Binary files /dev/null and b/templates/portfolio/model1/src/assets/logos/l5.png differ diff --git a/templates/portfolio/model1/src/assets/logos/l6.png b/templates/portfolio/model1/src/assets/logos/l6.png new file mode 100644 index 0000000..205221e Binary files /dev/null and b/templates/portfolio/model1/src/assets/logos/l6.png differ diff --git a/templates/portfolio/model1/src/assets/logos/l7.png b/templates/portfolio/model1/src/assets/logos/l7.png new file mode 100644 index 0000000..fa7fb6d Binary files /dev/null and b/templates/portfolio/model1/src/assets/logos/l7.png differ diff --git a/templates/portfolio/model1/src/assets/process/process1.svg b/templates/portfolio/model1/src/assets/process/process1.svg new file mode 100644 index 0000000..56d9d35 --- /dev/null +++ b/templates/portfolio/model1/src/assets/process/process1.svg @@ -0,0 +1,50 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> +<g filter="url(#filter0_iiiii_5123_3224)"> +<path d="M17.4279 5.93148C17.4279 4.77071 18.3782 3.80826 19.517 4.03273C23.7741 4.87179 27.1282 8.22586 27.9673 12.483C28.1917 13.6218 27.2293 14.5721 26.0685 14.5721H19.5297C18.3689 14.5721 17.4279 13.6311 17.4279 12.4703V5.93148Z" fill="url(#paint0_linear_5123_3224)"/> +<path d="M4 17.2577C4 12.0396 7.72038 7.69056 12.6533 6.71831C13.7921 6.49385 14.7423 7.4563 14.7423 8.61707V15.1559C14.7423 16.3167 15.6833 17.2577 16.8441 17.2577H23.3829C24.5437 17.2577 25.5062 18.2079 25.2817 19.3467C24.3094 24.2796 19.9604 28 14.7423 28C8.80951 28 4 23.1905 4 17.2577Z" fill="url(#paint1_linear_5123_3224)"/> +</g> +<defs> +<filter id="filter0_iiiii_5123_3224" x="0" y="0" width="30" height="30" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="2" dy="2"/> +<feGaussianBlur stdDeviation="3"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.541176 0 0 0 0 0.262745 0 0 0 0 1 0 0 0 0.4 0"/> +<feBlend mode="normal" in2="shape" result="effect1_innerShadow_5123_3224"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-4" dy="-4"/> +<feGaussianBlur stdDeviation="3"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.288056 0 0 0 0 0.00944442 0 0 0 0 0.566667 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect1_innerShadow_5123_3224" result="effect2_innerShadow_5123_3224"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="1" dy="1"/> +<feGaussianBlur stdDeviation="1"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.541176 0 0 0 0 0.262745 0 0 0 0 1 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect2_innerShadow_5123_3224" result="effect3_innerShadow_5123_3224"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-2" dy="-2"/> +<feGaussianBlur stdDeviation="2"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0.139917 0 0 0 0 0.304167 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect3_innerShadow_5123_3224" result="effect4_innerShadow_5123_3224"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-1" dy="-1"/> +<feGaussianBlur stdDeviation="0.5"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.541176 0 0 0 0 0.262745 0 0 0 0 1 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect4_innerShadow_5123_3224" result="effect5_innerShadow_5123_3224"/> +</filter> +<linearGradient id="paint0_linear_5123_3224" x1="16" y1="4" x2="16" y2="28" gradientUnits="userSpaceOnUse"> +<stop stop-color="#B98EFF"/> +<stop offset="1" stop-color="#8A43FF"/> +</linearGradient> +<linearGradient id="paint1_linear_5123_3224" x1="16" y1="4" x2="16" y2="28" gradientUnits="userSpaceOnUse"> +<stop stop-color="#B98EFF"/> +<stop offset="1" stop-color="#8A43FF"/> +</linearGradient> +</defs> +</svg> diff --git a/templates/portfolio/model1/src/assets/process/process2.svg b/templates/portfolio/model1/src/assets/process/process2.svg new file mode 100644 index 0000000..41ef781 --- /dev/null +++ b/templates/portfolio/model1/src/assets/process/process2.svg @@ -0,0 +1,42 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g filter="url(#filter0_iiiii_5130_3201)"> +<path d="M21.5001 9.5C21.5001 12.5376 19.0376 15 16.0001 15C12.9625 15 10.5001 12.5376 10.5001 9.5C10.5001 6.46243 12.9625 4 16.0001 4C19.0376 4 21.5001 6.46243 21.5001 9.5Z" fill="#1777E5"/> +<path d="M6.69905 20.2664C9.20594 18.2291 12.453 17 16.0001 17C19.5472 17 22.7942 18.2291 25.3011 20.2664C26.7319 21.4292 26.7319 23.5708 25.3011 24.7336C22.7942 26.7709 19.5472 28 16.0001 28C12.453 28 9.20594 26.7709 6.69905 24.7336C5.26829 23.5708 5.26829 21.4292 6.69905 20.2664Z" fill="#1777E5"/> +</g> +<defs> +<filter id="filter0_iiiii_5130_3201" x="1.62598" y="0" width="26.748" height="30" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="2" dy="2"/> +<feGaussianBlur stdDeviation="3"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.635294 0 0 0 0 0.788235 0 0 0 0 0.960784 0 0 0 0.4 0"/> +<feBlend mode="normal" in2="shape" result="effect1_innerShadow_5130_3201"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-4" dy="-4"/> +<feGaussianBlur stdDeviation="3"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect1_innerShadow_5130_3201" result="effect2_innerShadow_5130_3201"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="1" dy="1"/> +<feGaussianBlur stdDeviation="1"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect2_innerShadow_5130_3201" result="effect3_innerShadow_5130_3201"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-2" dy="-2"/> +<feGaussianBlur stdDeviation="2"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.00608333 0 0 0 0 0 0 0 0 0 0.304167 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect3_innerShadow_5130_3201" result="effect4_innerShadow_5130_3201"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-1" dy="-1"/> +<feGaussianBlur stdDeviation="0.5"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect4_innerShadow_5130_3201" result="effect5_innerShadow_5130_3201"/> +</filter> +</defs> +</svg> diff --git a/templates/portfolio/model1/src/assets/process/process3.svg b/templates/portfolio/model1/src/assets/process/process3.svg new file mode 100644 index 0000000..5d18de6 --- /dev/null +++ b/templates/portfolio/model1/src/assets/process/process3.svg @@ -0,0 +1,45 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g filter="url(#filter0_iiiii_5123_3504)"> +<path d="M5.62419 12.7934L8.97182 12.136C10.0816 11.9181 11.0478 11.2475 11.634 10.2882L14.2776 5.96197C15.0614 4.67934 16.9386 4.67934 17.7224 5.96197L20.366 10.2882C20.9522 11.2475 21.9184 11.9181 23.0282 12.136L26.3758 12.7934C27.9595 13.1044 28.5486 15.0437 27.4016 16.17L24.5918 18.9288C23.6284 19.8749 23.2098 21.238 23.4782 22.5557L23.9973 25.1041C24.3286 26.7307 22.6297 28.0246 21.1297 27.2882L17.7874 25.6473C16.6611 25.0944 15.3389 25.0944 14.2126 25.6473L10.8703 27.2882C9.37028 28.0246 7.67137 26.7307 8.00269 25.1041L8.52177 22.5557C8.79018 21.238 8.37163 19.8749 7.40815 18.9288L4.59838 16.17C3.45136 15.0437 4.04053 13.1044 5.62419 12.7934Z" fill="url(#paint0_linear_5123_3504)"/> +</g> +<defs> +<filter id="filter0_iiiii_5123_3504" x="0" y="1" width="30" height="28.5" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="2" dy="2"/> +<feGaussianBlur stdDeviation="3"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 0.7625 0 0 0 0 0.7625 0 0 0 0.4 0"/> +<feBlend mode="normal" in2="shape" result="effect1_innerShadow_5123_3504"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-4" dy="-4"/> +<feGaussianBlur stdDeviation="3"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.583333 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect1_innerShadow_5123_3504" result="effect2_innerShadow_5123_3504"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="1" dy="1"/> +<feGaussianBlur stdDeviation="1"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 0.795833 0 0 0 0 0.795833 0 0 0 0.4 0"/> +<feBlend mode="normal" in2="effect2_innerShadow_5123_3504" result="effect3_innerShadow_5123_3504"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-2" dy="-2"/> +<feGaussianBlur stdDeviation="2"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.304167 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect3_innerShadow_5123_3504" result="effect4_innerShadow_5123_3504"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-1" dy="-1"/> +<feGaussianBlur stdDeviation="0.5"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 0.25 0 0 0 0 0.25 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect4_innerShadow_5123_3504" result="effect5_innerShadow_5123_3504"/> +</filter> +<linearGradient id="paint0_linear_5123_3504" x1="16" y1="5" x2="16" y2="27.5" gradientUnits="userSpaceOnUse"> +<stop stop-color="#FF7D7D"/> +<stop offset="1" stop-color="#FF944D"/> +</linearGradient> +</defs> +</svg> diff --git a/templates/portfolio/model1/src/assets/process/process4.svg b/templates/portfolio/model1/src/assets/process/process4.svg new file mode 100644 index 0000000..6c74572 --- /dev/null +++ b/templates/portfolio/model1/src/assets/process/process4.svg @@ -0,0 +1,45 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g filter="url(#filter0_iiiii_5123_1273)"> +<path d="M14.19 4.52471C11.6394 6.33647 7.79427 7.65978 5.6503 8.04814C5.25516 8.11971 4.92358 8.40054 4.84468 8.79085C3.74319 14.2395 4.86252 22.9556 14.4541 27.6662C15.359 28.1106 16.4298 28.1109 17.336 27.6692C27.0007 22.9589 28.5027 14.2393 26.9971 8.78953C26.8895 8.40007 26.524 8.1477 26.1174 8.12181C22.6661 7.90205 19.5171 6.06859 17.5825 4.54643C16.6454 3.80908 15.1626 3.83387 14.19 4.52471Z" fill="url(#paint0_linear_5123_1273)"/> +</g> +<defs> +<filter id="filter0_iiiii_5123_1273" x="0.5" y="0" width="29" height="30" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="2" dy="2"/> +<feGaussianBlur stdDeviation="3"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.938667 0 0 0 0 1 0 0 0 0 0.808333 0 0 0 0.4 0"/> +<feBlend mode="normal" in2="shape" result="effect1_innerShadow_5123_1273"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-4" dy="-4"/> +<feGaussianBlur stdDeviation="3"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0.583333 0 0 0 0 0.163333 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect1_innerShadow_5123_1273" result="effect2_innerShadow_5123_1273"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="1" dy="1"/> +<feGaussianBlur stdDeviation="1"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.873417 0 0 0 0 1 0 0 0 0 0.795833 0 0 0 0.4 0"/> +<feBlend mode="normal" in2="effect2_innerShadow_5123_1273" result="effect3_innerShadow_5123_1273"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-2" dy="-2"/> +<feGaussianBlur stdDeviation="2"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0.304167 0 0 0 0 0.231167 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect3_innerShadow_5123_1273" result="effect4_innerShadow_5123_1273"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dx="-1" dy="-1"/> +<feGaussianBlur stdDeviation="0.5"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.105882 0 0 0 0 0.984314 0 0 0 0 0.457255 0 0 0 0.2 0"/> +<feBlend mode="normal" in2="effect4_innerShadow_5123_1273" result="effect5_innerShadow_5123_1273"/> +</filter> +<linearGradient id="paint0_linear_5123_1273" x1="16" y1="4" x2="16" y2="28" gradientUnits="userSpaceOnUse"> +<stop stop-color="#97EB0E"/> +<stop offset="1" stop-color="#19B90B"/> +</linearGradient> +</defs> +</svg> diff --git a/templates/portfolio/model1/src/assets/projects/project1.png b/templates/portfolio/model1/src/assets/projects/project1.png new file mode 100644 index 0000000..0afb2c4 Binary files /dev/null and b/templates/portfolio/model1/src/assets/projects/project1.png differ diff --git a/templates/portfolio/model1/src/assets/projects/project2.png b/templates/portfolio/model1/src/assets/projects/project2.png new file mode 100644 index 0000000..4e465f2 Binary files /dev/null and b/templates/portfolio/model1/src/assets/projects/project2.png differ diff --git a/templates/portfolio/model1/src/assets/projects/project3.png b/templates/portfolio/model1/src/assets/projects/project3.png new file mode 100644 index 0000000..c675923 Binary files /dev/null and b/templates/portfolio/model1/src/assets/projects/project3.png differ diff --git a/templates/portfolio/model1/src/assets/recovered_5e762b70032d001001b38f1eefddec873080c451.png b/templates/portfolio/model1/src/assets/recovered_5e762b70032d001001b38f1eefddec873080c451.png new file mode 100644 index 0000000..5e762b7 Binary files /dev/null and b/templates/portfolio/model1/src/assets/recovered_5e762b70032d001001b38f1eefddec873080c451.png differ diff --git a/templates/portfolio/model1/src/assets/services/service1.png b/templates/portfolio/model1/src/assets/services/service1.png new file mode 100644 index 0000000..712de6b Binary files /dev/null and b/templates/portfolio/model1/src/assets/services/service1.png differ diff --git a/templates/portfolio/model1/src/assets/services/service2.png b/templates/portfolio/model1/src/assets/services/service2.png new file mode 100644 index 0000000..75061cc Binary files /dev/null and b/templates/portfolio/model1/src/assets/services/service2.png differ diff --git a/templates/portfolio/model1/src/assets/services/service3.png b/templates/portfolio/model1/src/assets/services/service3.png new file mode 100644 index 0000000..37e0a32 Binary files /dev/null and b/templates/portfolio/model1/src/assets/services/service3.png differ diff --git a/templates/portfolio/model1/src/assets/skills.png b/templates/portfolio/model1/src/assets/skills.png new file mode 100644 index 0000000..84be553 Binary files /dev/null and b/templates/portfolio/model1/src/assets/skills.png differ diff --git a/templates/portfolio/model1/src/assets/sm.png b/templates/portfolio/model1/src/assets/sm.png new file mode 100644 index 0000000..cb03513 Binary files /dev/null and b/templates/portfolio/model1/src/assets/sm.png differ diff --git a/templates/portfolio/model1/src/assets/testimonials/testimonial1.png b/templates/portfolio/model1/src/assets/testimonials/testimonial1.png new file mode 100644 index 0000000..acbe060 Binary files /dev/null and b/templates/portfolio/model1/src/assets/testimonials/testimonial1.png differ diff --git a/templates/portfolio/model1/src/assets/testimonials/testimonial2.png b/templates/portfolio/model1/src/assets/testimonials/testimonial2.png new file mode 100644 index 0000000..cd6a3c6 Binary files /dev/null and b/templates/portfolio/model1/src/assets/testimonials/testimonial2.png differ diff --git a/templates/portfolio/model1/src/assets/testimonials/testimonial3.png b/templates/portfolio/model1/src/assets/testimonials/testimonial3.png new file mode 100644 index 0000000..d61772f Binary files /dev/null and b/templates/portfolio/model1/src/assets/testimonials/testimonial3.png differ diff --git a/templates/portfolio/model1/src/components/atom/Button.tsx b/templates/portfolio/model1/src/components/atom/Button.tsx new file mode 100644 index 0000000..357a620 --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/Button.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: + "bg-primary/60 text-primary-foreground shadow shadow-primary hover:bg-primary", + large: + "border-primary text-primary py-6 border-2 border-primary duration-300 ease-in-out hover:text-white hover:bg-primary", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-xl px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes<HTMLButtonElement>, + VariantProps<typeof buttonVariants> { + asChild?: boolean +} + +const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + <Comp + className={cn(buttonVariants({ variant, size, className }))} + ref={ref} + {...props} + /> + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/templates/portfolio/model1/src/components/atom/avatar.tsx b/templates/portfolio/model1/src/components/atom/avatar.tsx new file mode 100644 index 0000000..991f56e --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/avatar.tsx @@ -0,0 +1,48 @@ +import * as React from "react" +import * as AvatarPrimitive from "@radix-ui/react-avatar" + +import { cn } from "@/lib/utils" + +const Avatar = React.forwardRef< + React.ElementRef<typeof AvatarPrimitive.Root>, + React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> +>(({ className, ...props }, ref) => ( + <AvatarPrimitive.Root + ref={ref} + className={cn( + "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full", + className + )} + {...props} + /> +)) +Avatar.displayName = AvatarPrimitive.Root.displayName + +const AvatarImage = React.forwardRef< + React.ElementRef<typeof AvatarPrimitive.Image>, + React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image> +>(({ className, ...props }, ref) => ( + <AvatarPrimitive.Image + ref={ref} + className={cn("aspect-square h-full w-full", className)} + {...props} + /> +)) +AvatarImage.displayName = AvatarPrimitive.Image.displayName + +const AvatarFallback = React.forwardRef< + React.ElementRef<typeof AvatarPrimitive.Fallback>, + React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback> +>(({ className, ...props }, ref) => ( + <AvatarPrimitive.Fallback + ref={ref} + className={cn( + "flex h-full w-full items-center justify-center rounded-full bg-muted", + className + )} + {...props} + /> +)) +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName + +export { Avatar, AvatarImage, AvatarFallback } diff --git a/templates/portfolio/model1/src/components/atom/badge.tsx b/templates/portfolio/model1/src/components/atom/badge.tsx new file mode 100644 index 0000000..aae6d17 --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/badge.tsx @@ -0,0 +1,35 @@ +"use client" + +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center rounded-full px-3 py-1 text-md font-normal transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + designer: "text-orange-700", + instructor: "text-blue-700", + podcaster: "text-purple-700", + }, + }, + defaultVariants: { + variant: "designer", + }, + } +) + +export interface BadgeProps + extends React.HTMLAttributes<HTMLDivElement>, + VariantProps<typeof badgeVariants> {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( + <div className={cn(badgeVariants({ variant }), className)} {...props} /> + ) +} + +export { Badge, badgeVariants } + diff --git a/templates/portfolio/model1/src/components/atom/button.tsx b/templates/portfolio/model1/src/components/atom/button.tsx new file mode 100644 index 0000000..65d4fcd --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/button.tsx @@ -0,0 +1,57 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes<HTMLButtonElement>, + VariantProps<typeof buttonVariants> { + asChild?: boolean +} + +const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + <Comp + className={cn(buttonVariants({ variant, size, className }))} + ref={ref} + {...props} + /> + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/templates/portfolio/model1/src/components/atom/card.tsx b/templates/portfolio/model1/src/components/atom/card.tsx new file mode 100644 index 0000000..cabfbfc --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/card.tsx @@ -0,0 +1,76 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => ( + <div + ref={ref} + className={cn( + "rounded-xl border bg-card text-card-foreground shadow", + className + )} + {...props} + /> +)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => ( + <div + ref={ref} + className={cn("flex flex-col space-y-1.5 p-6", className)} + {...props} + /> +)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => ( + <div + ref={ref} + className={cn("font-semibold leading-none tracking-tight", className)} + {...props} + /> +)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => ( + <div + ref={ref} + className={cn("text-sm text-muted-foreground", className)} + {...props} + /> +)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => ( + <div ref={ref} className={cn("p-6 pt-0", className)} {...props} /> +)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => ( + <div + ref={ref} + className={cn("flex items-center p-6 pt-0", className)} + {...props} + /> +)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/templates/portfolio/model1/src/components/atom/carousel.tsx b/templates/portfolio/model1/src/components/atom/carousel.tsx new file mode 100644 index 0000000..9fb1015 --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/carousel.tsx @@ -0,0 +1,260 @@ +import * as React from "react" +import useEmblaCarousel, { + type UseEmblaCarouselType, +} from "embla-carousel-react" +import { ArrowLeft, ArrowRight } from "lucide-react" + +import { cn } from "@/lib/utils" +import { Button } from "@/components/atom/button" + +type CarouselApi = UseEmblaCarouselType[1] +type UseCarouselParameters = Parameters<typeof useEmblaCarousel> +type CarouselOptions = UseCarouselParameters[0] +type CarouselPlugin = UseCarouselParameters[1] + +type CarouselProps = { + opts?: CarouselOptions + plugins?: CarouselPlugin + orientation?: "horizontal" | "vertical" + setApi?: (api: CarouselApi) => void +} + +type CarouselContextProps = { + carouselRef: ReturnType<typeof useEmblaCarousel>[0] + api: ReturnType<typeof useEmblaCarousel>[1] + scrollPrev: () => void + scrollNext: () => void + canScrollPrev: boolean + canScrollNext: boolean +} & CarouselProps + +const CarouselContext = React.createContext<CarouselContextProps | null>(null) + +function useCarousel() { + const context = React.useContext(CarouselContext) + + if (!context) { + throw new Error("useCarousel must be used within a <Carousel />") + } + + return context +} + +const Carousel = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> & CarouselProps +>( + ( + { + orientation = "horizontal", + opts, + setApi, + plugins, + className, + children, + ...props + }, + ref + ) => { + const [carouselRef, api] = useEmblaCarousel( + { + ...opts, + axis: orientation === "horizontal" ? "x" : "y", + }, + plugins + ) + const [canScrollPrev, setCanScrollPrev] = React.useState(false) + const [canScrollNext, setCanScrollNext] = React.useState(false) + + const onSelect = React.useCallback((api: CarouselApi) => { + if (!api) { + return + } + + setCanScrollPrev(api.canScrollPrev()) + setCanScrollNext(api.canScrollNext()) + }, []) + + const scrollPrev = React.useCallback(() => { + api?.scrollPrev() + }, [api]) + + const scrollNext = React.useCallback(() => { + api?.scrollNext() + }, [api]) + + const handleKeyDown = React.useCallback( + (event: React.KeyboardEvent<HTMLDivElement>) => { + if (event.key === "ArrowLeft") { + event.preventDefault() + scrollPrev() + } else if (event.key === "ArrowRight") { + event.preventDefault() + scrollNext() + } + }, + [scrollPrev, scrollNext] + ) + + React.useEffect(() => { + if (!api || !setApi) { + return + } + + setApi(api) + }, [api, setApi]) + + React.useEffect(() => { + if (!api) { + return + } + + onSelect(api) + api.on("reInit", onSelect) + api.on("select", onSelect) + + return () => { + api?.off("select", onSelect) + } + }, [api, onSelect]) + + return ( + <CarouselContext.Provider + value={{ + carouselRef, + api: api, + opts, + orientation: + orientation || (opts?.axis === "y" ? "vertical" : "horizontal"), + scrollPrev, + scrollNext, + canScrollPrev, + canScrollNext, + }} + > + <div + ref={ref} + onKeyDownCapture={handleKeyDown} + className={cn("relative", className)} + role="region" + aria-roledescription="carousel" + {...props} + > + {children} + </div> + </CarouselContext.Provider> + ) + } +) +Carousel.displayName = "Carousel" + +const CarouselContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => { + const { carouselRef, orientation } = useCarousel() + + return ( + <div ref={carouselRef} className="overflow-hidden"> + <div + ref={ref} + className={cn( + "flex", + orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col", + className + )} + {...props} + /> + </div> + ) +}) +CarouselContent.displayName = "CarouselContent" + +const CarouselItem = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes<HTMLDivElement> +>(({ className, ...props }, ref) => { + const { orientation } = useCarousel() + + return ( + <div + ref={ref} + role="group" + aria-roledescription="slide" + className={cn( + "min-w-0 shrink-0 grow-0 basis-full", + orientation === "horizontal" ? "pl-4" : "pt-4", + className + )} + {...props} + /> + ) +}) +CarouselItem.displayName = "CarouselItem" + +const CarouselPrevious = React.forwardRef< + HTMLButtonElement, + React.ComponentProps<typeof Button> +>(({ className, variant = "outline", size = "icon", ...props }, ref) => { + const { orientation, scrollPrev, canScrollPrev } = useCarousel() + + return ( + <Button + ref={ref} + variant={variant} + size={size} + className={cn( + "absolute h-8 w-8 rounded-full", + orientation === "horizontal" + ? "-left-12 top-1/2 -translate-y-1/2" + : "-top-12 left-1/2 -translate-x-1/2 rotate-90", + className + )} + disabled={!canScrollPrev} + onClick={scrollPrev} + {...props} + > + <ArrowLeft className="h-4 w-4" /> + <span className="sr-only">Previous slide</span> + </Button> + ) +}) +CarouselPrevious.displayName = "CarouselPrevious" + +const CarouselNext = React.forwardRef< + HTMLButtonElement, + React.ComponentProps<typeof Button> +>(({ className, variant = "outline", size = "icon", ...props }, ref) => { + const { orientation, scrollNext, canScrollNext } = useCarousel() + + return ( + <Button + ref={ref} + variant={variant} + size={size} + className={cn( + "absolute h-8 w-8 rounded-full", + orientation === "horizontal" + ? "-right-12 top-1/2 -translate-y-1/2" + : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90", + className + )} + disabled={!canScrollNext} + onClick={scrollNext} + {...props} + > + <ArrowRight className="h-4 w-4" /> + <span className="sr-only">Next slide</span> + </Button> + ) +}) +CarouselNext.displayName = "CarouselNext" + +export { + type CarouselApi, + Carousel, + CarouselContent, + CarouselItem, + CarouselPrevious, + CarouselNext, +} diff --git a/templates/portfolio/model1/src/components/atom/input.tsx b/templates/portfolio/model1/src/components/atom/input.tsx new file mode 100644 index 0000000..6b804b9 --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/input.tsx @@ -0,0 +1,22 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Input = React.forwardRef<HTMLInputElement, React.ComponentProps<"input">>( + ({ className, type, ...props }, ref) => { + return ( + <input + type={type} + className={cn( + "flex h-12 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", + className + )} + ref={ref} + {...props} + /> + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/templates/portfolio/model1/src/components/atom/label.tsx b/templates/portfolio/model1/src/components/atom/label.tsx new file mode 100644 index 0000000..683faa7 --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/label.tsx @@ -0,0 +1,24 @@ +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const labelVariants = cva( + "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" +) + +const Label = React.forwardRef< + React.ElementRef<typeof LabelPrimitive.Root>, + React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & + VariantProps<typeof labelVariants> +>(({ className, ...props }, ref) => ( + <LabelPrimitive.Root + ref={ref} + className={cn(labelVariants(), className)} + {...props} + /> +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } diff --git a/templates/portfolio/model1/src/components/atom/progress.tsx b/templates/portfolio/model1/src/components/atom/progress.tsx new file mode 100644 index 0000000..690c42e --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/progress.tsx @@ -0,0 +1,26 @@ +import * as React from "react" +import * as ProgressPrimitive from "@radix-ui/react-progress" + +import { cn } from "@/lib/utils" + +const Progress = React.forwardRef< + React.ElementRef<typeof ProgressPrimitive.Root>, + React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> +>(({ className, value, color, ...props }, ref) => ( + <ProgressPrimitive.Root + ref={ref} + className={cn( + "relative h-2 w-full overflow-hidden rounded-full bg-primary/20", + className + )} + {...props} + > + <ProgressPrimitive.Indicator + className={`h-full w-full flex-1 transition-all ${color}`} + style={{ transform: `translateX(-${100 - (value || 0)}%)` }} + /> + </ProgressPrimitive.Root> +)) +Progress.displayName = ProgressPrimitive.Root.displayName + +export { Progress } diff --git a/templates/portfolio/model1/src/components/atom/select.tsx b/templates/portfolio/model1/src/components/atom/select.tsx new file mode 100644 index 0000000..c274906 --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/select.tsx @@ -0,0 +1,157 @@ +import * as React from "react" +import * as SelectPrimitive from "@radix-ui/react-select" +import { Check, ChevronDown, ChevronUp } from "lucide-react" + +import { cn } from "@/lib/utils" + +const Select = SelectPrimitive.Root + +const SelectGroup = SelectPrimitive.Group + +const SelectValue = SelectPrimitive.Value + +const SelectTrigger = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.Trigger>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> +>(({ className, children, ...props }, ref) => ( + <SelectPrimitive.Trigger + ref={ref} + className={cn( + "flex h-12 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1", + className + )} + {...props} + > + {children} + <SelectPrimitive.Icon asChild> + <ChevronDown className="h-4 w-4 opacity-50" /> + </SelectPrimitive.Icon> + </SelectPrimitive.Trigger> +)) +SelectTrigger.displayName = SelectPrimitive.Trigger.displayName + +const SelectScrollUpButton = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.ScrollUpButton>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton> +>(({ className, ...props }, ref) => ( + <SelectPrimitive.ScrollUpButton + ref={ref} + className={cn( + "flex cursor-default items-center justify-center py-1", + className + )} + {...props} + > + <ChevronUp className="h-4 w-4" /> + </SelectPrimitive.ScrollUpButton> +)) +SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName + +const SelectScrollDownButton = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.ScrollDownButton>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton> +>(({ className, ...props }, ref) => ( + <SelectPrimitive.ScrollDownButton + ref={ref} + className={cn( + "flex cursor-default items-center justify-center py-1", + className + )} + {...props} + > + <ChevronDown className="h-4 w-4" /> + </SelectPrimitive.ScrollDownButton> +)) +SelectScrollDownButton.displayName = + SelectPrimitive.ScrollDownButton.displayName + +const SelectContent = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.Content>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> +>(({ className, children, position = "popper", ...props }, ref) => ( + <SelectPrimitive.Portal> + <SelectPrimitive.Content + ref={ref} + className={cn( + "relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", + position === "popper" && + "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", + className + )} + position={position} + {...props} + > + <SelectScrollUpButton /> + <SelectPrimitive.Viewport + className={cn( + "p-1", + position === "popper" && + "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]" + )} + > + {children} + </SelectPrimitive.Viewport> + <SelectScrollDownButton /> + </SelectPrimitive.Content> + </SelectPrimitive.Portal> +)) +SelectContent.displayName = SelectPrimitive.Content.displayName + +const SelectLabel = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.Label>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label> +>(({ className, ...props }, ref) => ( + <SelectPrimitive.Label + ref={ref} + className={cn("px-2 py-1.5 text-sm font-semibold", className)} + {...props} + /> +)) +SelectLabel.displayName = SelectPrimitive.Label.displayName + +const SelectItem = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.Item>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item> +>(({ className, children, ...props }, ref) => ( + <SelectPrimitive.Item + ref={ref} + className={cn( + "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", + className + )} + {...props} + > + <span className="absolute right-2 flex h-3.5 w-3.5 items-center justify-center"> + <SelectPrimitive.ItemIndicator> + <Check className="h-4 w-4" /> + </SelectPrimitive.ItemIndicator> + </span> + <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText> + </SelectPrimitive.Item> +)) +SelectItem.displayName = SelectPrimitive.Item.displayName + +const SelectSeparator = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.Separator>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator> +>(({ className, ...props }, ref) => ( + <SelectPrimitive.Separator + ref={ref} + className={cn("-mx-1 my-1 h-px bg-muted", className)} + {...props} + /> +)) +SelectSeparator.displayName = SelectPrimitive.Separator.displayName + +export { + Select, + SelectGroup, + SelectValue, + SelectTrigger, + SelectContent, + SelectLabel, + SelectItem, + SelectSeparator, + SelectScrollUpButton, + SelectScrollDownButton, +} diff --git a/templates/portfolio/model1/src/components/atom/textarea.tsx b/templates/portfolio/model1/src/components/atom/textarea.tsx new file mode 100644 index 0000000..e56b0af --- /dev/null +++ b/templates/portfolio/model1/src/components/atom/textarea.tsx @@ -0,0 +1,22 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Textarea = React.forwardRef< + HTMLTextAreaElement, + React.ComponentProps<"textarea"> +>(({ className, ...props }, ref) => { + return ( + <textarea + className={cn( + "flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", + className + )} + ref={ref} + {...props} + /> + ) +}) +Textarea.displayName = "Textarea" + +export { Textarea } diff --git a/templates/portfolio/model1/src/components/molecules/Titles.tsx b/templates/portfolio/model1/src/components/molecules/Titles.tsx new file mode 100644 index 0000000..e9221b9 --- /dev/null +++ b/templates/portfolio/model1/src/components/molecules/Titles.tsx @@ -0,0 +1,72 @@ +import React from 'react' +import { cva, type VariantProps } from 'class-variance-authority' +import { cn } from '@/lib/utils' + +const titleVariants = cva('font-bold leading-tight', { + variants: { + size: { + sm: 'text-2xl md:text-3xl', + md: 'text-3xl md:text-4xl', + lg: 'text-4xl md:text-5xl', + xl: 'text-5xl md:text-6xl', + }, + colored: { + default: 'text-[#132238] dark:text-gray-100', + white: 'text-white dark:text-gray-900', + }, + alignment: { + left: 'text-left', + center: 'text-center', + right: 'text-right', + }, + }, + defaultVariants: { + size: 'md', + colored: 'default', + alignment: 'left', + }, +}) + +const subtitleVariants = cva('mt-2 max-w-[600px]', { + variants: { + size: { + sm: 'text-sm md:text-base', + md: 'text-base md:text-lg', + lg: 'text-2xl md:text-2xl', + }, + alignment: { + left: 'text-left', + center: 'text-center mx-auto', + right: 'text-right ml-auto', + }, + }, + defaultVariants: { + size: 'lg', + alignment: 'center', + }, +}) + +interface TitleProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof titleVariants> { + children: React.ReactNode + subtitle?: string + id?:string +} + +export function Title({ children, subtitle, size, colored, alignment, className, id, ...props }: TitleProps) { + return ( + <div id={id} className={cn('space-y-2 lg:mt-28 md:mt-28 mt-12 lg:mb-16 md:mb-14 mb-6', className)} {...props}> + <h2 className={cn(titleVariants({ size, colored, alignment }))}> + {children} + </h2> + {subtitle && ( + <p className={cn( + subtitleVariants({ size: size === 'xl' ? 'lg' : size === 'lg' ? 'md' : 'sm', alignment }), + 'text-gray-600 dark:text-gray-400' + )}> + {subtitle} + </p> + )} + </div> + ) +} + diff --git a/templates/portfolio/model1/src/components/molecules/buttons/IconButton.tsx b/templates/portfolio/model1/src/components/molecules/buttons/IconButton.tsx new file mode 100644 index 0000000..7620df8 --- /dev/null +++ b/templates/portfolio/model1/src/components/molecules/buttons/IconButton.tsx @@ -0,0 +1,42 @@ +import { Button } from "@/components/atom/Button"; + +export function IconButton({ + Icon, + Variant, + Content, + size, + type = "normal", + className +}: { + Icon: React.ReactNode; + Variant: + | "default" + | "large" + | "destructive" + | "outline" + | "secondary" + | "ghost" + | "link" + | null + | undefined; + Content: string; + size: "default" | "sm" | "lg" | "icon" | null | undefined; + type?: "normal" | "inverse"; + className?: string; +}) { + return ( + <Button variant={Variant} size={size} className={className}> + {type === "normal" ? ( + <> + {Content} + {Icon} + </> + ) : ( + <> + {Icon} + {Content} + </> + )} + </Button> + ); +} diff --git a/templates/portfolio/model1/src/components/molecules/cards/ContactCard.tsx b/templates/portfolio/model1/src/components/molecules/cards/ContactCard.tsx new file mode 100644 index 0000000..a501c52 --- /dev/null +++ b/templates/portfolio/model1/src/components/molecules/cards/ContactCard.tsx @@ -0,0 +1,246 @@ +import * as React from "react"; + +import { Button } from "@/components/atom/button"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/atom/card"; +import { Input } from "@/components/atom/input"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/atom/select"; +import { Textarea } from "@/components/atom/textarea"; + +import { MoveRightIcon, Phone, Mail } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +interface notification { + title: string; + description: string; +} + +function ContactCard() { + const notifications: notification[] = [ + { + title: "Your call has been confirmed.", + description: "1 hour ago", + }, + { + title: "You have a new message!", + description: "1 hour ago", + }, + { + title: "Your subscription is expiring soon!", + description: "2 hours ago", + }, + ]; + + return ( + <div className="flex md:flex-nowrap flex-wrap-reverse justify-center md:space-x-6 mx-auto px-6 rounded-xl shadow-2xl lg:w-auto md:max-w-4xl sm:border sm:max-w-xl max-w-md lg:max-w-7xl bg-white p-6"> + <div className="lg:w-2/5 w-full"> + <CardDemo notifications={notifications} /> + </div> + <div className="lg:w-3/5 w-full md:border-l md:px-4"> + <Card className="w-full border-none shadow-none"> + <CardHeader> + <CardTitle className="text-2xl">Just say 👋 Hi</CardTitle> + </CardHeader> + <CardContent> + <form> + <div className="grid w-full items-center gap-4 mt-2"> + <div className="flex lg:flex-nowrap flex-wrap justify-start gap-6"> + <div className="lg:w-1/2 w-full"> + <Input id="name" placeholder="Full Name" /> + </div> + <div className="lg:w-1/2 w-full"> + <Input id="name" placeholder="Email Adress" /> + </div> + </div> + + <div className="flex flex-col space-y-2 w-full"> + <Input id="name" placeholder="Name of your project" /> + </div> + + <div className="flex lg:flex-nowrap flex-wrap justify-start gap-6"> + <div className="lg:w-1/2 w-full"> + <Select> + <SelectTrigger id="framework"> + <SelectValue placeholder="Services" /> + </SelectTrigger> + <SelectContent position="popper"> + <SelectItem value="next">One</SelectItem> + <SelectItem value="sveltekit">Two</SelectItem> + <SelectItem value="astro">Three</SelectItem> + <SelectItem value="nuxt">Four</SelectItem> + </SelectContent> + </Select> + </div> + <div className="lg:w-1/2 w-full"> + <Select> + <SelectTrigger id="framework"> + <SelectValue placeholder="Budgets" /> + </SelectTrigger> + <SelectContent position="popper"> + <SelectItem value="next">One</SelectItem> + <SelectItem value="sveltekit">Two</SelectItem> + <SelectItem value="astro">Three</SelectItem> + <SelectItem value="nuxt">Four</SelectItem> + </SelectContent> + </Select> + </div> + </div> + <Textarea placeholder="Message" className="h-[150px]" /> + </div> + </form> + </CardContent> + <CardFooter className=""> + <Button + size="lg" + className="bg-purple-600 hover:bg-purple-700 p-9 rounded-2xl text-lg shadow-none" + > + Send Message + <MoveRightIcon className="mr-2 h-6 w-10" /> + </Button> + </CardFooter> + </Card> + </div> + </div> + ); +} + +// type CardProps = React.ComponentProps<typeof Card> + +interface CardProps extends React.HTMLAttributes<HTMLDivElement> { + className?: string; + notifications: notification[]; +} + +export function CardDemo({ className, notifications, ...props }: CardProps) { + return ( + <Card + className={cn("w-full border-none shadow-none", className)} + {...props} + > + <CardHeader> + <CardTitle className="text-[22px]"> + Have a project or question in mind? Just send me a message. + </CardTitle> + <CardDescription className="mt-3 text-md text-slate-700"> + Do you fancy saying hi to me or do you want to get started with your + project and you need my help? Feel free to contact me. I will reply + within 48 hours. + </CardDescription> + </CardHeader> + <CardContent className="grid gap-4"> + <div className="space-y-4 mt-2"> + <div className="flex items-center gap-3"> + <div className="bg-purple-100 p-4 rounded-lg"> + <Phone className="w-6 h-6 text-purple-600" /> + </div> + <div> + <div className="text-sm text-slate-600">Call me now</div> + <div className="font-normal">+1-202-555-0190</div> + </div> + </div> + + <div className="flex items-center gap-3"> + <div className="bg-purple-100 p-4 rounded-lg"> + <Mail className="w-6 h-6 text-purple-600" /> + </div> + <div> + <div className="text-sm text-slate-600">Chat with me</div> + <div className="font-normal">kevin.gilbert@gmail.com</div> + </div> + </div> + </div> + + <Card className="bg-purple-100 border-none shadow-none p-4 mt-3 w-full"> + <CardContent className="lg:p-6 md:p-4 p-0"> + <h3 className="font-normal mb-4">Follow me on social media</h3> + <div className="flex flex-wrap gap-3 text-purple-500"> + <hr className="md:w-9 w-4 h-1 bg-purple-400 my-auto" /> + <a + href="#" + className="bg-white p-3 rounded-full hover:bg-purple-600 hover:text-white transition-colors" + > + <svg + className="md:w-6 md:h-6 w-4 h-4" + fill="currentColor" + viewBox="0 0 24 24" + aria-hidden="true" + > + <path d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z" /> + </svg> + </a> + <a + href="#" + className="bg-white p-3 rounded-full hover:bg-purple-600 hover:text-white transition-colors" + > + <svg + className="md:w-6 md:h-6 w-4 h-4" + fill="currentColor" + viewBox="0 0 24 24" + aria-hidden="true" + > + <path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84" /> + </svg> + </a> + <a + href="#" + className="bg-white p-3 rounded-full hover:bg-purple-600 hover:text-white transition-colors" + > + <svg + className="md:w-6 md:h-6 w-4 h-4" + fill="currentColor" + viewBox="0 0 24 24" + aria-hidden="true" + > + <path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" /> + </svg> + </a> + <a + href="#" + className="bg-white p-3 rounded-full hover:bg-purple-600 hover:text-white transition-colors" + > + <svg + className="md:w-6 md:h-6 w-4 h-4" + fill="currentColor" + viewBox="0 0 24 24" + aria-hidden="true" + > + <path d="M16.98 0a6.9 6.9 0 0 1 5.08 1.98A6.94 6.94 0 0 1 24 7.02v9.96c0 2.08-.68 3.87-1.98 5.13A7.14 7.14 0 0 1 16.94 24H7.06a7.06 7.06 0 0 1-5.03-1.89A6.96 6.96 0 0 1 0 16.94V7.02C0 2.8 2.8 0 7.02 0h9.96zm.05 2.23H7.06c-1.45 0-2.7.43-3.53 1.25a4.82 4.82 0 0 0-1.3 3.54v9.92c0 1.5.43 2.7 1.3 3.58a5 5 0 0 0 3.53 1.25h9.88a5 5 0 0 0 3.53-1.25 4.73 4.73 0 0 0 1.4-3.54V7.02c0-1.5-.47-2.7-1.3-3.54a4.82 4.82 0 0 0-3.54-1.25zM12 5.76c3.39 0 6.2 2.8 6.2 6.2a6.2 6.2 0 0 1-12.4 0 6.2 6.2 0 0 1 6.2-6.2zm0 2.22a3.99 3.99 0 0 0-3.97 3.97A3.99 3.99 0 0 0 12 15.92a3.99 3.99 0 0 0 3.97-3.97A3.99 3.99 0 0 0 12 7.98z" /> + </svg> + </a> + + <a + href="#" + className="bg-white p-3 rounded-full hover:bg-purple-600 hover:text-white transition-colors" + > + <svg + className="md:w-6 md:h-6 w-4 h-4" + fill="currentColor" + xmlns="http://www.w3.org/2000/svg" + viewBox="20 21 96 96" + > + <path d="M50 21h36v27H50zM20 63h30.087v27.24h36.079V63H116v54H20z" /> + </svg> + </a> + </div> + </CardContent> + </Card> + </CardContent> + <CardFooter></CardFooter> + </Card> + ); +} + +export default ContactCard; diff --git a/templates/portfolio/model1/src/components/molecules/cards/ProjectCard.tsx b/templates/portfolio/model1/src/components/molecules/cards/ProjectCard.tsx new file mode 100644 index 0000000..ac6d889 --- /dev/null +++ b/templates/portfolio/model1/src/components/molecules/cards/ProjectCard.tsx @@ -0,0 +1,55 @@ +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/atom/card"; +import { Link } from "rasengan"; +import { MoveRight } from "lucide-react"; + +export type Project = { + image: string; + categories: string[]; + title: string; + description: string; + link: string; +}; + +export function PojectCard({ + image, + categories, + title, + description, + link, +}: Project) { + return ( + <Card className="w-[90%] md:w-full mx-auto h-auto my-4 rounded-2xl bg-white shadow-sm hover:shadow-2xl transition-shadow ease-in-out duration-300"> + <CardHeader className=""> + <img + src={image} + className="h-full w-full object-cover " + alt="Image" + /> + </CardHeader> + <CardContent> + <div className="my-4 text-gray-500 text-sm"> + {categories.join(" / ")} + </div> + <CardTitle className="text-4xl my-2">{title}</CardTitle> + <CardDescription className="my-3 text-xl">{description}</CardDescription> + </CardContent> + <CardFooter> + <Link + to={link} + className="text-xl text-primary font-semibold flex justify-start space-x-2" + > + <MoveRight /> + <p>View Case Study</p> + </Link> + {/* <IconButton Variant={'link'} Content="View Case Study" size={'lg'} Icon={<ArrowRight />} className="text-lg ring justify-start bg-red-300" /> */} + </CardFooter> + </Card> + ); +} diff --git a/templates/portfolio/model1/src/components/molecules/cards/TestimonialCard.tsx b/templates/portfolio/model1/src/components/molecules/cards/TestimonialCard.tsx new file mode 100644 index 0000000..bbcab48 --- /dev/null +++ b/templates/portfolio/model1/src/components/molecules/cards/TestimonialCard.tsx @@ -0,0 +1,46 @@ +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, +} from "@/components/atom/card"; +import { Testimonial } from "@/entities/Testimonial"; +import { cn } from "@/lib/utils"; + + +export function TestimonialCard({ + image, + quote, + author, + position, + company, + className +}: Testimonial) { + return ( + <Card className="w-full h-auto lg:my-4 rounded-2xl bg-transparent shadow-none border-none lg:mt-16"> + <CardHeader className='-mb-16'> + <img + src={image} + className={`h-24 w-24 rounded-full mx-auto ${className && className?.length > 5 ? 'bg-white opacity-50': ''}`} + alt="Image" + /> + </CardHeader> + <div className={cn('rounded-2xl bg-white shadow-none border-none hover:shadow-2xl hover:shadow-slate-300/20 transition-shadow ease-in-out duration-300 pt-12' + )}> + <CardContent className={`${className && className?.length > 5 ? 'bg-white opacity-50': ''}`}> + <CardDescription className="my-3 lg:text-xl text-md text-center"> + {quote} + </CardDescription> + </CardContent> + <CardFooter className={`flex-col space-y-2 ${className && className?.length > 5 ? 'bg-white opacity-50': ''}`} > + <p>{author}</p> + <p className="text-slate-500 text-sm"> + {position} of <span className="text-black text-lg">{company}</span> + </p> + {/* <IconButton Variant={'link'} Content="View Case Study" size={'lg'} Icon={<ArrowRight />} className="text-lg ring justify-start bg-red-300" /> */} + </CardFooter> + </div> + </Card> + ); +} diff --git a/templates/portfolio/model1/src/components/molecules/caroussels/BrandSlide.tsx b/templates/portfolio/model1/src/components/molecules/caroussels/BrandSlide.tsx new file mode 100644 index 0000000..48399b3 --- /dev/null +++ b/templates/portfolio/model1/src/components/molecules/caroussels/BrandSlide.tsx @@ -0,0 +1,58 @@ +import logo1 from "../../../assets/logos/l3.png"; +import logo2 from "../../../assets/logos/l2.png"; +import logo3 from "../../../assets/logos/l1.svg"; +import logo4 from "../../../assets/logos/l4.png"; +import logo5 from "../../../assets/logos/l5.png"; +import logo6 from "../../../assets/logos/l6.png"; +import logo7 from "../../../assets/logos/l7.png"; + +const Br: { src: string; alt: string }[] = [ + { src: logo1, alt: "logo1" }, + { src: logo2, alt: "logo2" }, + { src: logo3, alt: "logo3" }, + { src: logo4, alt: "logo4" }, + { src: logo5, alt: "logo5" }, + { src: logo6, alt: "logo6" }, + { src: logo7, alt: "logo7" }, +]; +const BrandSlide = () => { + return ( + <div className="group/brands flex rounded-3xl w-full mx-auto overflow-hidden"> + {/* <div className="text-red-500 duration-300 ease-in-out hover:text-green-500 bg-blue-500 ring"> + <svg + width="90" + height="22" + viewBox="0 0 90 22" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M27.5052 8.78636C28.5349 8.78636 29.3696 7.95664 29.3696 6.93329C29.3696 5.90977 28.5349 5.08023 27.5052 5.08023C26.4756 5.08023 25.6409 5.90977 25.6409 6.93329C25.6409 7.95664 26.4756 8.78636 27.5052 8.78636V8.78636ZM89.0333 15.1176C88.7497 14.9195 88.5308 14.8866 88.3491 15.2715C85.2179 22.0104 79.9412 18.6476 80.4653 18.9435C81.6358 18.4115 84.7141 15.9584 84.2488 12.5711C83.9662 10.501 82.1782 9.58272 80.2803 9.9115C76.9674 10.4854 75.7486 14.0361 76.3691 17.1797C76.4777 17.7196 76.6717 18.1648 76.8655 18.601C73.1217 21.6261 71.635 15.8929 71.4663 15.2077C71.4596 15.1711 74.357 12.7713 75.1628 7.0529C76.0075 1.05964 74.0834 -0.0316248 72.1159 0.00242285C68.4751 0.0654546 67.4913 7.6242 68.813 13.9239C68.7023 13.9525 68.1871 14.2361 67.3593 14.2678C66.7637 12.4054 64.2184 10.7728 63.5523 11.4019C61.8851 12.9756 63.9566 16.0523 65.4142 16.2936C64.5386 21.6523 59.0628 20.3252 60.0821 13.6115C61.8653 10.3211 63.2214 5.42856 62.9795 2.47498C62.8937 1.42928 62.1157 0.0282641 60.3561 0.0977562C56.9716 0.230804 56.6037 7.79164 57.0005 13.1579C56.9808 13.0257 56.7924 13.8099 55.4055 14.1998C55.0774 12.3903 52.1455 10.5741 51.4553 11.4473C50.1632 13.0816 52.4024 15.9955 53.463 16.1988C52.5874 21.5574 47.1118 20.2302 48.1311 13.5165C49.9142 10.2263 51.2702 5.33375 51.0283 2.38017C50.9425 1.3343 50.1646 -0.06672 48.4049 0.00259745C45.0204 0.13582 44.6525 7.69666 45.0493 13.0629C45.0294 12.9286 44.8366 13.7386 43.3931 14.1221C43.3448 11.7745 40.4021 10.6981 39.6952 11.4471C38.4354 12.7823 39.9838 15.5218 41.4162 16.1988C40.5406 21.5574 35.065 20.2302 36.0843 13.5165C37.8675 10.2263 39.2236 5.33375 38.9815 2.38017C38.8959 1.3343 38.1179 -0.06672 36.3581 0.00259745C32.9738 0.13582 32.7015 8.07677 33.0982 13.4428C31.9835 18.1887 28.2452 24.1155 28.7309 12.243C28.7788 11.4101 28.8312 11.0939 28.4133 10.7821C28.1002 10.5397 27.3882 10.6564 26.999 10.666C26.526 10.6848 26.4074 10.9598 26.3028 11.3755C26.0593 12.449 26.0155 13.4896 25.9808 14.9095C25.9579 15.5737 25.9043 15.8836 25.6469 16.7893C25.3898 17.6948 23.9231 19.3498 23.1201 19.0731C22.0061 18.6925 22.3716 15.5674 22.5803 13.4203C22.7543 11.7235 22.1973 10.9616 20.7701 10.6845C19.9346 10.5114 19.427 10.538 18.5568 10.2654C17.734 10.0077 17.5479 8.46107 15.7928 8.9765C14.8329 9.25866 15.45 11.2797 15.2193 12.7776C14.0851 20.146 11.7251 20.3484 10.6302 16.769C15.5613 4.76839 12.0566 0.0373435 10.0052 0.0373435C7.86849 0.0373435 5.42606 1.49982 6.46031 10.8572C5.95742 10.7114 5.80279 10.6328 5.25228 10.6328C2.1388 10.6328 0.0175781 13.1338 0.0175781 16.219C0.0175781 19.3043 2.13898 21.8055 5.25245 21.8055C7.09042 21.8055 8.38087 20.9749 9.35819 19.69C9.99586 20.5974 10.7723 21.8194 12.1923 21.7644C16.4247 21.6007 17.6556 12.9737 17.8009 12.4925C18.2534 12.5618 18.6814 12.6929 19.0993 12.7622C19.7954 12.8661 19.846 13.1399 19.8302 13.8357C19.6457 19.7031 20.7353 21.7574 23.2069 21.7574C24.584 21.7574 25.8114 20.413 26.6569 19.4516C27.2884 20.7468 28.2947 21.7178 29.6447 21.7573C32.916 21.8381 34.1685 16.6571 34.0543 17.3389C33.9647 17.8739 35.1156 21.7281 38.4833 21.7421C42.655 21.7595 43.4304 17.201 43.5228 16.4375C43.5344 16.2856 43.5395 16.3013 43.5228 16.4375L43.5197 16.4837C44.844 16.2389 45.5274 15.5334 45.5274 15.5334C45.5274 15.5334 46.5908 21.813 50.53 21.7423C54.6206 21.6686 55.392 17.5479 55.4932 16.7444C55.5065 16.5538 55.5144 16.5761 55.4932 16.7444C55.4926 16.7523 55.4921 16.7601 55.4916 16.768C57.0648 16.1993 57.4786 15.6285 57.4786 15.6285C57.4786 15.6285 58.3238 21.7833 62.4812 21.8371C66.1859 21.8853 67.5589 18.1154 67.567 16.5375C68.1919 16.5441 69.3477 16.1691 69.3206 16.1478C69.3206 16.1478 70.6777 21.5291 74.4673 21.8055C76.2466 21.9352 77.5813 20.8106 78.3422 20.2976C80.1302 21.7365 86.0843 23.5744 89.8439 17.2406C90.3745 16.3317 89.2336 15.2578 89.0333 15.1176V15.1176ZM5.10222 19.7162C3.28569 19.7162 2.12088 18.0471 2.12088 16.2475C2.12088 14.448 3.1901 12.779 5.00663 12.779C5.82405 12.779 6.2788 12.8684 6.91541 13.4186C7.03086 13.8706 7.35804 14.9134 7.51723 15.3869C7.73055 16.0205 7.98428 16.5599 8.24012 17.1469C7.87464 18.6525 6.67644 19.7162 5.10222 19.7162V19.7162ZM9.52881 13.4715C9.45325 13.3519 9.46907 13.4254 9.38455 13.3124C9.05157 12.4123 8.40986 10.4034 8.33554 8.12147C8.25154 5.54014 8.6845 2.51444 9.96089 2.51444C10.8258 2.51444 11.7449 8.6465 9.52863 13.4715H9.52881ZM35.1059 10.7819C34.9011 9.2501 34.8903 2.42137 36.5401 2.60942C37.451 2.97609 35.9625 9.41982 35.1059 10.7819ZM47.1527 10.7819C46.9478 9.2501 46.9371 2.42137 48.5869 2.60942C49.4978 2.97609 48.0093 9.41982 47.1527 10.7819ZM59.1039 10.8771C58.8989 9.34509 58.8883 2.51636 60.5379 2.70441C61.4488 3.07107 59.9604 9.51498 59.1039 10.8771ZM72.2979 2.20976C73.8063 2.05436 73.7441 8.59953 70.7165 12.7317C70.3261 11.2381 69.7274 2.72256 72.2979 2.20958V2.20976ZM78.6377 16.2936C78.1533 13.8619 79.4051 12.2648 80.6955 12.0897C81.1466 12.0181 81.8002 12.3085 81.9306 12.8513C82.145 13.8743 81.8995 15.3918 79.0113 17.3171C79.0155 17.3335 78.7458 16.8352 78.6379 16.2936H78.6377Z" + fill="currentColor" + /> + </svg> + </div> */} + + <div + className={`group-hover/brands:paused flex animate-slide items-center gap-16 md:gap-20 xl:gap-24 py-6 shrink-0 w-[calc(2*var(5)*(theme(gap.16)+128px))] md:w-[calc(2*var(5)*(theme(gap.20)+144px))] lg:w-[calc(2*var(5)*(theme(gap.20)+160px))] xl:w-[calc(2*var(5)*(theme(gap.24)+192px))]`} + > + {Br.map((elmt) => ( + <div + key={Number(elmt.alt) + 10} + className="group p-6 bg-white rounded-lg px-12 relative duration-200 ease-in-out hover:grayscale-0 grayscale hover:drop-shadow-xl content-none" + > + <div className="absolute top-0 left-0 w-full h-full duration-200 ease-in-out hover:bg-gray-100/0 rounded-lg content-none"></div> + <img + src={elmt.src} + alt="logo" + loading="lazy" + className="aspect-auto object-contain w-32 md:w-40 lg:w-40 xl:w-40 h-12" + /> + </div> + ))} + </div> + </div> + ); +}; + +export default BrandSlide; diff --git a/templates/portfolio/model1/src/components/molecules/navigators/Navigation.tsx b/templates/portfolio/model1/src/components/molecules/navigators/Navigation.tsx new file mode 100644 index 0000000..3389044 --- /dev/null +++ b/templates/portfolio/model1/src/components/molecules/navigators/Navigation.tsx @@ -0,0 +1,166 @@ +import { useState } from "react"; +import { AnimatePresence, motion } from "framer-motion"; +import { Mail, XIcon } from "lucide-react"; +import { useNavigationContext } from "@/hooks/guards/useNavigationContext"; +import { IconButton } from "../buttons/IconButton"; + +const firstTextVariant = { + initial: { + y: 0, + }, + hover: { + y: -20, + transition: { + duration: 1.125, + ease: [0.19, 1, 0.22, 1], + }, + }, + animate: { + y: 0, + transition: { + duration: 1.125, + ease: [0.19, 1, 0.22, 1], + }, + }, +}; + +const navItemVariant = { + hidden: { + opacity: 0, + x: 50, + }, + visible: { + opacity: 1, + x: 0, + transition: { + duration: 0.5, + ease: "easeOut", + }, + }, +}; + +const Navigation = () => { + const [elementFocused, setElementFocused] = useState<number | null>(null); + const { navlinks, isActive, setIsActive } = useNavigationContext(); + + const handleHoverButton = (index: number | null) => { + setElementFocused(index); + }; + + return ( + <> + <ul className="hidden lg:flex w-fit rounded-full items-center gap-2"> + {navlinks.map((elmt, index) => ( + <motion.li + key={elmt.label} + initial="hidden" + whileHover={"hover"} + animate="visible" + variants={navItemVariant} + onMouseEnter={() => handleHoverButton(index)} + onMouseLeave={() => { + handleHoverButton(null); + }} + className="relative z-10 whitespace-nowrap cursor-pointer py-1.5 px-3 text-xs md:px-4 md:py-2 md:text-base text-black/60 duration-300 ease-in-out hover:text-black/90" + > + <div className="overflow-hidden relative"> + <motion.a variants={firstTextVariant} href={elmt.href}> + {elmt.label} + </motion.a> + </div> + <AnimatePresence> + {elementFocused === index && ( + <> + <motion.div + className="absolute bottom-0 right-0 left-0 rounded-full mx-auto w-10/12 h-1 bg-gradient-to-l from-purple-500 to-slate-800 -z-10 content-none text-red-600 font-bold text-blackf" + animate={{ scale: 1 }} + exit={{ scale: 0.9 }} + initial={{ scale: 0.95 }} + layout={true} + layoutId="focused-element" + transition={{ duration: 0.2 }} + /> + </> + )} + </AnimatePresence> + </motion.li> + ))} + <IconButton + Icon={<Mail />} + Content="Send Message" + Variant={"large"} + size={"lg"} + /> + </ul> + + {/* Mobile Navigation */} + <AnimatePresence> + {isActive && ( + <> + <motion.div + initial={{ opacity: 0, y: -20 }} + animate={{ opacity: 1, y: 0 }} + exit={{ opacity: 0, y: -20 }} + transition={{ duration: 0.3 }} + className="fixed inset-0 z-50 flex flex-col items-center justify-start pt-16 bg-white/50 lg:hidden backdrop-blur-2xl" + > + <motion.div + className="rounded-full py-1 px-2 text-[#B9FD50] place-content-center transition-all duration-75 ease-in-out hover:text-purple-500 hover:bg-purple-500 mb-5" + onClick={() => setIsActive(!isActive)} + tabIndex={0} + role="button" + > + <span className="sr-only">Close Menu</span> + <XIcon className="size-12 text-purple-500 border-none duration-300 ease-in hover:border-purple-500 hover:bg-purple-500 hover:text-white rounded-full p-2" /> + </motion.div> + <ul className="flex flex-col items-center gap-4"> + {navlinks.map((elmt, index) => ( + <motion.li + key={elmt.label} + initial="initial" + whileHover={"hover"} + animate="animate" + onMouseEnter={() => handleHoverButton(index)} + onMouseLeave={() => { + handleHoverButton(null); + }} + className="relative z-10 whitespace-nowrap cursor-pointer py-1.5 px-3 text-base text-black/60 duration-300 ease-in-out hover:text-black/90" + > + <div className="overflow-hidden relative"> + <motion.a variants={firstTextVariant} href={elmt.href}> + {elmt.label} + </motion.a> + </div> + <AnimatePresence> + {elementFocused === index && ( + <> + <motion.div + className="absolute bottom-0 right-0 bottom-0 left-0 rounded-full mx-auto w-10/12 h-1 bg-black -z-10 content-none text-red-600 font-bold text-black" + animate={{ scale: 1 }} + exit={{ scale: 0.9 }} + initial={{ scale: 0.95 }} + layout={true} + layoutId="focused-element" + transition={{ duration: 0.2 }} + /> + </> + )} + </AnimatePresence> + </motion.li> + ))} + <IconButton + Icon={<Mail />} + Content="Send Message" + Variant={"large"} + size={"lg"} + /> + </ul> + </motion.div> + </> + )} + </AnimatePresence> + </> + ); +}; + +export default Navigation; diff --git a/templates/portfolio/model1/src/components/organism/Bio.tsx b/templates/portfolio/model1/src/components/organism/Bio.tsx new file mode 100644 index 0000000..7038248 --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/Bio.tsx @@ -0,0 +1,130 @@ +import bio from "@/assets/bio.png"; +import socialMedia from "@/assets/sm.png"; + +import { Badge } from "@/components/atom/badge"; +import { Button } from "@/components/atom/button"; +import { Download } from "lucide-react"; + +const Bio = () => { + return ( + <div className=" mx-auto py-16 container" id="about"> + <div className="grid gap-0 md:grid-cols-5 lg:grid-cols-5 lg:gap-7 md:gap-7 gap-y-7 items-center"> + <div className="relative w-full mx-auto h-full col-span-3"> + <div className="inset-0 relative overflow-hidden h-full w-full px-3"> + <div className="absolute z-99 lg:bottom-12 md:bottom-64 bottom-6 lg:left-32 md:left-32 left-24 w-4/5"> + <Follow /> + </div> + <img + src={bio} + alt="Professional portrait" + className="h-full w-full object-contain" + /> + </div> + </div> + + <div className="space-y-6 col-span-2 lg:text-start md:text-start text-center flex flex-col lg:items-start md:items-start items-center mt-5 relative"> + <div className="flex flex-wrap lg:justify-start md:justify-start justify-center space-x-3 lg:text-lg md:text-md text-xs"> + <Badge variant="designer" className="p-0"> + 🔥 Designer + </Badge> + <Badge variant="instructor">👨🏫 Instructor</Badge> + <Badge variant="podcaster">🎙️ Podcaster</Badge> + </div> + + {/* <div className="overflow-hidden ring"> */} + <div className="absolute lg:inline hidden z-0 -right-52 rounded-full blur-container blur-2xl w-96 h-96 bg-blue-50/70"></div> + {/* </div> */} + + <h1 className="sticky z-10 text-3xl md:text-4xl font-semibold text-gray-900 w-11/12"> + I'm a Professional UI/UX Designer Based on Tokyo. + </h1> + + <div className="sticky z-10 space-y-4 text-gray-600 lg:text-lg md:text-xl text-sm leading-normal w-11/12"> + <p className="relative"> + Aliquam interdum vehicula ornare. Donec condimentum gravida purus + sit amet lobortis. + </p> + <p className="relative items-center"> + Proin a dui ac augue pulvinar malesuada. Quisque ac velit non + ligula gravida elementum a vel ex. Vivamus finibus ex in venenatis + pellentesque. Phasellus nec porta enim. Donec id purus id est + efficitur pulvinar. Duis nec tempus ligula. + </p> + </div> + + <Button + size="lg" + className="bg-purple-600 hover:bg-purple-700 p-9 lg:text-xl md:text-lg text-md shadow-lg shadow-purple-500/25 rounded-2xl" + > + <Download className="mr-2 h-6 w-10" /> + Download CV + </Button> + </div> + </div> + </div> + ); +}; + +export default Bio; + +const Follow = () => { + return ( + <div className="pt-6 border-[3px] border-white w-2/3 lg:p-8 md:p-6 p-4 rounded-xl bg-white/60 backdrop-blur-2xl"> + <div className="mb-3 lg:text-xl md:text-md text-sm text-gray-600"> + 🌎 Follow me social media + </div> + <img src={socialMedia} className="w-full cursor-pointer" /> + + {/* <div className="flex gap-4"> + <Link + to="#" + className="p-2 rounded-full bg-white shadow-sm hover:shadow-md transition-shadow" + > + <Facebook className="h-5 w-5 text-blue-600" /> + </Link> + <Link + to="#" + className="p-2 rounded-full bg-white shadow-sm hover:shadow-md transition-shadow" + > + <Twitter className="h-5 w-5 text-blue-400" /> + </Link> + <Link + to="#" + className="p-2 rounded-full bg-white shadow-sm hover:shadow-md transition-shadow" + > + <Linkedin className="h-5 w-5 text-blue-700" /> + </Link> + <Link + to="#" + className="p-2 rounded-full bg-white shadow-sm hover:shadow-md transition-shadow" + > + <Instagram className="h-5 w-5 text-pink-600" /> + </Link> + <Link + to="#" + className="p-2 rounded-full bg-white shadow-sm hover:shadow-md transition-shadow" + > + <svg + viewBox="0 0 24 24" + className="h-5 w-5 text-pink-500" + fill="currentColor" + > + <path d="M12 0C5.37 0 0 5.37 0 12c0 6.63 5.37 12 12 12 6.63 0 12-5.37 12-12C24 5.37 18.63 0 12 0zm5.5 7.5c.46.46.93.93 1.39 1.39-.46.46-.93.93-1.39 1.39-.46-.46-.93-.93-1.39-1.39.46-.46.93-.93 1.39-1.39zM12 20.5c-4.69 0-8.5-3.81-8.5-8.5 0-4.69 3.81-8.5 8.5-8.5 4.69 0 8.5 3.81 8.5 8.5 0 4.69-3.81 8.5-8.5 8.5z" /> + </svg> + </Link> + <Link + to="#" + className="p-2 rounded-full bg-white shadow-sm hover:shadow-md transition-shadow" + > + <svg + viewBox="0 0 24 24" + className="h-5 w-5 text-blue-500" + fill="currentColor" + > + <path d="M18.75 9c0-5.385-4.365-9.75-9.75-9.75S-.75 3.615-.75 9c0 4.91 3.615 8.99 8.33 9.705v-6.875H5.625V9h1.955V7.03c0-1.93 1.145-2.995 2.905-2.995.845 0 1.73.15 1.73.15v1.895h-.975c-.96 0-1.26.6-1.26 1.215V9h2.145l-.345 2.23h-1.8v6.875c4.715-.715 8.33-4.795 8.33-9.705z" /> + </svg> + </Link> + </div> */} + </div> + ); +}; diff --git a/templates/portfolio/model1/src/components/organism/Blog.tsx b/templates/portfolio/model1/src/components/organism/Blog.tsx new file mode 100644 index 0000000..3a1a6c1 --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/Blog.tsx @@ -0,0 +1,102 @@ +import { ArrowRight, Calendar, Notebook } from 'lucide-react' +import { Card, CardContent, CardFooter } from "@/components/atom/card" +import Image from '@rasenganjs/image' +import post1 from '@/assets/article/article1.png' +import post2 from '@/assets/article/article2.png' +import post3 from '@/assets/article/article3.png' + +interface Article { + id: number + title: string + description: string + date: string + readTime: string + image: string +} + +const articles: Article[] = [ + { + id: 1, + title: "Duis magna risus, convallis vel purus eu, sollicidin volutpat velit.", + description: "Praesent turpis quam, dapibus id diam a, cursus lobortis mi. Praesent nec lorem eget nisi sodales vehicula etiam sagittis dapibus.", + date: "17 Oct, 2020", + readTime: "5 min read", + image: post1 + }, + { + id: 2, + title: "Duis magna risus, convallis vel purus eu, sollicidin volutpat velit.", + description: "Praesent turpis quam, dapibus id diam a, cursus lobortis mi. Praesent nec lorem eget nisi sodales vehicula etiam sagittis dapibus.", + date: "24 May, 2020", + readTime: "5 min read", + image: post2 + }, + { + id: 3, + title: "Duis magna risus, convallis vel purus eu, sollicidin volutpat velit.", + description: "Praesent turpis quam, dapibus id diam a, cursus lobortis mi. Praesent nec lorem eget nisi sodales vehicula etiam sagittis dapibus.", + date: "1 Feb, 2020", + readTime: "5 min read", + image: post3 + } +] + +export default function Blog() { + return ( + <section className="py-16 px-4 bg-gradient-to-b from-slate-500/10 to-transparent" id='article'> + <div className="md:max-w-5xl lg:max-w-7xl max-w-md mx-auto"> + <div className="text-center mb-12"> + <h2 className="text-3xl md:text-4xl font-bold text-slate-900 mb-4"> + Latest Articles + </h2> + <p className="text-slate-600 max-w-2xl mx-auto text-xl"> + Nam malesuada est elementum nibh tristique, non ornare lacus mollis. Sed lectus nulla, ultrices in gravida in. + </p> + </div> + + <div className="grid md:grid-cols-2 lg:grid-cols-3 gap-5"> + {articles.map((article) => ( + <Card key={article.id} className="shadow-none bg-white border-none overflow-hidden hover:shadow-xl duration-300 ease-in transition-shadow pt-5"> + <div className="aspect-video relative"> + <Image + src={article.image} + alt={article.title} + className="object-cover mx-auto" + /> + </div> + + <CardContent className="p-6"> + <div className="flex items-center gap-4 text-sm text-slate-600 mb-4"> + <div className="flex items-center gap-1"> + <Calendar className="w-4 h-4 text-purple-500" /> + <span>{article.date}</span> + </div> + <div className="flex items-center gap-1"> + <Notebook className="w-4 h-4 text-purple-500" /> + <span>{article.readTime}</span> + </div> + </div> + + <h3 className="text-xl font-semibold text-slate-900 mb-3 line-clamp-2"> + {article.title} + </h3> + + <p className="text-slate-600 text-sm line-clamp-3"> + {article.description} + </p> + </CardContent> + + <CardFooter className="px-6"> + <button className="inline-flex items-center gap-2 text-purple-600 hover:text-purple-700 font-medium transition-colors border-2 border-purple-600/20 ease-out duration-300 hover:border-purple-600 p-3 px-5 rounded-lg"> + Read More + <ArrowRight className="w-4 h-4" /> + </button> + </CardFooter> + </Card> + ))} + </div> + </div> + </section> + ) +} + diff --git a/templates/portfolio/model1/src/components/organism/CallToAction.tsx b/templates/portfolio/model1/src/components/organism/CallToAction.tsx new file mode 100644 index 0000000..b356365 --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/CallToAction.tsx @@ -0,0 +1,41 @@ +import { MoveRightIcon } from 'lucide-react' +// import Image from '@rasenganjs/image' + +export default function CallToAction() { + return ( + <div className="relative lg:h-[650px] h-[550px] flex items-center overflow-hidden bg-banner bg-center"> + {/* Background Image */} + <div className="absolute inset-0 z-0 lg:h-[650px] h-[550px]"> + {/* <img + src={Banner} + alt="Background" + // fill + className="object-cover -mt-44 w-full ring h-[900px] md:h-[650px]" + // priority + /> */} + <div className="absolute inset-0 bg-gradient-to-l from-transparent from-10% via-slate-900/40 via-30% to-slate-900/90 to-60%" /> + </div> + + {/* Content */} + <div className="container mx-auto px-4 relative z-10"> + <div className="max-w-3xl"> + <h1 className="text-4xl md:text-5xl lg:text-5xl font-bold text-white mb-6"> + Have a project idea in mind. + <br /> + Get in touch and let's chat! + </h1> + + <p className="text-lg md:text-2xl text-slate-200 mb-8"> + I am taking on new projects. Waiting to hear about new projects, so if you'd like to chat please get in touch. + </p> + + <button className="inline-flex items-center gap-2 bg-yellow-400 hover:bg-yellow-500 text-slate-900 px-9 py-6 rounded-lg font-medium transition-colors"> + Let's Work Together + <MoveRightIcon className="w-5 h-5" color='white' /> + </button> + </div> + </div> + </div> + ) +} + diff --git a/templates/portfolio/model1/src/components/organism/Contact.tsx b/templates/portfolio/model1/src/components/organism/Contact.tsx new file mode 100644 index 0000000..99deaf7 --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/Contact.tsx @@ -0,0 +1,15 @@ +import ContactCard from "../molecules/cards/ContactCard"; + +export default function Contact() { + return ( + <> + <div className="bg-gradient-to-b from-white from-70% to-[#132238] to-10% p-10 flex mx-auto overflow-hidden"> + <div className="absolute lg:inline hidden z-0 left-40 rounded-full blur-container blur-2xl w-96 h-96 bg-green-500/10"></div> + + <div className="sticky mx-auto z-99"> + <ContactCard /> + </div> + </div> + </> + ); +} diff --git a/templates/portfolio/model1/src/components/organism/Footer.tsx b/templates/portfolio/model1/src/components/organism/Footer.tsx new file mode 100644 index 0000000..471e3cf --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/Footer.tsx @@ -0,0 +1,103 @@ +import Image from "@rasenganjs/image"; +import logo from "@/assets/Favicon.png"; +import { useState } from "react"; +import { AnimatePresence, motion } from "framer-motion"; +import { useNavigationContext } from "@/hooks/guards/useNavigationContext"; + + +const firstTextVariant = { + initial: { + y: 0, + }, + hover: { + y: -20, + transition: { + duration: 1.125, + ease: [0.19, 1, 0.22, 1], + }, + }, + animate: { + y: 0, + transition: { + duration: 1.125, + ease: [0.19, 1, 0.22, 1], + }, + }, +}; + +export default function Footer() { + return ( + <> + <div className="w-screen h-32 bg-[#132238] text-white"> + <nav className="flex w-full justify-around items-center py-4 px-2 container mx-auto"> + <div className="flex items-stqrt gap-2"> + <Image src={logo} alt="Rasengan logo" width={56} height={56} /> + <div className="mt-0.5"> + <p className="font-bold">Hano Kurou</p> + <p className="uppercase opacity-50 mt-2">UI/UX Designer</p> + </div> + </div> + <FooterNavigation /> + <div className="gap-4 flex items-center text-sm text-slate-300"> + © {new Date(Date.now()).getFullYear()} <i>Rasengan Labs</i> + </div> + </nav> + </div> + </> + ); +} + + +export const FooterNavigation = () => { + const [elementFocused, setElementFocused] = useState<number | null>(null); + const { navlinks } = useNavigationContext(); + + // const { isActive, setIsActive } = useNavigationContext(); + + const handleHoverButton = (index: number | null) => { + setElementFocused(index); + }; + + return ( + <ul className="hidden lg:flex w-fit rounded-full items-center gap-2"> + {navlinks.slice(0, 4).map((elmt, index) => ( + <motion.li + key={elmt.label} + initial="initial" + whileHover={"hover"} + animate="animate" + // variants={backgroundVariant} + onMouseEnter={() => handleHoverButton(index)} + onMouseLeave={() => { + handleHoverButton(null); + }} + className="relative z-10 whitespace-nowrap cursor-pointer py-1.5 px-3 text-xs md:px-4 md:py-2 md:text-base text-white/60 duration-300 ease-in-out hover:text-white/90" + > + <div className="overflow-hidden relative"> + <motion.a + variants={firstTextVariant} + href={elmt.href} + > + {elmt.label} + </motion.a> + </div> + <AnimatePresence> + {elementFocused === index && ( + <> + <motion.div + className="absolute bottom-0 right-0 bottom-0 left-0 rounded-full mx-auto w-10/12 h-1 bg-white -z-10 content-none font-bold text-black" + animate={{ scale: 1 }} + exit={{scale: 0.9 }} + initial={{ scale: 0.95 }} + layout={true} + layoutId="focused-element" + transition={{ duration: 0.2 }} + /> + </> + )} + </AnimatePresence> + </motion.li> + ))} + </ul> + ); + }; \ No newline at end of file diff --git a/templates/portfolio/model1/src/components/organism/HeroSection.tsx b/templates/portfolio/model1/src/components/organism/HeroSection.tsx new file mode 100644 index 0000000..8d1708b --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/HeroSection.tsx @@ -0,0 +1,56 @@ +// import Image from "@rasenganjs/image"; +import hero from "@/assets/heroImg.png"; +import { DownloadIcon, MoveRightIcon } from "lucide-react"; +import BrandSlide from "../molecules/caroussels/BrandSlide"; +import { Button } from "../atom/Button"; + + +const HeroSection = () => { + return ( + <div className="mx-auto xl:h-[1056px] lg:h-[920px] md:h-[750px] h-[1160px] bg-hero-bg relative bg-no-repeat bg-center overflow-hidden"> + <div className="container mx-auto md:flex justify-evenly items-center h-full"> + <div className="lg:w-1/2 w-full px-6 "> + <p className="lg:text-6xl md:text-5xl text-[40px] font-semibold md:-mt-52 mt-6"> + 👋 Hey There, I’m <br /> + <span className="text-primary underline">Hano kurōu</span> + </p> + <p className="text-lg mt-8 font-light"> + Product Designer and UI/UX in Tokyo. I’m specialize in User + Experience Design, User Research, Product Design, and User + Interface Design. + </p> + <div className="flex lg:gap-x-4 md:gap-x-4 gap-x-2 mt-8"> + <Button + size="lg" + className="bg-purple-600 duration-300 ease-out hover:bg-purple-700 lg:p-8 md:p-8 p-7 px-5 rounded-2xl text-md shadow-none" + > + View Projects + <MoveRightIcon className="mr-2 h-6 w-10" /> + </Button> + <Button + size="lg" + className="bg-purple-100 text-purple-500 duration-300 ease-out hover:bg-purple-500 hover:text-purple-100 lg:p-8 md:p-8 p-7 px-5 rounded-2xl text-md shadow-none" + > + Download CV + <DownloadIcon className="mr-2 h-6 w-10" /> + </Button> + </div> + </div> + <div className="lg:w-1/2 w-full flex m-0 items-center justify-center lg:h-screen "> + <div className="content-none h-full w-[780px] max-h-[800px] absolute top-32 right-52 items-center"></div> + <img src={hero} alt="Hero" height="full" className="w-[652px] mt-32" /> + </div> + </div> + <div className="h-64 bg-white/30 backdrop-blur-2xl border-[3px] border-t-white/80 absolute bottom-0 content-none w-screen"> + <div className="container mx-auto"> + <p className="lg:w-1/3 md:w-1/2 font-bold text-2xl text-start mt-4 px-4"> + I work with over 279+ happy <br /> clients all over the world. + </p> + <BrandSlide /> + </div> + </div> + </div> + ); +}; + +export default HeroSection; diff --git a/templates/portfolio/model1/src/components/organism/HonorAwards.tsx b/templates/portfolio/model1/src/components/organism/HonorAwards.tsx new file mode 100644 index 0000000..8168c5d --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/HonorAwards.tsx @@ -0,0 +1,41 @@ +import useHonor from "@/hooks/useHonor"; +import { Title } from "../molecules/Titles"; + + + +const HonorAwards = () => { + + const {honors} = useHonor(); + + return ( + <> + <hr className="h-0.5 bg-green-100/90" /> + + <div className="absolute ring z-0 lg:-translate-x-52 -translate-x-52 rounded-full blur-container blur-2xl w-96 h-96 bg-green-100/70"></div> + <Title + children={"Honor & Awards"} + subtitle={ + "Proin a dui ac augue pulvinar malesuada. Quisque ac velit non ligula gravida elementum a vel ex." + } + alignment={"left"} + className="max-w-7xl mx-auto sticky lg:px-0 px-6 lg:mt-28 md:mt-20 mt-10" + /> + <div className="grid md:grid-cols-2 lg:grid-cols-3 gap-5 max-w-7xl mx-auto mt-20 lg:mb-28 md:mb-20 mb-10"> + {honors.map((honor, index) => ( + <div + key={index} + className="w-full h-full p-8 bg-white rounded-lg shadow-none rounded-4xl border-none transition ease-out duration-300 hover:shadow-2xl hover:shadow-purple-200/80"> + <img src={honor.image} alt="" className="-mt-12 mb-9" /> + <p className="font-medium text-2xl"> + {honor.title} + </p> + <p className="font-light text-md mt-3"> + {honor.description} + </p> + </div>))} + </div> + </> + ); +}; + +export default HonorAwards; diff --git a/templates/portfolio/model1/src/components/organism/Navbar.tsx b/templates/portfolio/model1/src/components/organism/Navbar.tsx new file mode 100644 index 0000000..3fd675d --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/Navbar.tsx @@ -0,0 +1,35 @@ +import Navigation from "../molecules/navigators/Navigation"; +import { useNavigationContext } from "@/hooks/guards/useNavigationContext"; +import Image from "@rasenganjs/image"; +import logo from "@/assets/Favicon.png"; +import { MenuIcon } from "lucide-react"; + +const Navbar = () => { + const { isActive, setIsActive } = useNavigationContext(); + + return ( + <nav className="flex w-full justify-between items-center py-4 px-2 container mx-auto"> + <div className="flex items-start gap-2"> + <Image src={logo} alt="Rasengan logo" width={56} height={56} /> + <div className="mt-0.5"> + <p className="font-bold">Hano Kurou</p> + <p className="uppercase opacity-50 mt-2">UI/UX Designer</p> + </div> + </div> + <Navigation /> + <div className="gap-4 flex items-center lg:hidden"> + <div + onClick={() => setIsActive(!isActive)} + className="rounded-[8px] p-1 lg:hidden" + tabIndex={0} + role="button" + > + <span className="sr-only">mobile Menu</span> + <MenuIcon className="size-8 text-purple-500" /> + </div> + </div> + </nav> + ); +}; + +export default Navbar; \ No newline at end of file diff --git a/templates/portfolio/model1/src/components/organism/Projects.tsx b/templates/portfolio/model1/src/components/organism/Projects.tsx new file mode 100644 index 0000000..a1202d2 --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/Projects.tsx @@ -0,0 +1,74 @@ +/** + * A React component that displays a carousel of recent projects. + * + * The component uses the `useProject` hook to fetch the project data, and then renders a carousel with the project cards. + * The carousel is implemented using the `Carousel` component from the `@/components/atom/carousel` module. + * The component also includes navigation buttons to move between the carousel items. + */ +import useProject from "@/hooks/useProject"; +import { PojectCard } from "../molecules/cards/ProjectCard"; +import { Title } from "../molecules/Titles"; +import { useState } from "react"; +import { CarouselApi } from "@/components/atom/carousel"; + +import { + Carousel, + CarouselContent, + CarouselItem, + CarouselNext, + CarouselPrevious, +} from "@/components/atom/carousel"; + +const Projects = () => { + const { projects } = useProject(); + + const [api, setApi] = useState<CarouselApi>(); + + { + if (!projects) { + throw new Error("No projects found"); + } else { + return ( + <> + <Title id="project" children="Recent Projects" alignment={"center"} size={"lg"} /> + + <div className="relative flex justify-end w-screen -mr-2 bg-gradient-to-t from-[#132238]/5 to-transparent lg:pb-32 md:pb-20 pb-12"> + <Carousel + setApi={setApi} + className="w-full" + opts={{ + align: "start", + loop: true, + }} + > + <CarouselContent> + {projects.map((project, index) => ( + <CarouselItem + key={index} + className="md:basis-1/2 lg:basis-1/3 ms-6 mx-3" + > + <PojectCard + image={project.image} + categories={project.categories} + title={project.title} + description={project.description} + link={project.link} + /> + </CarouselItem> + ))} + </CarouselContent> + + <div className="flex items-center justify-center gap-4 lg:mt-16"> + <CarouselPrevious + className="relative inset-0 translate-y-0 h-16 w-16 rounded-full bg-white duration-300 ease-in hover:bg-purple-600 hover:border-purple-600" /> + <CarouselNext className="relative inset-0 translate-y-0 h-16 w-16 rounded-full bg-white duration-300 ease-in hover:bg-purple-600 hover:border-purple-600" /> + </div> + </Carousel> + </div> + </> + ); + } + } +}; + +export default Projects; diff --git a/templates/portfolio/model1/src/components/organism/Service.tsx b/templates/portfolio/model1/src/components/organism/Service.tsx new file mode 100644 index 0000000..cb79771 --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/Service.tsx @@ -0,0 +1,93 @@ +import { CheckCircle, MoveRight } from 'lucide-react' +import { Card, CardContent } from "@/components/atom/card" +import { Title } from '../molecules/Titles' +import serviceImg1 from '@/assets/services/service1.png' +import serviceImg2 from '@/assets/services/service2.png' +import serviceImg3 from '@/assets/services/service3.png' + + + +export default function Service() { + const services = [ + { + title: "User Experience Design", + icon: serviceImg1, + projects: "150+", + customers: "129+", + color: 'border-green-400/40 duration-300 ease-in hover:shadow-2xl hover:shadow-green-500/40 hover:border-transparent' + }, + { + title: "Product Design", + icon: serviceImg2, + projects: "150+", + customers: "129+", + color: 'border-slate-400/40 duration-300 ease-in hover:shadow-2xl hover:shadow-slate-500/40 hover:border-transparent' + }, + { + title: "User Interface Design", + icon: serviceImg3, + projects: "150+", + customers: "129+", + color: 'border-orange-200/40 duration-300 ease-in hover:shadow-2xl hover:shadow-orange-300/40 hover:border-transparent' + } + ] + + return ( + <div className="mx-auto px-4 lg:py-16 md:py-12 py-1 bg-gradient-to-b from-purple-100/40 to-white" id='service'> + <div className="grid lg:grid-cols-2 gap-12 items-start max-w-7xl mx-auto my-20"> + {/* Left Column */} + <div className="space-y-6"> + <div className="inline-flex items-center gap-2 bg-yellow-200 px-4 py-3 rounded-md text-sm"> + <CheckCircle className="w-4 h-4 text-green-600" /> + <span className="font-light">99.96% CLIENT SATISFACTION</span> + </div> + + {/* <h2 className="text-4xl font-bold text-slate-900 lg:text-5xl"> + Services i provide + </h2> */} + <Title + children={"Services i provide"} + size={'lg'} + className='font-medium py-2' + /> + + <div className="space-y-4 text-slate-600"> + <p> + I will help you with fingin a solution and solve your problems, We use process design to create digital product. besids that also help their business. + </p> + <p> + We use process design to create digital products. besids that also help their business + </p> + </div> + + <button className="inline-flex items-center gap-2 bg-purple-600 text-white px-8 py-6 rounded-none hover:bg-purple-700 transition-colors border-none shadow-lg shadow-purple-500/50"> + Let's Work Together + <MoveRight className="w-4 h-4" /> + </button> + </div> + + {/* Right Column */} + <div className="space-y-4 w-full"> + {services.map((service, index) => ( + <Card key={index} className='shadow-none hover:shadow-green-100/30 hover:shadow-xl lg:w-11/12 rounded-lg border-none'> + <CardContent className={`p-9 border-4 ${service.color} rounded-lg`}> + <div className="flex items-center gap-4"> + <img src={service.icon} alt="" /> + <div className="space-y-3"> + <h3 className="font-semibold text-xl text-slate-900"> + {service.title} + </h3> + <p className="text-sm text-slate-500"> + {service.projects} Projects • {service.customers} Happy Customer + </p> + </div> + </div> + </CardContent> + </Card> + ))} + </div> + </div> + </div> + ) +} + diff --git a/templates/portfolio/model1/src/components/organism/Skills.tsx b/templates/portfolio/model1/src/components/organism/Skills.tsx new file mode 100644 index 0000000..6e639fb --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/Skills.tsx @@ -0,0 +1,116 @@ +import { Search, Package, Layers, CircleUserRound } from "lucide-react"; +import { Progress } from "@/components/atom/progress"; +import skill from "@/assets/skills.png"; +import { Title } from "../molecules/Titles"; +import tool1 from "@/assets/Tools/tool1.png"; +import tool2 from "@/assets/Tools/tool2.png"; +import tool3 from "@/assets/Tools/tool3.png"; +import tool4 from "@/assets/Tools/tool4.png"; +import tool5 from "@/assets/Tools/tool5.png"; + +export default function Skills() { + const skills = [ + { + name: "User Research", + value: 95, + icon: <Search className="w-5 h-5 text-purple-500" />, + class: "text-purple-500", + bg: "bg-purple-500/40", + color: "bg-purple-500", + }, + { + name: "User Experience Design", + value: 87, + icon: <CircleUserRound className="w-5 h-5 text-blue-500" />, + class: "text-blue-500", + bg: "bg-blue-500/50", + color: "bg-blue-500", + }, + { + name: "Usability Testing", + value: 91, + icon: <Package className="w-5 h-5 text-green-500" />, + class: "text-green-500", + bg: "bg-green-500/50", + color: "bg-green-500", + }, + { + name: "Interaction Design", + value: 73, + icon: <Layers className="w-5 h-5 text-red-500" />, + class: "text-orange-600", + bg: "bg-orange-600/50", + color: "bg-orange-600", + }, + ]; + + const tools = [ + { name: "Notion", icon: tool1 }, + { name: "Figma", icon: tool2 }, + { name: "GitHub", icon: tool3 }, + { name: "Slack", icon: tool4 }, + { name: "Ps", icon: tool5 }, + ]; + + return ( + <div className="bg-gradient-to-b from-orange-100/20 to-white h-auto border-t-2 border-orange-100/50"> + <div className="lg:max-w-7xl max-w-5xl mx-auto px-4"> + <div className="flex md:flex-nowrap flex-wrap-reverse px-8 gap-y-12 gap-x-16 lg:gap-x-52 items-center"> + <div className="lg:w-1/2 md:w-1/2 w-full"> + <Title + children="My skill is my power." + subtitle="Maecenas nec sapien ac nulla eleifend ultrices. Maecenas non sagittis dui. Donec eleifend nisi id felis." + alignment={"left"} + size={"lg"} + className="md:inline lg:inline hidden space-y-4 font-light" + /> + <div className="space-y-6 w-full mt-9"> + {skills.map((skill, index) => ( + <div key={index} className="space-y-3"> + <div className="flex justify-between items-center"> + <div className="flex items-center gap-3"> + {skill.icon} + <span className="font-medium text-lg text-slate-900"> + {skill.name} + </span> + </div> + <span className={`${skill.class} text-md font-semibold`}> + {skill.value}% + </span> + </div> + <Progress + value={skill.value} + color={skill.color} + className={`h-1 ${skill.bg}`} + /> + </div> + ))} + </div> + </div> + + <div className="relative"> + <div className="absolute bottom-5 lg:-left-28 rounded-xl shadow-lg z-20 pt-6 border-[3px] border-white w-auto p-8 bg-white/80 backdrop-blur-2xl"> + <p className="text-md font-medium mb-4">🚀 Tools I Use</p> + <div className="flex gap-3"> + {tools.map((tool, index) => ( + <img + key={index} + src={tool.icon} + alt={tool.icon} + className="w-12 h-12" + /> + ))} + </div> + </div> + <div className="absolute -z-10 top-0 right-0 w-4/5 h-4/5 bg-gradient-to-br from-yellow-100 via-pink-100 to-purple-100 rounded-full blur-2xl" /> + <img + src={skill} + alt="Professional portrait" + className="relative z-10 w-full h-auto" + /> + </div> + </div> + </div> + </div> + ); +} diff --git a/templates/portfolio/model1/src/components/organism/Testimonial.tsx b/templates/portfolio/model1/src/components/organism/Testimonial.tsx new file mode 100644 index 0000000..79e47b5 --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/Testimonial.tsx @@ -0,0 +1,304 @@ +// /** +// * A React component that displays a carousel of recent projects. +// * +// * The component uses the `useProject` hook to fetch the project data, and then renders a carousel with the project cards. +// * The carousel is implemented using the `Carousel` component from the `@/components/atom/carousel` module. +// * The component also includes navigation buttons to move between the carousel items. +// */ +// import React from "react"; +// useTestimony; +// import { TestimonialCard } from "../molecules/cards/testimonialCard"; +// import { Title } from "../molecules/Titles"; +// import { useState } from "react"; +// import { CarouselApi } from "@/components/atom/carousel"; + +// import { +// Carousel, +// CarouselContent, +// CarouselItem, +// CarouselNext, +// CarouselPrevious, +// } from "@/components/atom/carousel"; +// import useTestimony from "@/hooks/useTestimony"; + +// const Projects = () => { +// const { testimonial } = useTestimony(); + +// const [api, setApi] = useState<CarouselApi>(); +// const [current, setCurrent] = React.useState(0); +// const [count, setCount] = React.useState(0); + +// React.useEffect(() => { +// if (!api) { +// return; +// } + +// setCount(api.scrollSnapList().length); +// setCurrent(api.selectedScrollSnap() + 1); + +// api.on("select", () => { +// setCurrent(api.selectedScrollSnap() + 1); +// }); +// }, [api]); + +// { +// if (!testimonial) { +// throw new Error("No projects found"); +// } else { +// return ( +// <> +// <Title children="Recent Projects" alignment={"center"} size={"lg"} /> + +// <div className="relative flex justify-end w-screen -mr-2 bg-gradient-to-t from-[#132238]/5 to-transparent pb-32"> +// <Carousel +// setApi={setApi} +// className="w-full" +// opts={{ +// align: "start", +// loop: true, +// }} +// > +// <CarouselContent> +// {testimonial.map((project, index) => ( +// <CarouselItem +// key={index} +// className="md:basis-2/2 lg:basis-3/3 ms-6 mx-3 transform transition-transform hover:scale-105 hover:-rotate-2" +// > +// <TestimonialCard +// image={project.image} +// quote={project.quote} +// company={project.company} +// author={project.author} +// position={project.position} +// /> +// </CarouselItem> +// ))} +// </CarouselContent> + +// <div className="flex items-center justify-center gap-4 mt-16"> +// <CarouselPrevious className="relative inset-0 translate-y-0 h-16 w-16 rounded-full bg-white duration-300 ease-in hover:bg-purple-600 hover:border-purple-600" /> +// <CarouselNext className="relative inset-0 translate-y-0 h-16 w-16 rounded-full bg-white duration-300 ease-in hover:bg-purple-600 hover:border-purple-600" /> +// </div> +// </Carousel> +// <div className="py-2 text-center text-sm text-muted-foreground"> +// Slide {current} of {count} +// </div> +// </div> +// </> +// ); +// } +// } +// }; + +import { TestimonialCard } from "../molecules/cards/TestimonialCard"; +import { Title } from "../molecules/Titles"; +import { useEffect, useState } from "react"; +import { CarouselApi } from "@/components/atom/carousel"; + +import { + Carousel, + CarouselContent, + CarouselItem, + CarouselNext, + CarouselPrevious, +} from "@/components/atom/carousel"; +import useTestimony from "@/hooks/useTestimony"; +import { AnimatePresence, motion } from "framer-motion"; + + +const Testimonial = () => { + const { testimonial } = useTestimony(); + + + const [api, setApi] = useState<CarouselApi>(); + const [current, setCurrent] = useState(0); + // const [count, setCount] = useState(0); + // const [currentIndex, setCurrentIndex] = useState(0); + + useEffect(() => { + if (!api) { + return; + } + + // setCount(api.scrollSnapList().length); + setCurrent(api.selectedScrollSnap() + 1); + + api.on("select", () => { + setCurrent(api.selectedScrollSnap() + 1); + }); + }, [api]); + + + if (!testimonial) { + throw new Error("No Testimonial found"); + } else { + return ( + <> + <div className="bg-purple-100/20" id="testimonial"> + <Title children="Client Testimonial" subtitle="Nam malesuada est elementum nibh tristique, non ornare lacus mollis. Sed lectus nulla, ultrices in gravida in." alignment={"center"} size={"lg"} className="pt-10 mt-5 mb-0 px-2" /> + <div className="relative flex justify-around lg:w-screen md:w-screen max-w-auto -mr-2 bg-gradient-to-t from-[#132238]/5 to-transparent lg:pb-32 md:pb-20 pb-10"> + <Carousel + setApi={setApi} + className="w-full" + opts={{ + align: "center", + loop: false, + }} + > + <CarouselContent className="flex justify-center h-auto"> + {testimonial.map((project, index) => { + const isActive = index === current + 1; + + return ( + <AnimatePresence key={index}> + <CarouselItem className={`basis-full md:basis-1/3 lg:basis-1/3 transform transition-transform ${ + isActive ? "opacity-1" : "opacity-70" + }`}> + <motion.div + initial={{scale: 0.75 }} + animate={{ + // opacity: isActive ? 1 : 0.7, + scale: isActive ? 0.92 : 0.8, + + }} + exit={{scale: 0.8 }} + transition={{ duration: 0.5 }} + // className={`basis-full md:basis-1/3 lg:basis-1/3 transform transition-transform rounded-lg`} + > + <TestimonialCard + image={project.image} + quote={project.quote} + company={project.company} + author={project.author} + position={project.position} + className={`${isActive ? "z-10" : "z-0 bg-white opacity-50"}`} + /> + </motion.div> + </CarouselItem> + </AnimatePresence> + ); + })} + </CarouselContent> + + <div className="flex items-center justify-center gap-4 lg:mt-16 md:mt-12 mt-0"> + <CarouselPrevious className="relative inset-0 translate-y-0 h-14 w-14 rounded-full bg-white duration-300 ease-in hover:bg-purple-600 border-2 border-purple-600" /> + <CarouselNext className="relative inset-0 translate-y-0 h-14 w-14 rounded-full bg-white duration-300 ease-in hover:bg-purple-600 border-2 border-purple-600" /> + </div> + </Carousel> + </div> + </div> + </> + ); + } +}; + +export default Testimonial; + + +// import React, { useState } from "react"; +// import { motion } from "framer-motion"; + +// const Projects = () => { +// const numbers = [ +// { id: 1, value: 1 }, +// { id: 2, value: 2 }, +// { id: 3, value: 3 }, +// { id: 4, value: 4 }, +// { id: 5, value: 5 }, +// ]; + +// const [currentIndex, setCurrentIndex] = useState(0); + +// const next = () => { +// setCurrentIndex((prevIndex) => (prevIndex + 1) % numbers.length); +// }; + +// const prev = () => { +// setCurrentIndex((prevIndex) => +// prevIndex === 0 ? numbers.length - 1 : prevIndex - 1 +// ); +// }; + +// return ( +// <div className="relative w-full max-w-md mx-auto"> +// <div className="flex justify-around ring bg-red-100/30 overflow-hidden"> +// <div className="h-20 w-96"> +// <motion.div +// key={numbers[currentIndex].id} +// initial={{ opacity: 1, x: 100 }} +// animate={{ opacity: 1, x: 10 , y: 10 }} +// exit={{ opacity: 1, x: -100 }} +// transition={{ duration: 0.5 }} +// className="flex justify-center items-center h-full ring" +// > +// <div> +// <span className="text-2xl font-bold opacity-0.5"> +// {numbers[currentIndex -1 ? 0 : 5 ].value} +// </span> +// </div> +// </motion.div> +// </div> +// <div className="h-20 w-96"> +// <motion.div +// key={numbers[currentIndex].id} +// initial={{ opacity: 1, x: 100 }} +// animate={{ opacity: 1, x: 10 , y: 10 }} +// exit={{ opacity: 1, x: -100 }} +// transition={{ duration: 0.5 }} +// className="flex justify-center items-center h-full ring" +// > +// <div> +// {/* <span className="text-2xl font-bold opacity-0.5"> +// {numbers[currentIndex -1 ].value} +// </span> */} +// <span className="text-4xl font-bold"> +// {numbers[currentIndex].value} +// </span> +// {/* <span className="text-2xl font-bold opacity-0.5"> +// {numbers[currentIndex + 1].value} +// </span> */} +// </div> +// </motion.div> +// </div> +// <div className="h-20 w-96"> +// <motion.div +// key={numbers[currentIndex].id} +// initial={{ opacity: 1, x: 100 }} +// animate={{ opacity: 1, x: 10 , y: 10 }} +// exit={{ opacity: 1, x: -100 }} +// transition={{ duration: 0.5 }} +// className="flex justify-center items-center h-full ring" +// > +// <div> +// {/* <span className="text-2xl font-bold opacity-0.5"> +// {numbers[currentIndex -1 ].value} +// </span> */} +// <span className="text-4xl font-bold"> +// {numbers[currentIndex].value} +// </span> +// {/* <span className="text-2xl font-bold opacity-0.5"> +// {numbers[currentIndex + 1].value} +// </span> */} +// </div> +// </motion.div> +// </div> +// </div> +// <div className="flex justify-between mt-4"> +// <button +// onClick={prev} +// className="px-4 py-2 bg-blue-500 text-white rounded-lg" +// > +// Prev +// </button> +// <button +// onClick={next} +// className="px-4 py-2 bg-blue-500 text-white rounded-lg" +// > +// Next +// </button> +// </div> +// </div> +// ); +// }; + +// export default Projects; diff --git a/templates/portfolio/model1/src/components/organism/WorkProcess.tsx b/templates/portfolio/model1/src/components/organism/WorkProcess.tsx new file mode 100644 index 0000000..a0bfd9a --- /dev/null +++ b/templates/portfolio/model1/src/components/organism/WorkProcess.tsx @@ -0,0 +1,45 @@ +import useWorkProcess from "@/hooks/useWorkProcess"; +import { Title } from "../molecules/Titles"; + +const WorkProcess = () => { + const { process } = useWorkProcess(); + return ( + <div className="mx-auto px-4 pt-16 pb-9 bg-gradient-to-b from-blue-100/40 to-white h-auto"> + <Title + children="My work process" + subtitle="Nulla ex augue, rhoncus sit amet rutrum ut, vestibulum non nisl. Etiam imperdiet quam pretium rhoncus aliquam." + alignment={"center"} + size={"lg"} + className="space-y-8 font-light md:mt-20 mt-4" + /> + + <div className="grid md:grid-cols-2 lg:grid-cols-4 gap-8 lg:max-w-7xl md:max-w-3xl max-w-md mx-auto lg:mb-32 lg:mb-24 mb-10"> + {process.map((p) => ( + <div key={process.indexOf(p)} className={`rounded-xl lg:ring-0 md:ring-0 ring ${process.indexOf(p) === 0 && 'ring-purple-500'} ${process.indexOf(p) === 1 && 'ring-blue-500'} ${process.indexOf(p) === 2 && 'ring-orange-500'} ${process.indexOf(p) === 3 && 'ring-green-500'} ${p.css}`}> + <div className="space-y-4 p-7"> + <div + className={`w-14 h-14 rounded-full ${p.css} flex items-center justify-start transition-transform group-hover:scale-110`} + > + <div className="overflow-hidden w-20 h-20 my-2 rounded-full flex justify-center mx-auto "> + <img + src={p.logo} + className={`w-auto p-3 rounded-full ${p.logoCss}`} + alt="" + /> + </div> + </div> + <div className="space-y-2"> + <h3 className="text-lg font-semibold text-slate-900"> + {process.indexOf(p) + 1}. {p.title} + </h3> + <p className="text-slate-600 text-[13.5px]">{p.description}</p> + </div> + </div> + </div> + ))} + </div> + </div> + ); +}; + +export default WorkProcess; diff --git a/templates/portfolio/model1/src/contexts/NavigationContext.tsx b/templates/portfolio/model1/src/contexts/NavigationContext.tsx new file mode 100644 index 0000000..c6d1bf3 --- /dev/null +++ b/templates/portfolio/model1/src/contexts/NavigationContext.tsx @@ -0,0 +1,12 @@ +import { createContext } from "react"; + +export type NavLink = { + label: string; + href: string; +} + +export const NavigationContext = createContext<{ + isActive: boolean, + setIsActive: React.Dispatch<React.SetStateAction<boolean>>, + navlinks: NavLink[] +} | null>(null); diff --git a/templates/portfolio/model1/src/entities/Article.ts b/templates/portfolio/model1/src/entities/Article.ts new file mode 100644 index 0000000..25f6ca8 --- /dev/null +++ b/templates/portfolio/model1/src/entities/Article.ts @@ -0,0 +1,8 @@ +export type Article = { + image:string; + date: string; + readingTime: number, + title:string; + description:string; + link:string; +} \ No newline at end of file diff --git a/templates/portfolio/model1/src/entities/Honor.ts b/templates/portfolio/model1/src/entities/Honor.ts new file mode 100644 index 0000000..3872bc3 --- /dev/null +++ b/templates/portfolio/model1/src/entities/Honor.ts @@ -0,0 +1,5 @@ +export type Honor = { + title: string; + description: string; + image: string; +}; \ No newline at end of file diff --git a/templates/portfolio/model1/src/entities/Project.ts b/templates/portfolio/model1/src/entities/Project.ts new file mode 100644 index 0000000..f750047 --- /dev/null +++ b/templates/portfolio/model1/src/entities/Project.ts @@ -0,0 +1,7 @@ +export type Project = { + image: string; + categories: string[]; + title: string; + description: string; + link: string; +} \ No newline at end of file diff --git a/templates/portfolio/model1/src/entities/Service.ts b/templates/portfolio/model1/src/entities/Service.ts new file mode 100644 index 0000000..2b909c5 --- /dev/null +++ b/templates/portfolio/model1/src/entities/Service.ts @@ -0,0 +1,6 @@ +export type Service = { + logo: string; + title: string; + description: string; + color: 'blue' | 'red' | 'none'; +} \ No newline at end of file diff --git a/templates/portfolio/model1/src/entities/Testimonial.ts b/templates/portfolio/model1/src/entities/Testimonial.ts new file mode 100644 index 0000000..15659dc --- /dev/null +++ b/templates/portfolio/model1/src/entities/Testimonial.ts @@ -0,0 +1,8 @@ +export type Testimonial = { + image:string; + quote:string; + author:string; + position:string; + company:string; + className?:string; +} \ No newline at end of file diff --git a/templates/portfolio/model1/src/entities/WorkProcess.ts b/templates/portfolio/model1/src/entities/WorkProcess.ts new file mode 100644 index 0000000..8d10090 --- /dev/null +++ b/templates/portfolio/model1/src/entities/WorkProcess.ts @@ -0,0 +1,7 @@ +export type WorkProcess = { + logo:string | any; + title:string; + description:string; + css:string; + logoCss:string; +} \ No newline at end of file diff --git a/templates/portfolio/model1/src/hooks/guards/useNavigationContext.tsx b/templates/portfolio/model1/src/hooks/guards/useNavigationContext.tsx new file mode 100644 index 0000000..c58cfbf --- /dev/null +++ b/templates/portfolio/model1/src/hooks/guards/useNavigationContext.tsx @@ -0,0 +1,12 @@ +import { NavigationContext } from "@/contexts/NavigationContext"; +import React from "react"; + +export const useNavigationContext = () =>{ + const navigationContext = React.useContext(NavigationContext) + + if (!navigationContext) { + throw new Error('NavigationContext is not available at this level'); + } + + return navigationContext; +} diff --git a/templates/portfolio/model1/src/hooks/useArticle.tsx b/templates/portfolio/model1/src/hooks/useArticle.tsx new file mode 100644 index 0000000..1ef8d2a --- /dev/null +++ b/templates/portfolio/model1/src/hooks/useArticle.tsx @@ -0,0 +1,38 @@ +import { Article } from "@/entities/Article"; +import Article1Img from '@/assets/articles/article1.png' +import Article2Img from '@/assets/articles/article2.png' +import Article3Img from '@/assets/articles/article3.png' + +const Articles : Article[] = [ + { + date: '17 Oct, 2020', + readingTime: 5, + title: "Duis magna risus, convallis vel purus eu, sollicidin volutpat velit.", + description:"Praesent turpis quam, dapibus id diam a, cursus lobortis mi. Praesent nec lorem eget nisi sodales vehicula etiam sagittis dapibus.", + image: Article1Img, + link: '#' + }, + { + date: '24 May, 2020', + readingTime: 6, + title: "Duis magna risus, convallis vel purus eu, sollicidin volutpat velit.", + description:"Praesent turpis quam, dapibus id diam a, cursus lobortis mi. Praesent nec lorem eget nisi sodales vehicula etiam sagittis dapibus.", + image: Article2Img, + link: '#' + }, + { + date: '1 Feb, 2020', + readingTime: 5, + title: "Duis magna risus, convallis vel purus eu, sollicidin volutpat velit.", + description:"Praesent turpis quam, dapibus id diam a, cursus lobortis mi. Praesent nec lorem eget nisi sodales vehicula etiam sagittis dapibus.", + image: Article3Img, + link: '#' + }, +] + +const useArticle = () => { + return { + articles: Articles, + } +} +export default useArticle; \ No newline at end of file diff --git a/templates/portfolio/model1/src/hooks/useHonor.tsx b/templates/portfolio/model1/src/hooks/useHonor.tsx new file mode 100644 index 0000000..c1d5b34 --- /dev/null +++ b/templates/portfolio/model1/src/hooks/useHonor.tsx @@ -0,0 +1,32 @@ +import { Honor } from "@/entities/Honor"; +import Honor1 from '@/assets/Honor&Awards/honor1.png' +import Honor2 from '@/assets/Honor&Awards/honor2.png' +import Honor3 from '@/assets/Honor&Awards/honor3.png' + +const Honors: Honor[] = [ + { + image: Honor1, + title: 'Best UI/UX Design Award', + description : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at nisl euismod urna bibendum', + }, + { + image: Honor2, + title: 'Best UI/UX Design Award', + description : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at nisl euismod urna bibendum', + }, + { + image: Honor3, + title: 'Best UI/UX Design Award', + description : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at nisl euismod urna bibendum', + }, +] + + + +const useHonor = () =>{ + return { + honors: Honors + } +} + +export default useHonor; \ No newline at end of file diff --git a/templates/portfolio/model1/src/hooks/useProject.tsx b/templates/portfolio/model1/src/hooks/useProject.tsx new file mode 100644 index 0000000..7a0d4b5 --- /dev/null +++ b/templates/portfolio/model1/src/hooks/useProject.tsx @@ -0,0 +1,44 @@ +import { Project } from "@/entities/Project" +import Project1Img from '@/assets/projects/project1.png' +import Project2Img from '@/assets/projects/project2.png' +import Project3Img from '@/assets/projects/project3.png' + +const Projects : Project[] = [ + + { + image: Project1Img, + categories: ['UI Design', 'Brand Identity'], + title: 'Merry Christmas - Website', + description : 'Nitrx is global social networking website admin dashboard. Designed to track users, post, story & daily Activities. Hope you guys like it.', + link: '#' + }, + { + image: Project2Img, + categories: ['UI Design', 'UX Design'], + title: 'Relik - Admin Dashboard', + description : '👉 Relik is a beautiful, simple, developer-friendly, highly customizable admin dashboard template with a 💎 high-quality UI & well-organized Figma file🔥.', + link: '#' + }, + { + image: Project3Img, + categories: ['Web Design', 'UX Design'], + title: 'Jobpilot - Job Portal', + description : 'Jobpilot is a modern high-quality and well-organized job portal Figma template designed to connect people looking for a suitable Jobs & Candidates.', + link: '#' + }, + { + image: Project2Img, + categories: ['UI Design', 'UX Design'], + title: 'Relik - Admin Dashboard', + description : '👉 Relik is a beautiful, simple, developer-friendly, highly customizable admin dashboard template with a 💎 high-quality UI & well-organized Figma file🔥.', + link: '#' + }, +] + +const useProject = () =>{ + return { + projects: Projects + } +} + +export default useProject; \ No newline at end of file diff --git a/templates/portfolio/model1/src/hooks/useTestimony.tsx b/templates/portfolio/model1/src/hooks/useTestimony.tsx new file mode 100644 index 0000000..668ae40 --- /dev/null +++ b/templates/portfolio/model1/src/hooks/useTestimony.tsx @@ -0,0 +1,51 @@ +import { Testimonial } from '@/entities/Testimonial' + +import Testimony1Img from '@/assets/testimonials/testimonial1.png' +import Testimony2Img from '@/assets/testimonials/testimonial2.png' +import Testimony3Img from '@/assets/testimonials/testimonial3.png' + +const Testimonials: Testimonial[] = [ + { + quote: "Kevin is very hard and great worker. He thinks about prolem, find solution and has a awesome working morale", + author: "Esther Howard", + position: "Chief Executive Officer", + company: "GIGL", + image: Testimony1Img + }, + { + quote: "Kevin Did a wonderful job animating set of static stickers. Work was done very quickly and the quality is outstanding. she managed to create great looking", + author: "Cameron Williamson", + position: "Chief Executive Officer", + company: "GIGL", + image: Testimony2Img + }, + { + quote: "Great Designer, does great work and is very flexible with change. if you're a programmer and are looking for UI/UX designer is definitely well qualified for the job.", + author: "Savannah Nguyen", + position: "Chief Executive Officer", + company: "GIGL", + image: Testimony3Img + }, + { + quote: "Kevin is very hard and great worker. He thinks about prolem, find solution and has a awesome working morale and I really love her work, they are impressive", + author: "Esther Howard", + position: "Chief Executive Officer", + company: "GIGL", + image: Testimony1Img + }, + { + quote: "Kevin Did a wonderful job animating set of static stickers. Work was done very quickly and the quality is outstanding. she managed to create great looking", + author: "Cameron Williamson", + position: "Chief Executive Officer", + company: "GIGL", + image: Testimony2Img + }, + ] + +const useTestimony = () =>{ + return { + testimonial: Testimonials + } +} + +export default useTestimony; \ No newline at end of file diff --git a/templates/portfolio/model1/src/hooks/useWorkProcess.tsx b/templates/portfolio/model1/src/hooks/useWorkProcess.tsx new file mode 100644 index 0000000..3bf32c4 --- /dev/null +++ b/templates/portfolio/model1/src/hooks/useWorkProcess.tsx @@ -0,0 +1,44 @@ +import {WorkProcess} from "@/entities/WorkProcess"; +import img1 from '@/assets/process/process1.svg' +import img2 from '@/assets/process/process2.svg' +import img3 from '@/assets/process/process3.svg' +import img4 from '@/assets/process/process4.svg' + + +const Process : WorkProcess[] = [ + + { + title: "Introductions", + description: "Morbi nunc nibh, ultrices in ligula et, volutpat suscipit lorem. Quique finibus, lectus in lacinia fauc.", + logo: img1, + css: 'group border-none duration-300 ease-out group-hover:shadow-2xl group-hover:shadow-purple-500/40 group-hover:border-transparent hover:shadow-2xl hover:shadow-purple-500/40 border-transparent ', + logoCss: "" + }, + { + title: "User Experience Design", + description: "Morbi nunc nibh, ultrices in ligula et, volutpat suscipit lorem. Quique finibus, lectus in lacinia fauc.", + logo: img2, + css: 'group border-none duration-300 ease-out group-hover:shadow-2xl group-hover:shadow-blue-500/40 group-hover:border-transparent hover:shadow-2xl hover:shadow-blue-500/40 border-transparent ', + logoCss: "" + }, + { + title: "User Interface Design", + description: "Morbi nunc nibh, ultrices in ligula et, volutpat suscipit lorem. Quique finibus, lectus in lacinia fauc.", + logo: img3, + css: 'group border-none duration-300 ease-out group-hover:shadow-2xl group-hover:shadow-orange-200/40 group-hover:border-transparent hover:shadow-2xl hover:shadow-orange-200/40 border-transparent ', + logoCss: "" + }, + { + title: "Usability Testing", + description: "Morbi nunc nibh, ultrices in ligula et, volutpat suscipit lorem. Quique finibus, lectus in lacinia fauc.", + logo: img4, + css: 'group border-none duration-300 ease-out group-hover:shadow-2xl group-hover:shadow-green-400/40 group-hover:border-transparent hover:shadow-2xl hover:shadow-green-400/40 border-transparent ', + logoCss: "" + } + ] + + const useWorkProcess = () =>{ + return {process: Process}; + } + + export default useWorkProcess; \ No newline at end of file diff --git a/templates/portfolio/model1/src/lib/utils.ts b/templates/portfolio/model1/src/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/templates/portfolio/model1/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/templates/portfolio/model1/src/main.tsx b/templates/portfolio/model1/src/main.tsx new file mode 100644 index 0000000..da7b185 --- /dev/null +++ b/templates/portfolio/model1/src/main.tsx @@ -0,0 +1,8 @@ +import "@rasenganjs/image/lib/styles/index.css"; +import "@/styles/index.css"; +import { type AppProps } from "rasengan"; +import AppRouter from "@/app/app.router"; + +export default function App({ Component, children }: AppProps) { + return <Component router={AppRouter}>{children}</Component>; +} diff --git a/templates/portfolio/model1/src/providers/MenuProvider.tsx b/templates/portfolio/model1/src/providers/MenuProvider.tsx new file mode 100644 index 0000000..3c6cbab --- /dev/null +++ b/templates/portfolio/model1/src/providers/MenuProvider.tsx @@ -0,0 +1,24 @@ +import React, {useState} from 'react'; +import {NavigationContext} from '@/contexts/NavigationContext'; + +const navlinks : {label:string; href:string}[] = [ + {label: "Home", href: "#home"}, + {label: "About", href: "#about"}, + {label: "Project", href: "#project"}, + {label: "Testimonial", href: "#testimonial"}, + {label: "Service", href: "#service"}, + {label: "Article", href: "#article"}, +] + + +const MenuProvider = ({children}: {children: React.ReactNode}) =>{ + const [isActive, setIsActive] = useState(false); + + return ( + <NavigationContext.Provider value={{isActive, setIsActive, navlinks}}> + {children} + </NavigationContext.Provider> + ) +} + +export default MenuProvider; \ No newline at end of file diff --git a/templates/portfolio/model1/src/styles/index.css b/templates/portfolio/model1/src/styles/index.css new file mode 100644 index 0000000..fcbb91c --- /dev/null +++ b/templates/portfolio/model1/src/styles/index.css @@ -0,0 +1,87 @@ +/* Load Urbanist and Comfortaa font */ +@import url("https://fonts.googleapis.com/css2?family=Sora:wght@100..800&display=swap"); /** + * These directives tell Tailwind to include the base styles for the project, + * any components that are used, and any utilities that are used. + * So don't remove them! + */ +@tailwind base; +@tailwind components; +@tailwind utilities; + +body, +html { + box-sizing: border-box; + margin: 0; + padding: 0; + width: 100vw; + min-height: 100vh; + overflow-x: hidden; + background-color: #fff; +} + +* { + font-family: "Sora", sans-serif; + scroll-behavior: smooth; +} + +p { + /* word-break: break-all; */ + line-break: loose; +} + + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 47.4% 11.2%; + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 47.4% 11.2%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --card: 0 0% 100%; + --card-foreground: 222.2 47.4% 11.2%; + --primary: 266, 87%, 62%; + --primary-foreground: 266 40% 98%; + --secondary: 210 40% 96.1%; + --secondary-foreground: 266 47.4% 11.2%; + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + --destructive: 0 100% 50%; + --destructive-foreground: 210 40% 98%; + --ring: 215 20.2% 65.1%; + --radius: 0.5rem; + } + + .dark { + --background: 224 71% 4%; + --foreground: 213 31% 91%; + --muted: 223 47% 11%; + --muted-foreground: 215.4 16.3% 56.9%; + --accent: 216 34% 17%; + --accent-foreground: 210 40% 98%; + --popover: 224 71% 4%; + --popover-foreground: 215 20.2% 65.1%; + --border: 216 34% 17%; + --input: 216 34% 17%; + --card: 224 71% 4%; + --card-foreground: 213 31% 91%; + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 1.2%; + --secondary: 222.2 47.4% 11.2%; + --secondary-foreground: 210 40% 98%; + --destructive: 0 63% 31%; + --destructive-foreground: 210 40% 98%; + --ring: 216 34% 17%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply font-sans antialiased bg-background text-foreground; + } +} diff --git a/templates/portfolio/model1/src/template.tsx b/templates/portfolio/model1/src/template.tsx new file mode 100644 index 0000000..3e39b03 --- /dev/null +++ b/templates/portfolio/model1/src/template.tsx @@ -0,0 +1,24 @@ +import { type TemplateProps } from "rasengan"; + +export default function Template({ + children, + Head, + Body, + Script, +}: TemplateProps) { + return ( + <html lang="en"> + <Head> + <meta charSet="UTF-8" /> + <link rel="icon" type="image/svg+xml" href="/rasengan.svg" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </Head> + + <Body> + {children} + + <Script /> + </Body> + </html> + ); +} diff --git a/templates/portfolio/model1/tailwind.config.js b/templates/portfolio/model1/tailwind.config.js new file mode 100644 index 0000000..4dc9064 --- /dev/null +++ b/templates/portfolio/model1/tailwind.config.js @@ -0,0 +1,97 @@ +import { adaptPath } from "rasengan"; + +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: adaptPath(["./src/**/*.{ts,tsx,js,jsx}"]), + theme: { + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: `var(--radius)`, + md: `calc(var(--radius) - 2px)`, + sm: "calc(var(--radius) - 4px)", + }, + backgroundImage: { + 'hero-bg': "url('./src/assets/hero.png')", + 'hero-img': "url('./src/assets/heroImg.png')", + 'bg-img': "url('./src/assets/BG.png')", + 'banner': "url('./src/assets/banner.png')" + }, + animation: { + 'infinite-scroll': 'infinite-scroll 25s linear infinite', + }, + keyframes: { + slide: { + "0%": { + transform: "translateX(0)", + }, + "100%": { + transform: "translateX(-50%)", + }, + }, + "accordion-down": { + from: { + height: "0", + }, + to: { + height: "var(--radix-accordion-content-height)", + }, + }, + "accordion-up": { + from: { + height: "var(--radix-accordion-content-height)", + }, + to: { + height: "0", + }, + }, + }, + animation: { + slide: "slide 20s infinite linear", + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + grayscale: { + 25: '25%', + 50: '50%', + 75: '75%', + } + }, + }, + plugins: [require("tailwindcss-animate")], +} diff --git a/templates/portfolio/model1/tsconfig.json b/templates/portfolio/model1/tsconfig.json new file mode 100644 index 0000000..dfb9f13 --- /dev/null +++ b/templates/portfolio/model1/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "ES2020", + + /* Bundler mode */ + "moduleResolution": "bundler", + "module": "ESNext", + "jsx": "react-jsx", + + /* Aliases for intellisence */ + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src", "rasengan-env.d.ts"], + + "extends": "./node_modules/rasengan/tsconfig.base.json" +}