diff --git a/frontend/bun.lockb b/frontend/bun.lockb index 7fee5e2..b8f856e 100755 Binary files a/frontend/bun.lockb and b/frontend/bun.lockb differ diff --git a/frontend/package.json b/frontend/package.json index ea6680b..a08bd04 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,6 +3,9 @@ "version": "0.1.0", "private": true, "dependencies": { + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@mui/material": "^5.16.7", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", diff --git a/frontend/src/components/Background.js b/frontend/src/components/Background.js index d60ac4b..59d7f97 100644 --- a/frontend/src/components/Background.js +++ b/frontend/src/components/Background.js @@ -2,6 +2,12 @@ import React from "react"; import Particles from "react-particles"; import { loadSlim } from "tsparticles-slim"; +const colors = { + background: "191825", + particle: "FFA3FD", + link: "865DFF", +}; + const Background = () => { const particlesInit = async (engine) => { await loadSlim(engine); @@ -14,16 +20,12 @@ const Background = () => { options={{ background: { color: { - value: "#2c2c2c", + value: colors.background, }, }, fpsLimit: 60, interactivity: { events: { - onClick: { - enable: true, - mode: "push", - }, onHover: { enable: true, mode: "repulse", @@ -31,26 +33,19 @@ const Background = () => { resize: true, }, modes: { - push: { - quantity: 4, - limit: 20, - }, - remove: { - quantity: 4, - }, repulse: { distance: 200, duration: 0.8, - speed: 0.03, + speed: 0.05, }, }, }, particles: { color: { - value: "#d0d0d0", + value: colors.particle, }, links: { - color: "#a0a0a0", + color: colors.link, distance: 150, enable: true, opacity: 0.5, diff --git a/frontend/src/components/DownloadForm.js b/frontend/src/components/DownloadForm.js index 7d5c105..5257100 100644 --- a/frontend/src/components/DownloadForm.js +++ b/frontend/src/components/DownloadForm.js @@ -3,6 +3,14 @@ import axios from "axios"; import { v4 as uuidv4 } from "uuid"; import Confetti from "react-confetti"; import Notification from "./Notification"; +import { + TextField, + MenuItem, + Select, + InputLabel, + FormControl, + CircularProgress, +} from "@mui/material"; const DownloadForm = () => { const [url, setUrl] = useState(""); @@ -71,7 +79,7 @@ const DownloadForm = () => { const getBarClass = () => { if (message === "Download Complete") return "bg-green-400"; if (message === "Download Failed") return "bg-red-400"; - return "bg-blue-400"; + return "bg-purple-600"; }; const getBarStyle = () => ({ @@ -93,42 +101,63 @@ const DownloadForm = () => { }, [showConfetti]); return ( -
+
- - setUrl(e.target.value)} - className="mt-1 block w-full px-3 py-2 border border-gray-300 bg-zinc-800 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm text-gray-300" - placeholder="Enter video URL" - /> + + setUrl(e.target.value)} + label="Video URL" + placeholder="Enter video URL" + variant="outlined" + size="small" + InputProps={{ + style: { + color: "#fff", + backgroundColor: "#1f2937", + }, + }} + InputLabelProps={{ + style: { color: "#9ca3af" }, + }} + /> +
- - + + Quality + + +
{ >
{isDownloading && progress === 0 && (
)} @@ -165,10 +194,14 @@ const DownloadForm = () => { {!isDownloading && !message.startsWith("Downloading") && ( )}
@@ -194,33 +227,6 @@ const DownloadForm = () => { onClose={() => setNotification(null)} /> )} -
); }; diff --git a/frontend/src/components/Header.js b/frontend/src/components/Header.js index 9575d98..00e065c 100644 --- a/frontend/src/components/Header.js +++ b/frontend/src/components/Header.js @@ -2,8 +2,8 @@ import React from "react"; const Header = () => { return ( -
-

DownLink

+
+

DownLink

); }; diff --git a/frontend/src/index.css b/frontend/src/index.css index 9e4b1f1..0422694 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -15,3 +15,29 @@ code { font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; } + +@keyframes loading { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } +} + +@keyframes gradientFlow { + 0% { + background-position: 0% 0%; + } + 50% { + background-position: 100% 100%; + } + 100% { + background-position: 0% 0%; + } +} + +.animate-gradient { + background-size: 300% 300%; + animation: gradientFlow 15s ease infinite; +}