From 8aff38bd019391310f4760bcd96019d41ac09199 Mon Sep 17 00:00:00 2001 From: ITQ Date: Tue, 2 Apr 2024 15:25:09 +0300 Subject: [PATCH] added landing --- frontend/package-lock.json | 680 +++++++++++++++++- frontend/package.json | 12 +- frontend/src/App.css | 125 ++++ frontend/src/assets/cube-leg.png | Bin 0 -> 18194 bytes frontend/src/assets/growth.png | Bin 0 -> 19139 bytes frontend/src/assets/icon.ico | Bin 0 -> 5862 bytes frontend/src/assets/icon.png | Bin 0 -> 24111 bytes frontend/src/assets/looking-ahead.png | Bin 0 -> 13455 bytes frontend/src/assets/pilot.png | Bin 0 -> 34680 bytes frontend/src/assets/reflecting.png | Bin 0 -> 19890 bytes frontend/src/components/About.tsx | 40 ++ frontend/src/components/Cta.tsx | 38 + frontend/src/components/FAQ.tsx | 90 +++ frontend/src/components/Features.tsx | 99 +++ frontend/src/components/Footer.tsx | 154 ++++ frontend/src/components/Hero.tsx | 56 ++ frontend/src/components/HeroCards.tsx | 170 +++++ frontend/src/components/HowItWorks.tsx | 73 ++ frontend/src/components/Icons.tsx | 664 +++++++++++++++++ frontend/src/components/Navbar.tsx | 141 ++++ frontend/src/components/Newsletter.tsx | 41 ++ frontend/src/components/Pricing.tsx | 147 ++++ frontend/src/components/ScrollToTop.tsx | 38 + frontend/src/components/Services.tsx | 76 ++ frontend/src/components/Sponsors.tsx | 58 ++ frontend/src/components/Statistics.tsx | 41 ++ frontend/src/components/Team.tsx | 161 +++++ frontend/src/components/Testimonials.tsx | 111 +++ .../entities/PlayerCard/PlayerCard.tsx | 2 +- frontend/src/components/mode-toggle.tsx | 67 +- frontend/src/components/pages/Admin/Admin.tsx | 60 +- .../src/components/pages/Landing/Landing.tsx | 53 +- frontend/src/components/shared/ui/button.tsx | 2 +- frontend/src/components/shared/ui/card.tsx | 2 +- frontend/src/components/shared/ui/tabs.tsx | 2 +- frontend/src/components/theme-provider.tsx | 61 +- frontend/src/components/ui/accordion.tsx | 60 ++ frontend/src/components/ui/avatar.tsx | 48 ++ frontend/src/components/ui/badge.tsx | 36 + frontend/src/components/ui/button.tsx | 56 ++ frontend/src/components/ui/card.tsx | 79 ++ frontend/src/components/ui/dropdown-menu.tsx | 198 +++++ frontend/src/components/ui/input.tsx | 25 + .../src/components/ui/navigation-menu.tsx | 128 ++++ frontend/src/components/ui/sheet.tsx | 138 ++++ .../widgets/CreateTeams/CreateTeams.tsx | 2 +- frontend/src/index.css | 65 ++ frontend/src/lib/utils.ts | 6 + frontend/src/main.tsx | 14 +- frontend/vite-env.d.ts | 1 + 50 files changed, 3994 insertions(+), 126 deletions(-) create mode 100644 frontend/src/App.css create mode 100644 frontend/src/assets/cube-leg.png create mode 100644 frontend/src/assets/growth.png create mode 100644 frontend/src/assets/icon.ico create mode 100644 frontend/src/assets/icon.png create mode 100644 frontend/src/assets/looking-ahead.png create mode 100644 frontend/src/assets/pilot.png create mode 100644 frontend/src/assets/reflecting.png create mode 100644 frontend/src/components/About.tsx create mode 100644 frontend/src/components/Cta.tsx create mode 100644 frontend/src/components/FAQ.tsx create mode 100644 frontend/src/components/Features.tsx create mode 100644 frontend/src/components/Footer.tsx create mode 100644 frontend/src/components/Hero.tsx create mode 100644 frontend/src/components/HeroCards.tsx create mode 100644 frontend/src/components/HowItWorks.tsx create mode 100644 frontend/src/components/Icons.tsx create mode 100644 frontend/src/components/Navbar.tsx create mode 100644 frontend/src/components/Newsletter.tsx create mode 100644 frontend/src/components/Pricing.tsx create mode 100644 frontend/src/components/ScrollToTop.tsx create mode 100644 frontend/src/components/Services.tsx create mode 100644 frontend/src/components/Sponsors.tsx create mode 100644 frontend/src/components/Statistics.tsx create mode 100644 frontend/src/components/Team.tsx create mode 100644 frontend/src/components/Testimonials.tsx create mode 100644 frontend/src/components/ui/accordion.tsx create mode 100644 frontend/src/components/ui/avatar.tsx create mode 100644 frontend/src/components/ui/badge.tsx create mode 100644 frontend/src/components/ui/button.tsx create mode 100644 frontend/src/components/ui/card.tsx create mode 100644 frontend/src/components/ui/dropdown-menu.tsx create mode 100644 frontend/src/components/ui/input.tsx create mode 100644 frontend/src/components/ui/navigation-menu.tsx create mode 100644 frontend/src/components/ui/sheet.tsx create mode 100644 frontend/src/lib/utils.ts create mode 100644 frontend/vite-env.d.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5f8e88d..fcc0113 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,6 +9,8 @@ "version": "0.0.0", "dependencies": { "@hookform/resolvers": "^3.3.4", + "@radix-ui/react-accordion": "^1.1.2", + "@radix-ui/react-avatar": "^1.0.4", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", @@ -49,6 +51,8 @@ "@types/react-dom": "^18.2.22", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", + "@vitejs/plugin-react": "^4.2.0", + "autoprefixer": "^10.4.16", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-config-standard-with-typescript": "19.0.1", @@ -56,7 +60,10 @@ "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", - "prettier": "^3.2.5" + "postcss": "^8.4.32", + "prettier": "^3.2.5", + "tailwindcss": "^3.3.5", + "vite": "^5.0.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -79,6 +86,414 @@ "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==", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "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/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0", + "@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.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", + "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/runtime": { "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", @@ -90,6 +505,64 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@esbuild/darwin-x64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", @@ -425,6 +898,37 @@ "@babel/runtime": "^7.13.10" } }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz", + "integrity": "sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collapsible": "1.0.3", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-arrow": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", @@ -448,6 +952,62 @@ } } }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.0.4.tgz", + "integrity": "sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.3.tgz", + "integrity": "sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-collection": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", @@ -1183,6 +1743,47 @@ "@swc/counter": "^0.1.3" } }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -1437,6 +2038,25 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, "node_modules/@vitejs/plugin-react-swc": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz", @@ -1719,6 +2339,7 @@ "version": "10.4.19", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, "funding": [ { "type": "opencollective", @@ -1810,6 +2431,7 @@ "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -1877,6 +2499,7 @@ "version": "1.0.30001600", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2009,6 +2632,12 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "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==", + "dev": true + }, "node_modules/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", @@ -2218,7 +2847,8 @@ "node_modules/electron-to-chromium": { "version": "1.4.721", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.721.tgz", - "integrity": "sha512-k1x2r6foI8iJOp+1qTxbbrrWMsOiHkzGBYwYigaq+apO1FSqtn44KTo3Sy69qt7CRr7149zTcsDvH7MUKsOuIQ==" + "integrity": "sha512-k1x2r6foI8iJOp+1qTxbbrrWMsOiHkzGBYwYigaq+apO1FSqtn44KTo3Sy69qt7CRr7149zTcsDvH7MUKsOuIQ==", + "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -2436,6 +3066,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, "engines": { "node": ">=6" } @@ -3337,6 +3968,7 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, "engines": { "node": "*" }, @@ -3399,6 +4031,15 @@ "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==", + "dev": true, + "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", @@ -4208,6 +4849,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -4528,7 +5181,8 @@ "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true }, "node_modules/normalize-path": { "version": "3.0.0", @@ -4542,6 +5196,7 @@ "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, "engines": { "node": ">=0.10.0" } @@ -5144,6 +5799,15 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-remove-scroll": { "version": "2.5.5", "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", @@ -5957,6 +6621,15 @@ "node": ">=0.8" } }, + "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==", + "dev": true, + "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", @@ -6158,6 +6831,7 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, "funding": [ { "type": "opencollective", diff --git a/frontend/package.json b/frontend/package.json index cadf074..64da555 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -19,6 +19,7 @@ "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.0.4", + "@radix-ui/react-navigation-menu": "^1.1.4", "@vitejs/plugin-react-swc": "^3.5.0", "autoprefixer": "^10.4.19", "class-variance-authority": "^0.7.0", @@ -43,7 +44,9 @@ "tailwindcss-animate": "^1.0.7", "typescript": "^5.2.2", "vite": "^5.2.0", - "zod": "^3.22.4" + "zod": "^3.22.4", + "@radix-ui/react-accordion": "^1.1.2", + "@radix-ui/react-avatar": "^1.0.4" }, "devDependencies": { "@types/node": "^20.11.30", @@ -58,6 +61,11 @@ "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", - "prettier": "^3.2.5" + "prettier": "^3.2.5", + "@vitejs/plugin-react": "^4.2.0", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.32", + "tailwindcss": "^3.3.5", + "vite": "^5.0.0" } } diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 0000000..1eaa180 --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,125 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* *=========== Default theme =========== */ +/* @layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + } +} */ + +/* *=========== Green theme =========== */ +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + --primary: 142.1 76.2% 36.3%; + --primary-foreground: 355.7 100% 97.3%; + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + --ring: 142.1 76.2% 36.3%; + --radius: 0.5rem; + } + + .dark { + --background: 20 14.3% 4.1%; + --foreground: 0 0% 95%; + --card: 24 9.8% 10%; + --card-foreground: 0 0% 95%; + --popover: 0 0% 9%; + --popover-foreground: 0 0% 95%; + --primary: 142.1 70.6% 45.3%; + --primary-foreground: 144.9 80.4% 10%; + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 15%; + --muted-foreground: 240 5% 64.9%; + --accent: 12 6.5% 15.1%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 85.7% 97.3%; + --border: 240 3.7% 15.9%; + --input: 240 3.7% 15.9%; + --ring: 142.4 71.8% 29.2%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/frontend/src/assets/cube-leg.png b/frontend/src/assets/cube-leg.png new file mode 100644 index 0000000000000000000000000000000000000000..388ba8ce8595e8aa7c656d67abf950758f62e487 GIT binary patch literal 18194 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/growth.png b/frontend/src/assets/growth.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04fca5c123371b347910de6a20dffce6e5cc1d GIT binary patch literal 19139 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 z0000000000000000000000000000000000000000000000I2Z~@Fy6VGM|(G00000 LNkvXXu0mjfE6`0) literal 0 HcmV?d00001 diff --git a/frontend/src/assets/icon.ico b/frontend/src/assets/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ac12869d6c348b9093da19a004318cca44b710d1 GIT binary patch literal 5862 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 LDNELhn*{zJK&R_3 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/pilot.png b/frontend/src/assets/pilot.png new file mode 100644 index 0000000000000000000000000000000000000000..e190bb2c6a3e1c314ae25c87b6637fd0896ada72 GIT binary patch literal 34680 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/reflecting.png b/frontend/src/assets/reflecting.png new file mode 100644 index 0000000000000000000000000000000000000000..60101e84a446027400935ee17e887d1f7fe3b0b9 GIT binary patch literal 19890 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 literal 0 HcmV?d00001 diff --git a/frontend/src/components/About.tsx b/frontend/src/components/About.tsx new file mode 100644 index 0000000..b56821c --- /dev/null +++ b/frontend/src/components/About.tsx @@ -0,0 +1,40 @@ +import { Statistics } from "./Statistics"; +import pilot from "../assets/pilot.png"; + +export const About = () => { + return ( +
+
+
+ +
+
+

+ + About{" "} + + Company +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit + amet, consectetur adipiscing elit. +

+
+ + +
+
+
+
+ ); +}; diff --git a/frontend/src/components/Cta.tsx b/frontend/src/components/Cta.tsx new file mode 100644 index 0000000..305274f --- /dev/null +++ b/frontend/src/components/Cta.tsx @@ -0,0 +1,38 @@ +import { Button } from "./ui/button"; + +export const Cta = () => { + return ( +
+
+
+

+ All Your + + {" "} + Ideas & Concepts{" "} + + In One Interface +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Eaque, + beatae. Ipsa tempore ipsum iste quibusdam illum ducimus eos. Quasi, + sed! +

+
+ +
+ + +
+
+
+ ); +}; diff --git a/frontend/src/components/FAQ.tsx b/frontend/src/components/FAQ.tsx new file mode 100644 index 0000000..67bf025 --- /dev/null +++ b/frontend/src/components/FAQ.tsx @@ -0,0 +1,90 @@ +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "../components/ui/accordion"; + +interface FAQProps { + question: string; + answer: string; + value: string; +} + +const FAQList: FAQProps[] = [ + { + question: "Is this template free?", + answer: "Yes. It is a free ChadcnUI template.", + value: "item-1", + }, + { + question: "Lorem ipsum dolor sit amet consectetur adipisicing elit?", + answer: + "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sint labore quidem quam? Consectetur sapiente iste rerum reiciendis animi nihil nostrum sit quo, modi quod.", + value: "item-2", + }, + { + question: + "Lorem ipsum dolor sit amet Consectetur natus dolores minus quibusdam?", + answer: + "Lorem ipsum dolor sit amet consectetur, adipisicing elit. Labore qui nostrum reiciendis veritatis necessitatibus maxime quis ipsa vitae cumque quo?", + value: "item-3", + }, + { + question: "Lorem ipsum dolor sit amet, consectetur adipisicing elit?", + answer: "Lorem ipsum dolor sit amet consectetur, adipisicing elit.", + value: "item-4", + }, + { + question: + "Lorem ipsum dolor sit amet consectetur adipisicing elit. Consectetur natus?", + answer: + "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sint labore quidem quam? Consectetur sapiente iste rerum reiciendis animi nihil nostrum sit quo, modi quod.", + value: "item-5", + }, +]; + +export const FAQ = () => { + return ( +
+ ); +}; diff --git a/frontend/src/components/Features.tsx b/frontend/src/components/Features.tsx new file mode 100644 index 0000000..6cd916b --- /dev/null +++ b/frontend/src/components/Features.tsx @@ -0,0 +1,99 @@ +import { Badge } from "./ui/badge"; +import { + Card, + CardContent, + CardFooter, + CardHeader, + CardTitle, +} from "../components/ui/card"; +import image from "../assets/growth.png"; +import image3 from "../assets/reflecting.png"; +import image4 from "../assets/looking-ahead.png"; + +interface FeatureProps { + title: string; + description: string; + image: string; +} + +const features: FeatureProps[] = [ + { + title: "Responsive Design", + description: + "Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.", + image: image4, + }, + { + title: "Intuitive user interface", + description: + "Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.", + image: image3, + }, + { + title: "AI-Powered insights", + description: + "Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.", + image: image, + }, +]; + +const featureList: string[] = [ + "Dark/Light theme", + "Reviews", + "Features", + "Pricing", + "Contact form", + "Our team", + "Responsive design", + "Newsletter", + "Minimalist", +]; + +export const Features = () => { + return ( +
+

+ Many{" "} + + Great Features + +

+ +
+ {featureList.map((feature: string) => ( +
+ + {feature} + +
+ ))} +
+ +
+ {features.map(({ title, description, image }: FeatureProps) => ( + + + {title} + + + {description} + + + About feature + + + ))} +
+
+ ); +}; diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx new file mode 100644 index 0000000..0fcad37 --- /dev/null +++ b/frontend/src/components/Footer.tsx @@ -0,0 +1,154 @@ +import { LogoIcon } from "./Icons"; + +export const Footer = () => { + return ( + + ); +}; diff --git a/frontend/src/components/Hero.tsx b/frontend/src/components/Hero.tsx new file mode 100644 index 0000000..cd08dc4 --- /dev/null +++ b/frontend/src/components/Hero.tsx @@ -0,0 +1,56 @@ +import { Button } from "./ui/button"; +import { buttonVariants } from "./ui/button"; +import { HeroCards } from "./HeroCards"; +import { GitHubLogoIcon } from "@radix-ui/react-icons"; + +export const Hero = () => { + return ( +
+
+
+

+ + Shadcn + {" "} + landing page +

{" "} + for{" "} +

+ + React + {" "} + developers +

+
+ +

+ Build your React landing page effortlessly with the required sections + to your project. +

+ +
+ + + + Github Repository + + +
+
+ + {/* Hero cards sections */} +
+ +
+ + {/* Shadow effect */} +
+
+ ); +}; diff --git a/frontend/src/components/HeroCards.tsx b/frontend/src/components/HeroCards.tsx new file mode 100644 index 0000000..53da696 --- /dev/null +++ b/frontend/src/components/HeroCards.tsx @@ -0,0 +1,170 @@ +import { Avatar, AvatarFallback, AvatarImage } from "./ui/avatar"; +import { Badge } from "./ui/badge"; +import { Button, buttonVariants } from "../components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, + CardFooter, +} from "../components/ui/card"; +import { Check, Linkedin } from "lucide-react"; +import { LightBulbIcon } from "./Icons"; +import { GitHubLogoIcon } from "@radix-ui/react-icons"; + +export const HeroCards = () => { + return ( +
+ {/* Testimonial */} + + + + + SH + + +
+ John Doe React + @john_doe +
+
+ + This landig page is awesome! +
+ + {/* Team */} + + + user avatar + Leo Miranda + + Frontend Developer + + + + +

+ I really enjoy transforming ideas into functional software that + exceeds expectations +

+
+ + + + +
+ + {/* Pricing */} + + + + Free + + Most popular + + +
+ $0 + /month +
+ + + Lorem ipsum dolor sit, amet ipsum consectetur adipisicing elit. + +
+ + + + + +
+ + +
+ {["4 Team member", "4 GB Storage", "Upto 6 pages"].map( + (benefit: string) => ( + + {" "} +

{benefit}

+
+ ) + )} +
+
+
+ + {/* Service */} + + +
+ +
+
+ Light & dark mode + + Lorem ipsum dolor sit amet consect adipisicing elit. Consectetur + natusm. + +
+
+
+
+ ); +}; diff --git a/frontend/src/components/HowItWorks.tsx b/frontend/src/components/HowItWorks.tsx new file mode 100644 index 0000000..3c4cd27 --- /dev/null +++ b/frontend/src/components/HowItWorks.tsx @@ -0,0 +1,73 @@ +import { Card, CardContent, CardHeader, CardTitle } from "./ui/card"; +import { MedalIcon, MapIcon, PlaneIcon, GiftIcon } from "../components/Icons"; + +interface FeatureProps { + icon: JSX.Element; + title: string; + description: string; +} + +const features: FeatureProps[] = [ + { + icon: , + title: "Accesibility", + description: + "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum quas provident cum", + }, + { + icon: , + title: "Community", + description: + "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum quas provident cum", + }, + { + icon: , + title: "Scalability", + description: + "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum quas provident cum", + }, + { + icon: , + title: "Gamification", + description: + "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum quas provident cum", + }, +]; + +export const HowItWorks = () => { + return ( +
+

+ How It{" "} + + Works{" "} + + Step-by-Step Guide +

+

+ Lorem ipsum dolor sit amet consectetur, adipisicing elit. Veritatis + dolor pariatur sit! +

+ +
+ {features.map(({ icon, title, description }: FeatureProps) => ( + + + + {icon} + {title} + + + {description} + + ))} +
+
+ ); +}; diff --git a/frontend/src/components/Icons.tsx b/frontend/src/components/Icons.tsx new file mode 100644 index 0000000..d2afc56 --- /dev/null +++ b/frontend/src/components/Icons.tsx @@ -0,0 +1,664 @@ +export const LogoIcon = () => { + return ( + + + + + + ); +}; + +export const MedalIcon = () => { + return ( + + Free Icons + + + + + + + + + + + + + + + + + + + + ); +}; + +export const MapIcon = () => { + return ( + + Free Icons + + + + + + + + + + + + + + + + + + + ); +}; + +export const PlaneIcon = () => { + return ( + + Free Icons + + + + + + + + + + + + + + + ); +}; + +export const GiftIcon = () => { + return ( + + Free Icons + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export const LightBulbIcon = () => { + return ( + + Free Icons + + + + + + + + + + + + + + + + + + + ); +}; + +export const WalletIcon = () => { + return ( + + Free Icons + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export const ChartIcon = () => { + return ( + + Free Icons + + + + + + + + + + + + + + + + + + ); +}; + +export const MagnifierIcon = () => { + return ( + + Free Icons + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/frontend/src/components/Navbar.tsx b/frontend/src/components/Navbar.tsx new file mode 100644 index 0000000..0185315 --- /dev/null +++ b/frontend/src/components/Navbar.tsx @@ -0,0 +1,141 @@ +import { useState } from "react"; +import { + NavigationMenu, + NavigationMenuItem, + NavigationMenuList, +} from "../components/ui/navigation-menu"; +import { + Sheet, + SheetContent, + SheetHeader, + SheetTitle, + SheetTrigger, +} from "../components/ui/sheet"; + +import { GitHubLogoIcon } from "@radix-ui/react-icons"; +import { buttonVariants } from "./ui/button"; +import { Menu } from "lucide-react"; +import { ModeToggle } from "./mode-toggle"; +import { LogoIcon } from "./Icons"; + +interface RouteProps { + href: string; + label: string; +} + +const routeList: RouteProps[] = [ + { + href: "#features", + label: "Features", + }, + { + href: "#testimonials", + label: "Testimonials", + }, + { + href: "#pricing", + label: "Pricing", + }, + { + href: "#faq", + label: "FAQ", + }, +]; + +export const Navbar = () => { + const [isOpen, setIsOpen] = useState(false); + return ( +
+ + + + + + ShadcnUI/React + + + + {/* mobile */} + + + + + + setIsOpen(true)} + > + Menu Icon + + + + + + + Shadcn/React + + + + + + + + {/* desktop */} + + + + + +
+ ); +}; diff --git a/frontend/src/components/Newsletter.tsx b/frontend/src/components/Newsletter.tsx new file mode 100644 index 0000000..faf01f6 --- /dev/null +++ b/frontend/src/components/Newsletter.tsx @@ -0,0 +1,41 @@ +import { Button } from "./ui/button"; +import { Input } from "./ui/input"; + +export const Newsletter = () => { + const handleSubmit = (e: any) => { + e.preventDefault(); + console.log("Subscribed!"); + }; + + return ( +
+
+ +
+

+ Join Our Daily{" "} + + Newsletter + +

+

+ Lorem ipsum dolor sit amet consectetur. +

+ +
+ + +
+
+ +
+
+ ); +}; diff --git a/frontend/src/components/Pricing.tsx b/frontend/src/components/Pricing.tsx new file mode 100644 index 0000000..e024494 --- /dev/null +++ b/frontend/src/components/Pricing.tsx @@ -0,0 +1,147 @@ +import { Badge } from "../components/ui/badge"; +import { Button } from "../components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "../components/ui/card"; +import { Check } from "lucide-react"; + +enum PopularPlanType { + NO = 0, + YES = 1, +} + +interface PricingProps { + title: string; + popular: PopularPlanType; + price: number; + description: string; + buttonText: string; + benefitList: string[]; +} + +const pricingList: PricingProps[] = [ + { + title: "Free", + popular: 0, + price: 0, + description: + "Lorem ipsum dolor sit, amet ipsum consectetur adipisicing elit.", + buttonText: "Get Started", + benefitList: [ + "1 Team member", + "2 GB Storage", + "Upto 4 pages", + "Community support", + "lorem ipsum dolor", + ], + }, + { + title: "Premium", + popular: 1, + price: 5, + description: + "Lorem ipsum dolor sit, amet ipsum consectetur adipisicing elit.", + buttonText: "Start Free Trial", + benefitList: [ + "4 Team member", + "4 GB Storage", + "Upto 6 pages", + "Priority support", + "lorem ipsum dolor", + ], + }, + { + title: "Enterprise", + popular: 0, + price: 40, + description: + "Lorem ipsum dolor sit, amet ipsum consectetur adipisicing elit.", + buttonText: "Contact US", + benefitList: [ + "10 Team member", + "8 GB Storage", + "Upto 10 pages", + "Priority support", + "lorem ipsum dolor", + ], + }, +]; + +export const Pricing = () => { + return ( +
+

+ Get + + {" "} + Unlimited{" "} + + Access +

+

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Alias + reiciendis. +

+
+ {pricingList.map((pricing: PricingProps) => ( + + + + {pricing.title} + {pricing.popular === PopularPlanType.YES ? ( + + Most popular + + ) : null} + +
+ ${pricing.price} + /month +
+ + {pricing.description} +
+ + + + + +
+ + +
+ {pricing.benefitList.map((benefit: string) => ( + + {" "} +

{benefit}

+
+ ))} +
+
+
+ ))} +
+
+ ); +}; diff --git a/frontend/src/components/ScrollToTop.tsx b/frontend/src/components/ScrollToTop.tsx new file mode 100644 index 0000000..8a21c75 --- /dev/null +++ b/frontend/src/components/ScrollToTop.tsx @@ -0,0 +1,38 @@ +import { useState, useEffect } from "react"; +import { Button } from "./ui/button"; +import { ArrowUpToLine } from "lucide-react"; + +export const ScrollToTop = () => { + const [showTopBtn, setShowTopBtn] = useState(false); + + useEffect(() => { + window.addEventListener("scroll", () => { + if (window.scrollY > 400) { + setShowTopBtn(true); + } else { + setShowTopBtn(false); + } + }); + }, []); + + const goToTop = () => { + window.scroll({ + top: 0, + left: 0, + }); + }; + + return ( + <> + {showTopBtn && ( + + )} + + ); +}; diff --git a/frontend/src/components/Services.tsx b/frontend/src/components/Services.tsx new file mode 100644 index 0000000..493c4b3 --- /dev/null +++ b/frontend/src/components/Services.tsx @@ -0,0 +1,76 @@ +import { Card, CardDescription, CardHeader, CardTitle } from "./ui/card"; +import { MagnifierIcon, WalletIcon, ChartIcon } from "./Icons"; +import cubeLeg from "../assets/cube-leg.png"; + +interface ServiceProps { + title: string; + description: string; + icon: JSX.Element; +} + +const serviceList: ServiceProps[] = [ + { + title: "Code Collaboration", + description: + "Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.", + icon: , + }, + { + title: "Project Management", + description: + "Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.", + icon: , + }, + { + title: "Task Automation", + description: + "Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.", + icon: , + }, +]; + +export const Services = () => { + return ( +
+
+
+

+ + Client-Centric{" "} + + Services +

+ +

+ Lorem ipsum dolor sit amet consectetur, adipisicing elit. Veritatis + dolor. +

+ +
+ {serviceList.map(({ icon, title, description }: ServiceProps) => ( + + +
+ {icon} +
+
+ {title} + + {description} + +
+
+
+ ))} +
+
+ + About services +
+
+ ); +}; diff --git a/frontend/src/components/Sponsors.tsx b/frontend/src/components/Sponsors.tsx new file mode 100644 index 0000000..7819982 --- /dev/null +++ b/frontend/src/components/Sponsors.tsx @@ -0,0 +1,58 @@ +import { Radar } from "lucide-react"; + +interface SponsorProps { + icon: JSX.Element; + name: string; +} + +const sponsors: SponsorProps[] = [ + { + icon: , + name: "Sponsor 1", + }, + { + icon: , + name: "Sponsor 2", + }, + { + icon: , + name: "Sponsor 3", + }, + { + icon: , + name: "Sponsor 4", + }, + { + icon: , + name: "Sponsor 5", + }, + { + icon: , + name: "Sponsor 6", + }, +]; + +export const Sponsors = () => { + return ( +
+

+ Investors and founders +

+ +
+ {sponsors.map(({ icon, name }: SponsorProps) => ( +
+ {icon} +

{name}

+
+ ))} +
+
+ ); +}; diff --git a/frontend/src/components/Statistics.tsx b/frontend/src/components/Statistics.tsx new file mode 100644 index 0000000..a8b252d --- /dev/null +++ b/frontend/src/components/Statistics.tsx @@ -0,0 +1,41 @@ +export const Statistics = () => { + interface statsProps { + quantity: string; + description: string; + } + + const stats: statsProps[] = [ + { + quantity: "2.7K+", + description: "Users", + }, + { + quantity: "1.8K+", + description: "Subscribers", + }, + { + quantity: "112", + description: "Downloads", + }, + { + quantity: "4", + description: "Products", + }, + ]; + + return ( +
+
+ {stats.map(({ quantity, description }: statsProps) => ( +
+

{quantity}

+

{description}

+
+ ))} +
+
+ ); +}; diff --git a/frontend/src/components/Team.tsx b/frontend/src/components/Team.tsx new file mode 100644 index 0000000..d7b1d51 --- /dev/null +++ b/frontend/src/components/Team.tsx @@ -0,0 +1,161 @@ +import { buttonVariants } from "../components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "../components/ui/card"; +import { Facebook, Instagram, Linkedin } from "lucide-react"; + +interface TeamProps { + imageUrl: string; + name: string; + position: string; + socialNetworks: SociaNetworkslProps[]; +} + +interface SociaNetworkslProps { + name: string; + url: string; +} + +const teamList: TeamProps[] = [ + { + imageUrl: "https://i.pravatar.cc/150?img=35", + name: "Emma Smith", + position: "Product Manager", + socialNetworks: [ + { name: "Linkedin", url: "http://linkedin.com" }, + { + name: "Facebook", + url: "https://www.facebook.com/", + }, + { + name: "Instagram", + url: "https://www.instagram.com/", + }, + ], + }, + { + imageUrl: "https://i.pravatar.cc/150?img=60", + name: "John Doe", + position: "Tech Lead", + socialNetworks: [ + { name: "Linkedin", url: "http://linkedin.com" }, + { + name: "Facebook", + url: "https://www.facebook.com/", + }, + { + name: "Instagram", + url: "https://www.instagram.com/", + }, + ], + }, + { + imageUrl: "https://i.pravatar.cc/150?img=36", + name: "Ashley Ross", + position: "Frontend Developer", + socialNetworks: [ + { name: "Linkedin", url: "http://linkedin.com" }, + + { + name: "Instagram", + url: "https://www.instagram.com/", + }, + ], + }, + { + imageUrl: "https://i.pravatar.cc/150?img=17", + name: "Bruce Rogers", + position: "Backend Developer", + socialNetworks: [ + { name: "Linkedin", url: "http://linkedin.com" }, + { + name: "Facebook", + url: "https://www.facebook.com/", + }, + ], + }, +]; + +export const Team = () => { + const socialIcon = (iconName: string) => { + switch (iconName) { + case "Linkedin": + return ; + + case "Facebook": + return ; + + case "Instagram": + return ; + } + }; + + return ( +
+

+ + Our Dedicated{" "} + + Crew +

+ +

+ Lorem ipsum dolor sit amet consectetur, adipisicing elit. Veritatis + dolor pariatur sit! +

+ +
+ {teamList.map( + ({ imageUrl, name, position, socialNetworks }: TeamProps) => ( + + + {`${name} + {name} + + {position} + + + + +

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+
+ + + {socialNetworks.map(({ name, url }: SociaNetworkslProps) => ( + + ))} + +
+ ) + )} +
+
+ ); +}; diff --git a/frontend/src/components/Testimonials.tsx b/frontend/src/components/Testimonials.tsx new file mode 100644 index 0000000..1bab485 --- /dev/null +++ b/frontend/src/components/Testimonials.tsx @@ -0,0 +1,111 @@ +import { Avatar, AvatarFallback, AvatarImage } from "./ui/avatar"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "../components/ui/card"; + +interface TestimonialProps { + image: string; + name: string; + userName: string; + comment: string; +} + +const testimonials: TestimonialProps[] = [ + { + image: "https://github.com/shadcn.png", + name: "John Doe React", + userName: "@john_Doe", + comment: "This landing page is awesome!", + }, + { + image: "https://github.com/shadcn.png", + name: "John Doe React", + userName: "@john_Doe1", + comment: + "Lorem ipsum dolor sit amet,empor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud.", + }, + + { + image: "https://github.com/shadcn.png", + name: "John Doe React", + userName: "@john_Doe2", + comment: + "Lorem ipsum dolor sit amet,exercitation. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident.", + }, + { + image: "https://github.com/shadcn.png", + name: "John Doe React", + userName: "@john_Doe3", + comment: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.", + }, + { + image: "https://github.com/shadcn.png", + name: "John Doe React", + userName: "@john_Doe4", + comment: + "Lorem ipsum dolor sit amet, tempor incididunt aliqua. Ut enim ad minim veniam, quis nostrud.", + }, + { + image: "https://github.com/shadcn.png", + name: "John Doe React", + userName: "@john_Doe5", + comment: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", + }, +]; + +export const Testimonials = () => { + return ( +
+

+ Discover Why + + {" "} + People Love{" "} + + This Landing Page +

+ +

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non unde error + facere hic reiciendis illo +

+ +
+ {testimonials.map( + ({ image, name, userName, comment }: TestimonialProps) => ( + + + + + OM + + +
+ {name} + {userName} +
+
+ + {comment} +
+ ) + )} +
+
+ ); +}; diff --git a/frontend/src/components/entities/PlayerCard/PlayerCard.tsx b/frontend/src/components/entities/PlayerCard/PlayerCard.tsx index 1bab982..7952b43 100644 --- a/frontend/src/components/entities/PlayerCard/PlayerCard.tsx +++ b/frontend/src/components/entities/PlayerCard/PlayerCard.tsx @@ -21,7 +21,7 @@ const PlayerCard = () =>{ - {t("open")} + {t("open")} фио diff --git a/frontend/src/components/mode-toggle.tsx b/frontend/src/components/mode-toggle.tsx index cb704cc..884d529 100644 --- a/frontend/src/components/mode-toggle.tsx +++ b/frontend/src/components/mode-toggle.tsx @@ -1,41 +1,40 @@ -import { Moon, Sun } from "lucide-react" - -import { Button } from "./shared/ui/button" -import { useTheme } from "./theme-provider" -import { useTranslation } from "react-i18next" -import { MenubarMenu, MenubarTrigger, MenubarContent, MenubarItem, MenubarSeparator, MenubarShortcut } from "./shared/ui/menubar" -import { ResetIcon } from "@radix-ui/react-icons" - - +import { Button } from "../components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "../components/ui/dropdown-menu"; +import { useTheme } from "../components/theme-provider"; +import { Moon, Sun } from "lucide-react"; export function ModeToggle() { - const { setTheme } = useTheme() - - const { t } = useTranslation(); + const { setTheme } = useTheme(); return ( - - - - - - setTheme("light")}> - {t("LightTheme")}⌘L - - setTheme("dark")}> - {t("DarkTheme")}⌘D - - - setTheme("system")}> - {t("SystemTheme")} - - - - ) + + + setTheme("light")}> + Light + + setTheme("dark")}> + Dark + + setTheme("system")}> + System + + + + ); } - - diff --git a/frontend/src/components/pages/Admin/Admin.tsx b/frontend/src/components/pages/Admin/Admin.tsx index ccab961..6d2fdf7 100644 --- a/frontend/src/components/pages/Admin/Admin.tsx +++ b/frontend/src/components/pages/Admin/Admin.tsx @@ -1,30 +1,32 @@ -import { Button } from "../../shared/ui/button" -import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "../../shared/ui/resizable" -import less from "./Admin.module.less" -import PlayerCard from "../../entities/PlayerCard/PlayerCard" -import { useTranslation } from "react-i18next" -import CreateTeam from "../../widgets/CreateTeams/CreateTeams" +import { Button } from "../../shared/ui/button"; +import { + ResizableHandle, + ResizablePanel, + ResizablePanelGroup, +} from "../../shared/ui/resizable"; +import less from "./Admin.module.less"; +import PlayerCard from "../../entities/PlayerCard/PlayerCard"; +import { useTranslation } from "react-i18next"; +import CreateTeam from "../../widgets/CreateTeams/CreateTeams"; -const AdminPage = () =>{ - const { t } = useTranslation(); - return( - - -
- - -
- -
- - - - - - - - -
- ) -} -export default AdminPage \ No newline at end of file +const AdminPage = () => { + const { t } = useTranslation(); + return ( + + +
+ + +
+
+ + + + + + + +
+ ); +}; +export default AdminPage; diff --git a/frontend/src/components/pages/Landing/Landing.tsx b/frontend/src/components/pages/Landing/Landing.tsx index 6230ed9..0397245 100644 --- a/frontend/src/components/pages/Landing/Landing.tsx +++ b/frontend/src/components/pages/Landing/Landing.tsx @@ -1,22 +1,41 @@ -import less from "./Landing.module.less" -import '../../../i18n' -import { Button } from "../../shared/ui/button" -import { Label } from "@radix-ui/react-menubar" -import { useTranslation } from "react-i18next"; -import { Link } from "react-router-dom"; +import { About } from "../../About"; +import { Cta } from "../../Cta"; +import { FAQ } from "../../FAQ"; +import { Features } from "../../Features"; +import { Footer } from "../../Footer"; +import { Hero } from "../../Hero"; +import { HowItWorks } from "../../HowItWorks"; +import { Navbar } from "../../Navbar"; +import { Newsletter } from "../../Newsletter"; +import { Pricing } from "../../Pricing"; +import { ScrollToTop } from "../../ScrollToTop"; +import { Services } from "../../Services"; +import { Sponsors } from "../../Sponsors"; +import { Team } from "../../Team"; +import { Testimonials } from "../../Testimonials"; +import "../../../App.css"; +import { ThemeProvider } from "../../theme-provider.tsx"; function Landing() { - const { t } = useTranslation(); - return ( - <>
-

{t("landingLogo")}

-
- - -
- - ) + + + + + + + + + + + + + + +
+ + + ); } -export default Landing \ No newline at end of file +export default Landing; diff --git a/frontend/src/components/shared/ui/button.tsx b/frontend/src/components/shared/ui/button.tsx index b492281..87a11e0 100644 --- a/frontend/src/components/shared/ui/button.tsx +++ b/frontend/src/components/shared/ui/button.tsx @@ -10,7 +10,7 @@ const buttonVariants = cva( variants: { variant: { default: - "bg-primary text-primary-foreground shadow hover:bg-primary/90", + "bg-primary text-primary-foreground hover:bg-primary/90", destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", outline: diff --git a/frontend/src/components/shared/ui/card.tsx b/frontend/src/components/shared/ui/card.tsx index 03204f2..ff14b4e 100644 --- a/frontend/src/components/shared/ui/card.tsx +++ b/frontend/src/components/shared/ui/card.tsx @@ -9,7 +9,7 @@ const Card = React.forwardRef<
void -} + theme: Theme; + setTheme: (theme: Theme) => void; +}; const initialState: ThemeProviderState = { theme: "system", setTheme: () => null, -} +}; -const ThemeProviderContext = createContext(initialState) +const ThemeProviderContext = createContext(initialState); export function ThemeProvider({ children, - defaultTheme = "system", + defaultTheme = "dark", storageKey = "vite-ui-theme", ...props }: ThemeProviderProps) { const [theme, setTheme] = useState( () => (localStorage.getItem(storageKey) as Theme) || defaultTheme - ) + ); useEffect(() => { - const root = window.document.documentElement + const root = window.document.documentElement; - root.classList.remove("light", "dark") + root.classList.remove("light", "dark"); if (theme === "system") { const systemTheme = window.matchMedia("(prefers-color-scheme: dark)") .matches ? "dark" - : "light" + : "light"; - root.classList.add(systemTheme) - return + root.classList.add(systemTheme); + return; } - root.classList.add(theme) - }, [theme]) + root.classList.add(theme); + }, [theme]); const value = { theme, setTheme: (theme: Theme) => { - localStorage.setItem(storageKey, theme) - setTheme(theme) + localStorage.setItem(storageKey, theme); + setTheme(theme); }, - } + }; return ( - + {children} - ) + ); } export const useTheme = () => { - const context = useContext(ThemeProviderContext) + const context = useContext(ThemeProviderContext); if (context === undefined) - throw new Error("useTheme must be used within a ThemeProvider") + throw new Error("useTheme must be used within a ThemeProvider"); - return context -} + return context; +}; diff --git a/frontend/src/components/ui/accordion.tsx b/frontend/src/components/ui/accordion.tsx new file mode 100644 index 0000000..b56fd10 --- /dev/null +++ b/frontend/src/components/ui/accordion.tsx @@ -0,0 +1,60 @@ +import * as React from "react"; +import * as AccordionPrimitive from "@radix-ui/react-accordion"; +import { ChevronDown } from "lucide-react"; + +import { cn } from "../../lib/utils" + +const Accordion = AccordionPrimitive.Root; + +const AccordionItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AccordionItem.displayName = "AccordionItem"; + +const AccordionTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + svg]:rotate-180", + className + )} + {...props} + > + {children} + + + +)); +AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName; + +const AccordionContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + +
+ {children} +
+
+)); + +AccordionContent.displayName = AccordionPrimitive.Content.displayName; + +export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }; diff --git a/frontend/src/components/ui/avatar.tsx b/frontend/src/components/ui/avatar.tsx new file mode 100644 index 0000000..ba09665 --- /dev/null +++ b/frontend/src/components/ui/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, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +Avatar.displayName = AvatarPrimitive.Root.displayName; + +const AvatarImage = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AvatarImage.displayName = AvatarPrimitive.Image.displayName; + +const AvatarFallback = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName; + +export { Avatar, AvatarImage, AvatarFallback }; diff --git a/frontend/src/components/ui/badge.tsx b/frontend/src/components/ui/badge.tsx new file mode 100644 index 0000000..a448338 --- /dev/null +++ b/frontend/src/components/ui/badge.tsx @@ -0,0 +1,36 @@ +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 border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ) +} + +export { Badge, badgeVariants } diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx new file mode 100644 index 0000000..4106711 --- /dev/null +++ b/frontend/src/components/ui/button.tsx @@ -0,0 +1,56 @@ +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 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/frontend/src/components/ui/card.tsx b/frontend/src/components/ui/card.tsx new file mode 100644 index 0000000..c1b6fbb --- /dev/null +++ b/frontend/src/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "../../lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/frontend/src/components/ui/dropdown-menu.tsx b/frontend/src/components/ui/dropdown-menu.tsx new file mode 100644 index 0000000..7059303 --- /dev/null +++ b/frontend/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,198 @@ +import * as React from "react"; +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +import { Check, ChevronRight, Circle } from "lucide-react"; + +import { cn } from "../../lib/utils" + +const DropdownMenu = DropdownMenuPrimitive.Root; + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; + +const DropdownMenuGroup = DropdownMenuPrimitive.Group; + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal; + +const DropdownMenuSub = DropdownMenuPrimitive.Sub; + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)); +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName; + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName; + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)); +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + +)); +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)); +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName; + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)); +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName; + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + +)); +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ); +}; +DropdownMenuShortcut.displayName = "DropdownMenuShortcut"; + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +}; diff --git a/frontend/src/components/ui/input.tsx b/frontend/src/components/ui/input.tsx new file mode 100644 index 0000000..7b9d75c --- /dev/null +++ b/frontend/src/components/ui/input.tsx @@ -0,0 +1,25 @@ +import * as React from "react" + +import { cn } from "../../lib/utils" + +export interface InputProps + extends React.InputHTMLAttributes {} + +const Input = React.forwardRef( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/frontend/src/components/ui/navigation-menu.tsx b/frontend/src/components/ui/navigation-menu.tsx new file mode 100644 index 0000000..b3c3e1d --- /dev/null +++ b/frontend/src/components/ui/navigation-menu.tsx @@ -0,0 +1,128 @@ +import * as React from "react"; +import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"; +import { cva } from "class-variance-authority"; +import { ChevronDown } from "lucide-react"; + +import { cn } from "../../lib/utils" + +const NavigationMenu = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + {children} + + +)); +NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName; + +const NavigationMenuList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName; + +const NavigationMenuItem = NavigationMenuPrimitive.Item; + +const navigationMenuTriggerStyle = cva( + "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50" +); + +const NavigationMenuTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + {children}{" "} + +)); +NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName; + +const NavigationMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName; + +const NavigationMenuLink = NavigationMenuPrimitive.Link; + +const NavigationMenuViewport = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ +
+)); +NavigationMenuViewport.displayName = + NavigationMenuPrimitive.Viewport.displayName; + +const NavigationMenuIndicator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +
+ +)); +NavigationMenuIndicator.displayName = + NavigationMenuPrimitive.Indicator.displayName; + +export { + navigationMenuTriggerStyle, + NavigationMenu, + NavigationMenuList, + NavigationMenuItem, + NavigationMenuContent, + NavigationMenuTrigger, + NavigationMenuLink, + NavigationMenuIndicator, + NavigationMenuViewport, +}; diff --git a/frontend/src/components/ui/sheet.tsx b/frontend/src/components/ui/sheet.tsx new file mode 100644 index 0000000..96f6122 --- /dev/null +++ b/frontend/src/components/ui/sheet.tsx @@ -0,0 +1,138 @@ +import * as React from "react" +import * as SheetPrimitive from "@radix-ui/react-dialog" +import { cva, type VariantProps } from "class-variance-authority" +import { X } from "lucide-react" + +import { cn } from "../../lib/utils" + +const Sheet = SheetPrimitive.Root + +const SheetTrigger = SheetPrimitive.Trigger + +const SheetClose = SheetPrimitive.Close + +const SheetPortal = SheetPrimitive.Portal + +const SheetOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SheetOverlay.displayName = SheetPrimitive.Overlay.displayName + +const sheetVariants = cva( + "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500", + { + variants: { + side: { + top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top", + bottom: + "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom", + left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm", + right: + "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm", + }, + }, + defaultVariants: { + side: "right", + }, + } +) + +interface SheetContentProps + extends React.ComponentPropsWithoutRef, + VariantProps {} + +const SheetContent = React.forwardRef< + React.ElementRef, + SheetContentProps +>(({ side = "right", className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)) +SheetContent.displayName = SheetPrimitive.Content.displayName + +const SheetHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +SheetHeader.displayName = "SheetHeader" + +const SheetFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +SheetFooter.displayName = "SheetFooter" + +const SheetTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SheetTitle.displayName = SheetPrimitive.Title.displayName + +const SheetDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SheetDescription.displayName = SheetPrimitive.Description.displayName + +export { + Sheet, + SheetPortal, + SheetOverlay, + SheetTrigger, + SheetClose, + SheetContent, + SheetHeader, + SheetFooter, + SheetTitle, + SheetDescription, +} diff --git a/frontend/src/components/widgets/CreateTeams/CreateTeams.tsx b/frontend/src/components/widgets/CreateTeams/CreateTeams.tsx index 7151a7c..e695e96 100644 --- a/frontend/src/components/widgets/CreateTeams/CreateTeams.tsx +++ b/frontend/src/components/widgets/CreateTeams/CreateTeams.tsx @@ -10,7 +10,7 @@ const CreateTeam = () =>{ const {t} = useTranslation(); return( - {t("DistTeams")} + {t("DistTeams")} {t("DistTeams")} diff --git a/frontend/src/index.css b/frontend/src/index.css index e69de29..3c74428 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -0,0 +1,65 @@ +html { + scroll-behavior: smooth; +} + +/* HeroCards background shadow */ +.shadow { + position: absolute; + background: hsl(var(--primary) / 0%); + border-radius: 24px; + rotate: 35deg; + + width: 260px; + top: 200px; + height: 400px; + filter: blur(150px); + animation: shadow-slide infinite 4s linear alternate; +} + +@keyframes shadow-slide { + from { + background: hsl(var(--primary) / 20%); + right: 460px; + } + to { + background: hsl(var(--primary) / 80%); + right: 160px; + } +} + +@media (max-width: 1024px) { + .shadow { + top: 70px; + } + + @keyframes shadow-slide { + from { + background: hsl(var(--primary) / 20%); + right: 460px; + } + to { + background: hsl(var(--primary) / 50%); + right: 160px; + } + } +} + +@media (max-width: 768px) { + .shadow { + top: 70px; + width: 100px; + height: 350px; + filter: blur(60px); + } + + @keyframes shadow-slide { + from { + background: hsl(var(--primary) / 20%); + right: 280px; + } + to { + background: hsl(var(--primary) / 30%); + right: 100px; + } + } +} diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts new file mode 100644 index 0000000..ec79801 --- /dev/null +++ b/frontend/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 964aeb4..966f17a 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -1,10 +1,10 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App' -import './index.css' +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App.tsx"; +import "./index.css"; -ReactDOM.createRoot(document.getElementById('root')!).render( +ReactDOM.createRoot(document.getElementById("root")!).render( - , -) + +); diff --git a/frontend/vite-env.d.ts b/frontend/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/vite-env.d.ts @@ -0,0 +1 @@ +///

+

+ Frequently Asked{" "} + + Questions + +

+ + + {FAQList.map(({ question, answer, value }: FAQProps) => ( + + + {question} + + + {answer} + + ))} + + +

+ Still have questions?{" "} + + Contact us + +

+