UNPKG

lightswind

Version:

A modern frontend library with pre-built Tailwind CSS components for building responsive and interactive user interfaces.

163 lines (149 loc) 7.3 kB
import React, { useEffect, useState } from "react"; const PortfolioPage = () => { const [menuOpen, setMenuOpen] = useState(false); const [typingText, setTypingText] = useState(""); const textArray = [ "FullStack Developer,", "Frontend Developer,", "Backend Developer,", "Mobile Apps Developer.", ]; let textIndex = 0; let charIndex = 0; let isDeleting = false; useEffect(() => { const typeEffect = () => { const currentText = textArray[textIndex]; if (isDeleting) { setTypingText(currentText.substring(0, charIndex--)); } else { setTypingText(currentText.substring(0, charIndex++)); } let typingSpeed = isDeleting ? 50 : 100; if (!isDeleting && charIndex === currentText.length) { typingSpeed = 1000; // Pause before deleting isDeleting = true; } else if (isDeleting && charIndex === 0) { isDeleting = false; textIndex = (textIndex + 1) % textArray.length; typingSpeed = 500; // Pause before typing new text } setTimeout(typeEffect, typingSpeed); }; typeEffect(); }, []); const toggleMenu = () => { setMenuOpen(!menuOpen); }; return ( <div className="w-full h-screen bg-gray-200 dark:bg-gray-900 font-primarylw overflow-y-scroll scrollbar-hide"> <header className="lg:px-16 px-4 flex flex-wrap items-center py-4 shadow-lg bg-gray-200 dark:bg-gray-900"> <div className="flex-1 flex justify-between items-center"> <h2 className="text-4xl font-sans text-black dark:text-white">Muhilan</h2> </div> <label htmlFor="menu-toggle" className="cursor-pointer md:hidden block" onClick={toggleMenu} > <svg className="fill-current text-black dark:text-white" xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 20 20" > <title>menu</title> <path d={ menuOpen ? "M14.348 14.849l-4.349-4.349-4.349 4.349-1.415-1.415 4.349-4.349-4.349-4.349 1.415-1.415 4.349 4.349 4.349-4.349 1.415 1.415-4.349 4.349 4.349 4.349z" : "M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z" } /> </svg> </label> <input className="hidden" type="checkbox" id="menu-toggle" /> <div id="menu" className={ menuOpen ? "block bg-gray-300 dark:bg-gray-800" : "hidden" + " md:flex md:items-center md:w-auto w-full absolute md:static top-16 left-0 " + "md:bg-transparent transition-all z-50 duration-300 ease-in-out" } > <nav> <ul className="md:flex items-center justify-between text-base text-gray-700 dark:text-gray-100 md:pt-0"> <li> <a className="md:p-4 py-3 px-4 block text-primarylw" href="#"> Home </a> </li> <li> <a className="md:p-4 py-3 px-4 block" href="#"> About Me </a> </li> <li> <a className="md:p-4 py-3 px-4 block" href="#"> Education </a> </li> <li> <a className="md:p-4 py-3 px-4 block" href="#"> Experience </a> </li> <li> <a className="md:p-4 py-3 px-4 block" href="#"> Projects </a> </li> <li> <a className="md:p-4 py-3 px-4 block md:mb-0 mb-2" href="#"> Contact </a> </li> </ul> </nav> </div> </header> <div className="h-full w-full mx-auto relative pb-20 xl:px-16 px-8 flex md:flex-row flex-col gap-4 justify-center items-center"> <div className="w-full relative"> <img className="shadow-2xl shadow-blue-500 animate-[spin_12s_linear_infinite] absolute left-0 right-0 rounded-full lg:max-w-[70%] max-w-[60%] mx-auto" src="https://cdn.buymeacoffee.com/uploads/profile_pictures/2023/11/PIXxBAJGpUj1wI7F.png@300w_0e.webp" alt="My Image" /> <img className="relative z-10 rounded-full lg:max-w-[70%] max-w-[60%] mx-auto outline outline-[.7rem] outline-offset-[.1rem] outline-blue-400/30" src="https://cdn.buymeacoffee.com/uploads/profile_pictures/2023/11/PIXxBAJGpUj1wI7F.png@300w_0e.webp" alt="My Image" /> </div> <div className="w-full flex flex-col justify-center gap-4 md:text-left text-center text-gray-800 dark:text-white md:mt-0 sm:mt-8 mt-4"> <h1 className="md:text-4xl sm:text-3xl text-2xl font-semibold"> Hello, My name is Muhilan </h1> <h3 className="capitalize text-primarylw"> I'm{" "} <span className="typing text-primarylw dark:text-primarylw-2"> {typingText} </span> </h3> <p> Experienced full-stack developer with 4+ years of expertise in Laravel, NestJS, Nuxt.js, Next.js, Android, and some Flutter experience. </p> <div className="sm:mt-4 mt-2"> <button className="px-6 py-3 rounded-xl bg-primarylw text-white rounded-sm"> Get In Touch </button> </div> </div> </div> </div> ) } export default PortfolioPage