diff --git a/README.md b/README.md index 423108d..5d8436d 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,26 @@ -# Valorant Website Clone -Valorant Website Clone using data from Valorant-API. -### Demo -https://user-images.githubusercontent.com/84263946/210807232-155ac77c-c83c-4f0d-996b-ebe9ee7e7393.mp4 -### References -* [Build and Deploy a Fully Responsive Website: Javascript Mastery](https://www.youtube.com/watch?v=_oO4Qi5aVZs&t=521s) -* [Valorant Official Site](https://playvalorant.com/en-gb/) -* [Tailwind CSS Docs](https://tailwindcss.com/) +# 🎯 Valorant ID Marketplace 💥 + +Welcome to the **Valorant ID Marketplace**! 🎮 This platform allows users to securely buy and sell Valorant accounts. We provide a seamless experience for both sellers and buyers, ensuring **secure transactions**, **account verifications**, and **premium customer service**. 🔒✨ + +## 📑 Table of Contents +- [🔥 Features](#-features) +- [⚙️ Installation](#-installation) +- [🚀 Usage](#-usage) +- [🛠️ Technologies Used](#-technologies-used) +- [🤝 Contributing](#-contributing) +- [📜 License](#-license) +- [📧 Contact](#-contact) + +## 🔥 Features +- 🔐 **Secure account listings** for sellers +- ✅ Verified and **legitimate** Valorant accounts +- 💸 **Smooth and secure transactions** +- 🎨 **Valorant-themed UI** for an immersive experience +- 💼 No hidden fees, **transparency guaranteed** +- 🛡️ **Anti-fraud protection** for both buyers and sellers +- 📞 **24/7 customer support** for queries and assistance + +## ⚙️ Installation +1. Clone this repository to your local machine using: + ```bash + git clone https://github.com/sandesh362/valorant--website-.git diff --git a/index.html b/index.html index 79c4701..7760a9d 100644 --- a/index.html +++ b/index.html @@ -2,12 +2,12 @@ - + - Vite + React + Fury -
+
diff --git a/package-lock.json b/package-lock.json index afa27c0..b3b889c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,15 @@ "name": "valorant-landing-page", "version": "0.0.0", "dependencies": { + "@heroicons/react": "^2.1.5", "axios": "^1.6.0", + "bootstrap": "^5.3.3", + "phosphor-react": "^1.4.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-google-recaptcha": "^3.1.0", + "react-intersection-observer": "^9.13.1", + "react-range-slider-input": "^3.0.7", "react-router-dom": "^6.4.2" }, "devDependencies": { @@ -472,6 +478,15 @@ "node": ">=12" } }, + "node_modules/@heroicons/react": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.1.5.tgz", + "integrity": "sha512-FuzFN+BsHa+7OxbvAERtgBTNeZpUjgM/MIizfVkSCL2/edriN0Hx/DWRCR//aPYwO5QX/YlgLGXk+E3PcfZwjA==", + "license": "MIT", + "peerDependencies": { + "react": ">= 16" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -554,6 +569,17 @@ "node": ">= 8" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@remix-run/router": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.2.tgz", @@ -717,11 +743,12 @@ } }, "node_modules/axios": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", - "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -735,13 +762,33 @@ "node": ">=8" } }, + "node_modules/bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -853,6 +900,15 @@ "node": ">= 6" } }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -885,6 +941,17 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, + "node_modules/core-js": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", + "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -1385,10 +1452,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1397,15 +1465,16 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -1512,6 +1581,15 @@ "node": ">=4" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1562,6 +1640,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -1637,12 +1716,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -1725,6 +1805,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", @@ -1740,6 +1829,18 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/phosphor-react": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/phosphor-react/-/phosphor-react-1.4.1.tgz", + "integrity": "sha512-gO5j7U0xZrdglTAYDYPACU4xDOFBTJmptrrB/GeR+tHhCZF3nUMyGmV/0hnloKjuTrOmpSFlbfOY78H39rgjUQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -1898,6 +1999,17 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -1946,6 +2058,19 @@ "node": ">=0.10.0" } }, + "node_modules/react-async-script": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-async-script/-/react-async-script-1.2.0.tgz", + "integrity": "sha512-bCpkbm9JiAuMGhkqoAiC0lLkb40DJ0HOEJIku+9JDjxX3Rcs+ztEOG13wbrOskt3n2DTrjshhaQ/iay+SnGg5Q==", + "license": "MIT", + "dependencies": { + "hoist-non-react-statics": "^3.3.0", + "prop-types": "^15.5.0" + }, + "peerDependencies": { + "react": ">=16.4.1" + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -1958,6 +2083,50 @@ "react": "^18.2.0" } }, + "node_modules/react-google-recaptcha": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-3.1.0.tgz", + "integrity": "sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.5.0", + "react-async-script": "^1.2.0" + }, + "peerDependencies": { + "react": ">=16.4.1" + } + }, + "node_modules/react-intersection-observer": { + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.1.tgz", + "integrity": "sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==", + "license": "MIT", + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-range-slider-input": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/react-range-slider-input/-/react-range-slider-input-3.0.7.tgz", + "integrity": "sha512-yAJDDMUNkILOcZSCLCVbwgnoAM3v0AfdDysTCMXDwY/+ZRNRlv98TyHbVCwPFEd7qiI8Ca/stKb0GAy//NybYw==", + "license": "MIT", + "dependencies": { + "clsx": "^1.1.1", + "core-js": "^3.22.4" + } + }, "node_modules/react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", @@ -2046,10 +2215,11 @@ } }, "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -2092,10 +2262,11 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -2200,6 +2371,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -2240,10 +2412,11 @@ "dev": true }, "node_modules/vite": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.8.tgz", - "integrity": "sha512-EtQU16PLIJpAZol2cTLttNP1mX6L0SyI0pgQB1VOoWeQnMSvtiwovV3D6NcjN8CZQWWyESD2v5NGnpz5RvgOZA==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.11.tgz", + "integrity": "sha512-K/jGKL/PgbIgKCiJo5QbASQhFiV02X9Jh+Qq0AKCRCRKZtOTVi4t6wh75FDpGf2N9rYOnzH87OEFQNaFy6pdxQ==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.15.9", "postcss": "^8.4.18", @@ -2626,6 +2799,12 @@ "dev": true, "optional": true }, + "@heroicons/react": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.1.5.tgz", + "integrity": "sha512-FuzFN+BsHa+7OxbvAERtgBTNeZpUjgM/MIizfVkSCL2/edriN0Hx/DWRCR//aPYwO5QX/YlgLGXk+E3PcfZwjA==", + "requires": {} + }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -2690,6 +2869,12 @@ "fastq": "^1.6.0" } }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true + }, "@remix-run/router": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.2.tgz", @@ -2810,11 +2995,11 @@ } }, "axios": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", - "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "requires": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -2825,13 +3010,19 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "requires": {} + }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { @@ -2896,6 +3087,11 @@ } } }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2925,6 +3121,11 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, + "core-js": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", + "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==" + }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -3202,18 +3403,18 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==" + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" }, "form-data": { "version": "4.0.0", @@ -3280,6 +3481,14 @@ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3366,12 +3575,12 @@ "dev": true }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -3424,6 +3633,11 @@ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, "object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", @@ -3436,6 +3650,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "phosphor-react": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/phosphor-react/-/phosphor-react-1.4.1.tgz", + "integrity": "sha512-gO5j7U0xZrdglTAYDYPACU4xDOFBTJmptrrB/GeR+tHhCZF3nUMyGmV/0hnloKjuTrOmpSFlbfOY78H39rgjUQ==", + "requires": {} + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -3520,6 +3740,16 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -3545,6 +3775,15 @@ "loose-envify": "^1.1.0" } }, + "react-async-script": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-async-script/-/react-async-script-1.2.0.tgz", + "integrity": "sha512-bCpkbm9JiAuMGhkqoAiC0lLkb40DJ0HOEJIku+9JDjxX3Rcs+ztEOG13wbrOskt3n2DTrjshhaQ/iay+SnGg5Q==", + "requires": { + "hoist-non-react-statics": "^3.3.0", + "prop-types": "^15.5.0" + } + }, "react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -3554,6 +3793,35 @@ "scheduler": "^0.23.0" } }, + "react-google-recaptcha": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-3.1.0.tgz", + "integrity": "sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==", + "requires": { + "prop-types": "^15.5.0", + "react-async-script": "^1.2.0" + } + }, + "react-intersection-observer": { + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.1.tgz", + "integrity": "sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==", + "requires": {} + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-range-slider-input": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/react-range-slider-input/-/react-range-slider-input-3.0.7.tgz", + "integrity": "sha512-yAJDDMUNkILOcZSCLCVbwgnoAM3v0AfdDysTCMXDwY/+ZRNRlv98TyHbVCwPFEd7qiI8Ca/stKb0GAy//NybYw==", + "requires": { + "clsx": "^1.1.1", + "core-js": "^3.22.4" + } + }, "react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", @@ -3613,9 +3881,9 @@ "dev": true }, "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -3639,9 +3907,9 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, "source-map-js": { @@ -3742,9 +4010,9 @@ "dev": true }, "vite": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.8.tgz", - "integrity": "sha512-EtQU16PLIJpAZol2cTLttNP1mX6L0SyI0pgQB1VOoWeQnMSvtiwovV3D6NcjN8CZQWWyESD2v5NGnpz5RvgOZA==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.11.tgz", + "integrity": "sha512-K/jGKL/PgbIgKCiJo5QbASQhFiV02X9Jh+Qq0AKCRCRKZtOTVi4t6wh75FDpGf2N9rYOnzH87OEFQNaFy6pdxQ==", "dev": true, "requires": { "esbuild": "^0.15.9", diff --git a/package.json b/package.json index 1631d11..844f09b 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,15 @@ "preview": "vite preview" }, "dependencies": { + "@heroicons/react": "^2.1.5", "axios": "^1.6.0", + "bootstrap": "^5.3.3", + "phosphor-react": "^1.4.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-google-recaptcha": "^3.1.0", + "react-intersection-observer": "^9.13.1", + "react-range-slider-input": "^3.0.7", "react-router-dom": "^6.4.2" }, "devDependencies": { diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000..a8b11f4 Binary files /dev/null and b/public/logo.png differ diff --git a/src/App.jsx b/src/App.jsx index c9d487d..0bead10 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,32 +1,51 @@ import Navbar from "./components/layout/Navbar"; -import Home from "./components/pages/home/Home"; -import CTA from "./components/layout/CTA"; +import Home from "./pages/home/Home"; +// import CTA from "./components/layout/CTA"; import Footer from "./components/layout/Footer"; -import { BrowserRouter, Routes, Route } from "react-router-dom"; -import Agents from "./components/pages/Agents"; -import Agent from "./components/pages/Agent"; -import Maps from "./components/pages/Maps"; +import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; +// import Agents from "./components/pages/Agents"; +// import Agent from "./components/pages/Agent"; +// import Maps from "./components/pages/Maps"; +import { ShopContextProvider } from "./components/context/shop-context" +import { Shop } from "./pages/shop/shop" +import { Cart } from "./pages/cart/cart"; +import Contact from "./pages/contact/Contact"; +import About from "./pages/about/About"; +import News from "./pages/news/News"; +import Reviews from "./pages/reviews/Reviews"; +import TermsAndServices from "./pages/about/TermsAndServices"; +import PrivacyNotes from "./pages/about/privacy"; +import CookiePreference from "./pages/about/cokkie"; +import Blog from "./components/pages/home/Blog" + + const App = () => { - + return ( - -
- - - } /> - } /> - } /> - } - /> - - -
-
+ + +
+ + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + }/> + + You Lost In the World of Valorant 😀} /> + +
+
+
); }; diff --git a/src/assets/DUELISTS __ Official Launch Cinematic Trailer - VALORANT.mp4 b/src/assets/DUELISTS __ Official Launch Cinematic Trailer - VALORANT.mp4 new file mode 100644 index 0000000..38b5b29 Binary files /dev/null and b/src/assets/DUELISTS __ Official Launch Cinematic Trailer - VALORANT.mp4 differ diff --git a/src/assets/WhatsApp.svg b/src/assets/WhatsApp.svg new file mode 100644 index 0000000..b1497bd --- /dev/null +++ b/src/assets/WhatsApp.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/discord.svg b/src/assets/discord.svg new file mode 100644 index 0000000..b45e214 --- /dev/null +++ b/src/assets/discord.svg @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/assets/index.js b/src/assets/index.js index d814474..1ef646d 100644 --- a/src/assets/index.js +++ b/src/assets/index.js @@ -9,8 +9,15 @@ import instagram from "./instagram.svg"; import linkedin from "./linkedin.svg"; import twitter from "./twitter.svg"; import overviewimg from "./overview.jpg"; +import WhatsApp from "./WhatsApp.svg" +import Discord from "./discord.svg" +import Logo from "./logo.png" + export { + Logo, + WhatsApp, + Discord, valorantlogo, valoranttext, riotlogo, diff --git a/src/assets/instagram.svg b/src/assets/instagram.svg index c124bb6..850f7b5 100644 --- a/src/assets/instagram.svg +++ b/src/assets/instagram.svg @@ -1,5 +1,6 @@ - - - - + + + + diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000..a8b11f4 Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/components/assets/products/1.png b/src/components/assets/products/1.png new file mode 100644 index 0000000..fa22501 Binary files /dev/null and b/src/components/assets/products/1.png differ diff --git a/src/components/assets/products/1200.jpg b/src/components/assets/products/1200.jpg new file mode 100644 index 0000000..bdc7929 Binary files /dev/null and b/src/components/assets/products/1200.jpg differ diff --git a/src/components/assets/products/1200a.jpg b/src/components/assets/products/1200a.jpg new file mode 100644 index 0000000..fe8c159 Binary files /dev/null and b/src/components/assets/products/1200a.jpg differ diff --git a/src/components/assets/products/1200aa.jpg b/src/components/assets/products/1200aa.jpg new file mode 100644 index 0000000..f5e9c52 Binary files /dev/null and b/src/components/assets/products/1200aa.jpg differ diff --git a/src/components/assets/products/1200ab.jpg b/src/components/assets/products/1200ab.jpg new file mode 100644 index 0000000..d771139 Binary files /dev/null and b/src/components/assets/products/1200ab.jpg differ diff --git a/src/components/assets/products/1200abb.jpg b/src/components/assets/products/1200abb.jpg new file mode 100644 index 0000000..1bdf7bd Binary files /dev/null and b/src/components/assets/products/1200abb.jpg differ diff --git a/src/components/assets/products/1200abbb.jpg b/src/components/assets/products/1200abbb.jpg new file mode 100644 index 0000000..3c737c1 Binary files /dev/null and b/src/components/assets/products/1200abbb.jpg differ diff --git a/src/components/assets/products/1200b.jpg b/src/components/assets/products/1200b.jpg new file mode 100644 index 0000000..a165cbb Binary files /dev/null and b/src/components/assets/products/1200b.jpg differ diff --git a/src/components/assets/products/15000.jpg b/src/components/assets/products/15000.jpg new file mode 100644 index 0000000..a7dc38f Binary files /dev/null and b/src/components/assets/products/15000.jpg differ diff --git a/src/components/assets/products/1700.jpg b/src/components/assets/products/1700.jpg new file mode 100644 index 0000000..3bb625a Binary files /dev/null and b/src/components/assets/products/1700.jpg differ diff --git a/src/components/assets/products/1900.jpg b/src/components/assets/products/1900.jpg new file mode 100644 index 0000000..0c555c6 Binary files /dev/null and b/src/components/assets/products/1900.jpg differ diff --git a/src/components/assets/products/2.png b/src/components/assets/products/2.png new file mode 100644 index 0000000..0adcd1f Binary files /dev/null and b/src/components/assets/products/2.png differ diff --git a/src/components/assets/products/2300.jpg b/src/components/assets/products/2300.jpg new file mode 100644 index 0000000..9a594de Binary files /dev/null and b/src/components/assets/products/2300.jpg differ diff --git a/src/components/assets/products/2500.jpg b/src/components/assets/products/2500.jpg new file mode 100644 index 0000000..9752e1d Binary files /dev/null and b/src/components/assets/products/2500.jpg differ diff --git a/src/components/assets/products/2500a.jpg b/src/components/assets/products/2500a.jpg new file mode 100644 index 0000000..8a2c3bc Binary files /dev/null and b/src/components/assets/products/2500a.jpg differ diff --git a/src/components/assets/products/2500ad.jpg b/src/components/assets/products/2500ad.jpg new file mode 100644 index 0000000..f29c213 Binary files /dev/null and b/src/components/assets/products/2500ad.jpg differ diff --git a/src/components/assets/products/2600.jpg b/src/components/assets/products/2600.jpg new file mode 100644 index 0000000..25a8129 Binary files /dev/null and b/src/components/assets/products/2600.jpg differ diff --git a/src/components/assets/products/2600a.jpg b/src/components/assets/products/2600a.jpg new file mode 100644 index 0000000..64ac24c Binary files /dev/null and b/src/components/assets/products/2600a.jpg differ diff --git a/src/components/assets/products/2750.jpg b/src/components/assets/products/2750.jpg new file mode 100644 index 0000000..ad664de Binary files /dev/null and b/src/components/assets/products/2750.jpg differ diff --git a/src/components/assets/products/3.png b/src/components/assets/products/3.png new file mode 100644 index 0000000..b6532a2 Binary files /dev/null and b/src/components/assets/products/3.png differ diff --git a/src/components/assets/products/3200.jpg b/src/components/assets/products/3200.jpg new file mode 100644 index 0000000..251fb11 Binary files /dev/null and b/src/components/assets/products/3200.jpg differ diff --git a/src/components/assets/products/3200a.jpg b/src/components/assets/products/3200a.jpg new file mode 100644 index 0000000..4e5d3fb Binary files /dev/null and b/src/components/assets/products/3200a.jpg differ diff --git a/src/components/assets/products/3300.jpg b/src/components/assets/products/3300.jpg new file mode 100644 index 0000000..1db3d22 Binary files /dev/null and b/src/components/assets/products/3300.jpg differ diff --git a/src/components/assets/products/3800.jpg b/src/components/assets/products/3800.jpg new file mode 100644 index 0000000..4e7f404 Binary files /dev/null and b/src/components/assets/products/3800.jpg differ diff --git a/src/components/assets/products/4.png b/src/components/assets/products/4.png new file mode 100644 index 0000000..3af2f30 Binary files /dev/null and b/src/components/assets/products/4.png differ diff --git a/src/components/assets/products/4000.jpg b/src/components/assets/products/4000.jpg new file mode 100644 index 0000000..808d3bf Binary files /dev/null and b/src/components/assets/products/4000.jpg differ diff --git a/src/components/assets/products/4000a.jpg b/src/components/assets/products/4000a.jpg new file mode 100644 index 0000000..82c9f06 Binary files /dev/null and b/src/components/assets/products/4000a.jpg differ diff --git a/src/components/assets/products/4000aa.jpg b/src/components/assets/products/4000aa.jpg new file mode 100644 index 0000000..8bdc678 Binary files /dev/null and b/src/components/assets/products/4000aa.jpg differ diff --git a/src/components/assets/products/4000ab.jpg b/src/components/assets/products/4000ab.jpg new file mode 100644 index 0000000..cf0cfea Binary files /dev/null and b/src/components/assets/products/4000ab.jpg differ diff --git a/src/components/assets/products/4000ac.jpg b/src/components/assets/products/4000ac.jpg new file mode 100644 index 0000000..9c7f046 Binary files /dev/null and b/src/components/assets/products/4000ac.jpg differ diff --git a/src/components/assets/products/4000acc.jpg b/src/components/assets/products/4000acc.jpg new file mode 100644 index 0000000..f0e2b02 Binary files /dev/null and b/src/components/assets/products/4000acc.jpg differ diff --git a/src/components/assets/products/4000av.jpg b/src/components/assets/products/4000av.jpg new file mode 100644 index 0000000..f91a115 Binary files /dev/null and b/src/components/assets/products/4000av.jpg differ diff --git a/src/components/assets/products/4500.jpg b/src/components/assets/products/4500.jpg new file mode 100644 index 0000000..66bdf65 Binary files /dev/null and b/src/components/assets/products/4500.jpg differ diff --git a/src/components/assets/products/4500a.jpg b/src/components/assets/products/4500a.jpg new file mode 100644 index 0000000..e3109f7 Binary files /dev/null and b/src/components/assets/products/4500a.jpg differ diff --git a/src/components/assets/products/4500aa.jpg b/src/components/assets/products/4500aa.jpg new file mode 100644 index 0000000..1420e29 Binary files /dev/null and b/src/components/assets/products/4500aa.jpg differ diff --git a/src/components/assets/products/4600.jpg b/src/components/assets/products/4600.jpg new file mode 100644 index 0000000..1344e9b Binary files /dev/null and b/src/components/assets/products/4600.jpg differ diff --git a/src/components/assets/products/4700.jpg b/src/components/assets/products/4700.jpg new file mode 100644 index 0000000..543f52f Binary files /dev/null and b/src/components/assets/products/4700.jpg differ diff --git a/src/components/assets/products/5.png b/src/components/assets/products/5.png new file mode 100644 index 0000000..c5da978 Binary files /dev/null and b/src/components/assets/products/5.png differ diff --git a/src/components/assets/products/5000.jpg b/src/components/assets/products/5000.jpg new file mode 100644 index 0000000..1e1c20e Binary files /dev/null and b/src/components/assets/products/5000.jpg differ diff --git a/src/components/assets/products/5000a.jpg b/src/components/assets/products/5000a.jpg new file mode 100644 index 0000000..113ce31 Binary files /dev/null and b/src/components/assets/products/5000a.jpg differ diff --git a/src/components/assets/products/5500.jpg b/src/components/assets/products/5500.jpg new file mode 100644 index 0000000..f77ad83 Binary files /dev/null and b/src/components/assets/products/5500.jpg differ diff --git a/src/components/assets/products/5500a.jpg b/src/components/assets/products/5500a.jpg new file mode 100644 index 0000000..bc52571 Binary files /dev/null and b/src/components/assets/products/5500a.jpg differ diff --git a/src/components/assets/products/5500aa.jpg b/src/components/assets/products/5500aa.jpg new file mode 100644 index 0000000..a6e85ae Binary files /dev/null and b/src/components/assets/products/5500aa.jpg differ diff --git a/src/components/assets/products/6.webp b/src/components/assets/products/6.webp new file mode 100644 index 0000000..cbd43ef Binary files /dev/null and b/src/components/assets/products/6.webp differ diff --git a/src/components/assets/products/6000.jpg b/src/components/assets/products/6000.jpg new file mode 100644 index 0000000..9c11002 Binary files /dev/null and b/src/components/assets/products/6000.jpg differ diff --git a/src/components/assets/products/6000a.jpg b/src/components/assets/products/6000a.jpg new file mode 100644 index 0000000..1a62b70 Binary files /dev/null and b/src/components/assets/products/6000a.jpg differ diff --git a/src/components/assets/products/6000aa.jpg b/src/components/assets/products/6000aa.jpg new file mode 100644 index 0000000..20908d4 Binary files /dev/null and b/src/components/assets/products/6000aa.jpg differ diff --git a/src/components/assets/products/7.webp b/src/components/assets/products/7.webp new file mode 100644 index 0000000..26a7e61 Binary files /dev/null and b/src/components/assets/products/7.webp differ diff --git a/src/components/assets/products/7000.jpg b/src/components/assets/products/7000.jpg new file mode 100644 index 0000000..b09325c Binary files /dev/null and b/src/components/assets/products/7000.jpg differ diff --git a/src/components/assets/products/8.webp b/src/components/assets/products/8.webp new file mode 100644 index 0000000..2eea2a2 Binary files /dev/null and b/src/components/assets/products/8.webp differ diff --git a/src/components/assets/products/800.jpg b/src/components/assets/products/800.jpg new file mode 100644 index 0000000..2f40aae Binary files /dev/null and b/src/components/assets/products/800.jpg differ diff --git a/src/components/assets/products/8000.jpg b/src/components/assets/products/8000.jpg new file mode 100644 index 0000000..d2fd06c Binary files /dev/null and b/src/components/assets/products/8000.jpg differ diff --git a/src/components/assets/products/9000.jpg b/src/components/assets/products/9000.jpg new file mode 100644 index 0000000..53fcf7b Binary files /dev/null and b/src/components/assets/products/9000.jpg differ diff --git a/src/components/assets/products/9000a.jpg b/src/components/assets/products/9000a.jpg new file mode 100644 index 0000000..bdd1946 Binary files /dev/null and b/src/components/assets/products/9000a.jpg differ diff --git a/src/components/assets/products/n10000.jpg b/src/components/assets/products/n10000.jpg new file mode 100644 index 0000000..f8f9df5 Binary files /dev/null and b/src/components/assets/products/n10000.jpg differ diff --git a/src/components/assets/products/n1500.jpg b/src/components/assets/products/n1500.jpg new file mode 100644 index 0000000..f1653a3 Binary files /dev/null and b/src/components/assets/products/n1500.jpg differ diff --git a/src/components/assets/products/n2400.jpg b/src/components/assets/products/n2400.jpg new file mode 100644 index 0000000..5a201dc Binary files /dev/null and b/src/components/assets/products/n2400.jpg differ diff --git a/src/components/assets/products/n4200.jpg b/src/components/assets/products/n4200.jpg new file mode 100644 index 0000000..86ca643 Binary files /dev/null and b/src/components/assets/products/n4200.jpg differ diff --git a/src/components/context/shop-context.jsx b/src/components/context/shop-context.jsx new file mode 100644 index 0000000..87ac953 --- /dev/null +++ b/src/components/context/shop-context.jsx @@ -0,0 +1,58 @@ +import { createContext, useEffect, useState } from "react"; +import { PRODUCTS } from "../products"; + +export const ShopContext = createContext(null); + +const getDefaultCart = () => { + let cart = {}; + for (let i = 1; i < PRODUCTS.length + 1; i++) { + cart[i] = 0; + } + return cart; +}; + +export const ShopContextProvider = (props) => { + const [cartItems, setCartItems] = useState(getDefaultCart()); + + const getTotalCartAmount = () => { + let totalAmount = 0; + for (const item in cartItems) { + if (cartItems[item] > 0) { + let itemInfo = PRODUCTS.find((product) => product.id === Number(item)); + totalAmount += itemInfo.price; + } + } + return totalAmount; + }; + + const addToCart = (itemId) => { + setCartItems((prev) => ({ ...prev, [itemId]: prev[itemId] + 1 })); + }; + + const removeFromCart = (itemId) => { + setCartItems((prev) => ({ ...prev, [itemId]: prev[itemId] - 1 })); + }; + + const updateCartItemCount = (newAmount, itemId) => { + setCartItems((prev) => ({ ...prev, [itemId]: newAmount })); + }; + + const checkout = () => { + setCartItems(getDefaultCart()); + }; + + const contextValue = { + cartItems, + addToCart, + updateCartItemCount, + removeFromCart, + getTotalCartAmount, + checkout, + }; + + return ( + + {props.children} + + ); +}; diff --git a/src/components/layout/CTA.jsx b/src/components/layout/CTA.jsx deleted file mode 100644 index 1a69f4a..0000000 --- a/src/components/layout/CTA.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react' - -const CTA = () =>( -
- -
-) - -export default CTA diff --git a/src/components/layout/Footer.jsx b/src/components/layout/Footer.jsx index ebb623b..047d840 100644 --- a/src/components/layout/Footer.jsx +++ b/src/components/layout/Footer.jsx @@ -1,44 +1,46 @@ +import { useNavigate } from "react-router-dom"; import { socialMedia } from "../../constants"; import { riotlogogray } from "../../assets"; import styles from "../../style"; -const Footer = () => ( -
- -
-
-); + ); +}; export default Footer; diff --git a/src/components/layout/Navbar.jsx b/src/components/layout/Navbar.jsx index 46fc424..02ca581 100644 --- a/src/components/layout/Navbar.jsx +++ b/src/components/layout/Navbar.jsx @@ -4,6 +4,9 @@ import { close, valorantlogo, menu, riotlogo } from "../../assets"; import { navLinks } from "../../constants"; import styles from "../../style"; import { Link } from "react-router-dom"; +import { ShoppingCart } from "phosphor-react"; +import { Logo } from "../../assets"; + const Navbar = () => { const [toggle, setToggle] = useState(false); @@ -16,11 +19,11 @@ const Navbar = () => { >
-
+
valorant
@@ -31,9 +34,8 @@ const Navbar = () => { {navLinks.map((navLink, index) => (
  • {navLink.id.length > 1 && navLink.id[1] === "#" ? ( @@ -50,9 +52,11 @@ const Navbar = () => {
  • - + + +
    { ))} -
    -
    PLAY NOW
    -
    + {/*
    +
    Cart
    +
    */} + +
    Cart
    + +
    diff --git a/src/components/pages/Agent.jsx b/src/components/pages/Agent.jsx deleted file mode 100644 index 5b2413e..0000000 --- a/src/components/pages/Agent.jsx +++ /dev/null @@ -1,142 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { useParams, Link } from "react-router-dom"; -import styles, { layout } from "../../style"; -import { loadAgents } from "../../constants/scripts"; - -const Agent = () => { - let { agentName } = useParams(); - const [agent, setAgent] = useState({}); - const [agents, setAgents] = useState([]); - const [abilitiesIdx, setAbilitiesIdx] = useState(0); - - useEffect(() => { - loadAgents().then((response) => { - setAgents(response.data); - setAgent( - response.data.filter((agent) => agent.displayName === agentName)[0] - ); - }); - }, [agentName]); - - if (!agent.role) return; - - return ( - <> -
    -
    -
    -
    -
    -
    // ROLE
    -
    -

    - {agent.role.displayName} -

    -
    - {agent.role.displayName} -
    -
    -
    - // BIOGRAPHY -
    - {agent.description} -
    -
    -
    -
    -
      - {agents && - agents.map((agent, index) => ( -
    • - - - {index + 1} - -

      - {agent.displayName} -

      - -
    • - ))} -
    -
    -
    - - agents -
    -
    -
    -
    // ROLE
    -
    -

    - {agent.role.displayName} -

    -
    - {agent.role.displayName} -
    -
    -
    // BIOGRAPHY
    - {agent.description} -
    -
    -

    - SPECIAL ABILITIES -

    -
      - {agent.abilities.map((ability, index) => ( -
    • setAbilitiesIdx(index)}> -
      - {ability.slot} -
      -
    • - ))} -
    -
    - {agent.abilities[abilitiesIdx].displayName} -
    - {agent.abilities[abilitiesIdx].description} -
    -
    - - ); -}; - -export default Agent; diff --git a/src/components/pages/Agents.jsx b/src/components/pages/Agents.jsx deleted file mode 100644 index b6559f5..0000000 --- a/src/components/pages/Agents.jsx +++ /dev/null @@ -1,97 +0,0 @@ -import { Link, useNavigate } from "react-router-dom"; -import styles, { layout } from "../../style"; -import React, { useEffect, useState } from "react"; -import { loadAgents } from "../../constants/scripts"; - -const Agents = () => { - const [agents, setAgents] = useState([]); - const navigate = useNavigate(); - - useEffect(() => { - loadAgents().then((response) => { - setAgents(response.data); - }); - }, []); - return ( - <> -
    -
    -
    -
    -
    -
    - // CHECK THE HEADCOUNT -
    - - Find more ways to plant the Spike and style on your enemies - with scrappers, strategists, and hunters of every description. - -
    -
    -
    -
    -
      - {agents && - agents.map((agent, index) => ( -
    • - - - {index + 1} - -

      - {agent.displayName} -

      - -
    • - ))} -
    -
    -
    - agents - agents -
    -
    -
    -
    -
    - // CHECK THE HEADCOUNT -
    - - Find more ways to plant the Spike and style on your enemies with - scrappers, strategists, and hunters of every description. - -
    -
    - -
    -
    -
    - - ); -}; - -export default Agents; diff --git a/src/components/pages/Maps.jsx b/src/components/pages/Maps.jsx deleted file mode 100644 index 7e64931..0000000 --- a/src/components/pages/Maps.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import styles, { layout } from "../../style"; -import React, { useEffect, useState } from "react"; -import { loadMaps } from "../../constants/scripts"; - -const Maps = () => { - const [maps, setMaps] = useState([]); - const [mapIndex, setMapIndex] = useState(0); - - useEffect(() => { - loadMaps().then((response) => { - setMaps(response.data); - }); - console.log(mapIndex) - }, [mapIndex]); - - if (!maps.length) return; - return ( -
    -
    -

    - MAPS -

    -
    -
    -

    - {maps[mapIndex].displayName} -

    -

    - Elit enim sed massa etiam. Mauris eu adipiscing ultrices ametodio - aenean neque. Fusce ipsum orci rhoncus aliporttitor integer platea - placerat. -

    -
    -
      - {maps.map((map, index) => ( -
    • setMapIndex(index)} className={`dot hover:bg-primary bg-red ${index ? "ml-2" : ""} ${index === mapIndex ? "bg-primary" : "bg-red"}`}>
    • - ))} -
    -
    -
    -
    - -
    -
    -
    -
    - ); -}; - -export default Maps; diff --git a/src/components/pages/cart/cart-item.jsx b/src/components/pages/cart/cart-item.jsx new file mode 100644 index 0000000..4d65324 --- /dev/null +++ b/src/components/pages/cart/cart-item.jsx @@ -0,0 +1,24 @@ +import React, { useContext } from "react"; +import { ShopContext } from "../../context/shop-context"; +import { ShoppingCart , Trash} from "phosphor-react"; + +export const CartItem = (props) => { + const { id, productName, price, productImage } = props.data; + const { cartItems, addToCart, removeFromCart, updateCartItemCount } = + useContext(ShopContext); + + return ( +
    + +
    +

    + {productName} +

    +

    Price: ₹{price}

    +
    + +
    +
    +
    + ); +}; \ No newline at end of file diff --git a/src/components/pages/cart/cart.css b/src/components/pages/cart/cart.css new file mode 100644 index 0000000..209ca8c --- /dev/null +++ b/src/components/pages/cart/cart.css @@ -0,0 +1,69 @@ +.cart { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.cartItem { + width: 700px; + height: 260px; + display: flex; + + align-items: center; + box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2); + border-radius: 8px; + margin: 30px; +} + +.cartItem img { + margin: 30px; + width: 400px; +} + +.cartItem .description { + width: 100%; + font-size: 30px; +} + +.countHandler input { + width: 40px; + text-align: center; + font-weight: bolder; +} + +.checkout button { + width: 150px; + height: 50px; + background-color: rgb(19, 19, 19); + color: white; + border: none; + border-radius: 8px; + margin: 10px; + cursor: pointer; +} + +.blankCart { + height: 400px; +} + +.subtotal { + font-size: xx-large; +} + +.delete { + font-size: 20px; + color: red; +} + +.delete button { + display: flex; + align-items: center; /* Aligns icon and text vertically */ + gap: 1px; /* Adds space between the icon and the text */ +} + +.delete button svg { + margin-right: 5px; /* Optional: Adds some space between the icon and text */ +} + + diff --git a/src/components/pages/cart/cart.jsx b/src/components/pages/cart/cart.jsx new file mode 100644 index 0000000..566d5ff --- /dev/null +++ b/src/components/pages/cart/cart.jsx @@ -0,0 +1,79 @@ +import React, { useContext } from "react"; +import { ShopContext } from "../../context/shop-context"; +import { PRODUCTS } from "../../products"; +import { CartItem } from "./cart-item"; +import { useNavigate } from "react-router-dom"; + +import "./cart.css"; +export const Cart = () => { + const { cartItems, getTotalCartAmount } = useContext(ShopContext); + const totalAmount = getTotalCartAmount(); + + + + const whatsapp = () => { + // Collecting the product IDs from the cart + const productIdsInCart = PRODUCTS.filter((product) => cartItems[product.id] > 0) + .map((product) => product.id); + + // Create the WhatsApp message + const message = `Hello, I would like to place an order for product IDs: ${productIdsInCart.join(', ')}. Subtotal: ₹${totalAmount}`; + + // Encode and open WhatsApp link + const url = `https://wa.me/918511037477?text=${encodeURIComponent(message)}`; + window.open(url, "_blank"); + }; + + + + + const navigate = useNavigate(); + + return ( +
    + {/*
    +

    Your Cart Items

    +
    */} +
    + {PRODUCTS.map((product) => { + if (cartItems[product.id] !== 0) { + return ; + } + })} +
    + + {totalAmount > 0 ? ( +
    +
    +

    Subtotal: ₹{totalAmount}

    +
    +
    + + + +
    + +
    + + ) : ( +
    + +
    + )} +
    + ); +}; diff --git a/src/components/pages/home/Blog.jsx b/src/components/pages/home/Blog.jsx new file mode 100644 index 0000000..86ec936 --- /dev/null +++ b/src/components/pages/home/Blog.jsx @@ -0,0 +1,90 @@ +import React from 'react'; + +const Blog = () => { + const blogPosts = [ + { + title: 'The Rise of Valorant: A Game-Changer in Competitive FPS', + date: 'October 15, 2024', + author: 'Aaditya Devadiga', + content: ` + Valorant has quickly become a household name in the competitive gaming scene. Released in June 2020 by Riot Games, this tactical first-person shooter has captured the hearts of players worldwide. With its unique blend of character abilities and precise gunplay, Valorant offers a refreshing take on the FPS genre. + + One of the most significant factors contributing to Valorant's success is its character-driven gameplay. Each agent has unique abilities that can turn the tide of battle, making team composition crucial. This dynamic encourages players to experiment with different strategies, keeping the gameplay fresh and exciting. + + Moreover, Valorant's emphasis on teamwork sets it apart from other shooters. Coordination and communication are vital, as players must work together to secure objectives and outsmart opponents. This fosters a sense of community among players, with many forming long-lasting friendships through the game. + + As the competitive scene continues to grow, more players are looking to buy accounts that reflect their skills and dedication. Our Valorant ID Marketplace offers a platform for players to buy and sell accounts securely, ensuring that everyone can find the perfect account to match their playstyle. + + Whether you're a seasoned veteran looking to expand your collection or a newcomer eager to dive into the game, our marketplace has something for everyone. Join the Valorant revolution today and elevate your gaming experience! + `, + }, + { + title: 'Tips for Climbing the Ranks in Valorant', + date: 'October 10, 2024', + author: 'Jane Smith', + content: ` + Climbing the ranks in Valorant can be a challenging journey, but with the right strategies and mindset, you can achieve your desired rank. Here are some tips to help you on your journey: + + 1. **Master Your Agents**: Focus on a few agents and learn their abilities inside out. Understanding how to use their skills effectively can significantly impact your gameplay. + + 2. **Communication is Key**: Valorant is a team-based game, so communicating with your teammates is essential. Use voice chat or the in-game ping system to share information about enemy locations and strategies. + + 3. **Practice Your Aim**: Consistent aim is crucial in Valorant. Spend time in aim trainers or practice in the shooting range to improve your accuracy and reflexes. + + 4. **Watch and Learn**: Analyze your gameplay and watch professional players to learn new strategies and techniques. You can gain valuable insights into positioning, agent synergy, and game sense. + + 5. **Stay Positive**: Rank climbing can be frustrating at times. Maintaining a positive mindset and focusing on improvement rather than solely on winning can enhance your experience. + + Remember, every player was a beginner once. With dedication and practice, you'll find yourself climbing the ranks and enjoying all that Valorant has to offer! + `, + }, + { + title: 'Valorant Game Sense & Aiming: Mastering the Art of Competitive Play 🎯', + date: 'October 16, 2024', + author: 'Sandesh Bramhane', + content: ` + In Valorant, climbing the ranks isn't just about aiming better—it’s about mastering your game sense and strategic play. While flashy kills and highlight-worthy moments are great, consistency in decision-making and sharpening your mechanics will take your gameplay to the next level. Ready to dominate? Let’s dive into some essential tips to elevate your game sense and aiming skills! 💥 + + 1. 🧠 **Develop Your Game Sense**: + Game sense is your ability to predict enemy moves, make smart plays, and always be one step ahead. Here’s how to refine it: + - Map Awareness: Know the maps like the back of your hand. + - Economy Management: Learn when to save or force-buy. + - Crosshair Placement: Always keep your crosshair at head level. + + 2. 🎯 **Aiming Training: The Path to Precision**: + Improving aim takes dedication. Use tools like Aim Lab or Valorant's shooting range to perfect your mechanics. + + 3. 💪 **Keep the Right Mentality**: + Valorant can be mentally challenging. Stay positive, learn from your losses, and avoid tilt! + `, + }, + ]; + + return ( +
    +

    + Valorant ID Marketplace Blog +

    +
    + {blogPosts.map((post, index) => ( +
    +

    + {post.title} +

    +

    + By {post.author} | {post.date} +

    +

    + {post.content} +

    +
    + ))} +
    +
    + ); +}; + +export default Blog; diff --git a/src/components/pages/home/Hero.jsx b/src/components/pages/home/Hero.jsx index 077c822..0b3c19f 100644 --- a/src/components/pages/home/Hero.jsx +++ b/src/components/pages/home/Hero.jsx @@ -11,23 +11,23 @@ const Hero = () => ( className={`relative flex items-center justify-center flex-col px-[5%] py-[4rem] w-full h-full`} >
    -
    + {/*
    A 5v5 character-based tactical shooter -
    + */}
    - valorant + /> */}
    - + */}
    - - - + {/* */} + + ); diff --git a/src/components/pages/home/LastEpisode.jsx b/src/components/pages/home/LastEpisode.jsx deleted file mode 100644 index 6ad2a9a..0000000 --- a/src/components/pages/home/LastEpisode.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import { overviewimg } from "../../../assets/index"; -import styles from "../../../style"; - -const LastEpisode = () => ( -
    -
    -
    -
    -
    - EPISODE_5 // ACT III / YR 2 -
    -

    - DIMENSION -

    -
    - -
    -
    - overview -
    -); - -export default LastEpisode; diff --git a/src/components/pages/home/Overview.jsx b/src/components/pages/home/Overview.jsx deleted file mode 100644 index 4bae907..0000000 --- a/src/components/pages/home/Overview.jsx +++ /dev/null @@ -1,59 +0,0 @@ -import styles, { layout } from "../../../style"; - -const Overview = () => ( -
    -
    -
    -
    -

    -
    - WE ARE VALORANT -
    -

    -
    -
    -
    -
    - DEFY THE LIMITS -
    - - Blend your style and experience on a global, competitive - stage. You have 13 rounds to attack and defend your side using - sharp gunplay and tactical abilities. And, with one life - per-round, you'll need to think faster than your opponent if - you want to survive. Take on foes across Competitive and - Unranked modes as well as Deathmatch and Spike Rush. - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -); - -export default Overview; diff --git a/src/components/pages/home/Agents.jsx b/src/components/pages/home/about.jsx similarity index 60% rename from src/components/pages/home/Agents.jsx rename to src/components/pages/home/about.jsx index b046d29..310b6d9 100644 --- a/src/components/pages/home/Agents.jsx +++ b/src/components/pages/home/about.jsx @@ -1,7 +1,7 @@ import { Link } from "react-router-dom"; import styles, { layout } from "../../../style"; -const Agents = () => ( +const About = () => (
    @@ -10,36 +10,29 @@ const Agents = () => ( >
    -

    +

    - YOUR AGENTS + WE ARE VALORANT

    - CREATIVITY IS YOUR GREATEST WEAPON. + DEFY THE LIMITS
    - More than guns and bullets, you’ll choose an Agent armed with - adaptive, swift, and lethal abilities that create opportunities - to let your gunplay shine. No two Agents play alike, just as no - two highlight reels will look the same. + Blend your style and experience on a global, competitive + stage. You have 13 rounds to attack and defend your side using + sharp gunplay and tactical abilities. And, with one life + per-round, you'll need to think faster than your opponent if + you want to survive. Take on foes across Competitive and + Unranked modes as well as Deathmatch and Spike Rush.
    - - - +
    -
    ( alt="agents" className="w-[100%] h-[100%] relative" /> -
    +
    */}
    @@ -55,4 +48,4 @@ const Agents = () => ( ); -export default Agents; +export default About; diff --git a/src/components/pages/home/agent.jsx b/src/components/pages/home/agent.jsx new file mode 100644 index 0000000..4684543 --- /dev/null +++ b/src/components/pages/home/agent.jsx @@ -0,0 +1,57 @@ +import { Link } from "react-router-dom"; +import styles, { layout } from "../../../style"; + +const Agent = () => ( +
    +
    +
    +
    +
    +
    +

    +
    + YOUR AGENTS +
    +

    +
    + CREATIVITY IS YOUR GREATEST WEAPON. +
    + + More than guns and bullets, you’ll choose an Agent armed with + adaptive, swift, and lethal abilities that create opportunities + to let your gunplay shine. No two Agents play alike, just as no + two highlight reels will look the same. + +
    + {/* + + */} +
    +
    +
    +
    + agents +
    +
    +
    +
    +
    +); + +export default Agent; diff --git a/src/components/pages/shop/product.jsx b/src/components/pages/shop/product.jsx new file mode 100644 index 0000000..467e38c --- /dev/null +++ b/src/components/pages/shop/product.jsx @@ -0,0 +1,43 @@ +import React, { useContext } from "react"; +import { ShopContext } from "../../context/shop-context"; +import { useNavigate } from "react-router-dom"; + +export const Product = (props) => { + const { id, productName, price, productImage } = props.data; + const { addToCart, cartItems } = useContext(ShopContext); + + const navigate = useNavigate(); + + const cartItemCount = cartItems[id] || 0; + const Original = price + 500; + + const handleButtonClick = () => { + if (cartItemCount === 0) { + addToCart(id); // Add to cart + } else { + navigate("/cart"); // Navigate to cart + } + }; + + return ( +
    + {productName} +
    +
    +

    + {productName} +

    + ₹{Original} + ₹{price} +
    + +
    + ); +}; diff --git a/src/components/pages/shop/shop.css b/src/components/pages/shop/shop.css new file mode 100644 index 0000000..6c175a2 --- /dev/null +++ b/src/components/pages/shop/shop.css @@ -0,0 +1,174 @@ +.shopTitle { + margin-top: 100px; + text-align: center; + font-size: 40px; +} + +.products { + width: 100%; + height: auto; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + place-items: center; +} + +.product { + border-radius: 0px; + width: 400px; + height: 450px; + margin: 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.product img { + width: 100%; + max-width: 500px; /* Restrict the image size for responsiveness */ + height: auto; + border-radius: 0px; +} + +.product .description { + text-align: center; + margin: 0px 0px -36px 0px; +} + +.product:hover { + transition: 0.3s ease-in; + cursor: pointer; +} + +.addToCartBttn { + background-color: transparent; + border: 2px solid rgb(19, 19, 19); + min-width: 100px; + padding: 5px 10px; + border-radius: 15px; +} + +.addToCartBttn:hover { + background-color: rgb(19, 19, 19); + color: white; + cursor: pointer; +} + +/* Responsive Adjustments */ +@media (max-width: 1200px) { + .products { + grid-template-columns: 1fr 1fr; /* Two products per row */ + } +} + +@media (max-width: 768px) { + .products { + grid-template-columns: 1fr; /* One product per row */ + } + + .shopTitle { + font-size: 30px; + } + + .product { + width: 80%; + margin: 20px; + } + + .product img { + max-width: 100%; /* Full width of the product card */ + } +} + +@media (max-width: 480px) { + .shopTitle { + font-size: 24px; + } + + .addToCartBttn { + min-width: 80px; + padding: 3px 8px; + } +} + + +.original-price { + text-decoration: line-through; /* Strikethrough effect */ + color: red; /* Color for the original price */ + margin-right: 10px; /* Space between the original and discounted prices */ +} + +.discounted-price { + color: green; /* Color for the discounted price */ + font-weight: bold; /* Make the discounted price bold */ +} + + +/* ///////////// */ + +.shop { + text-align: center; +} + +.price-filter { + display: flex; + flex-direction: column; + align-items: center; + margin-bottom: 20px; +} + +.slider-container { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + max-width: 300px; + margin-bottom: 15px; +} + +.slider-container label { + font-size: 16px; + margin-bottom: 10px; + font-weight: bold; +} + +.range-slider { + width: 100%; + max-width: 100%; +} + +.price-filter button { + padding: 10px 20px; + border: none; + border-radius: 4px; + cursor: pointer; + margin-top: 10px; +} + +.range-slider .range-slider__range { + position: absolute; + z-index: 1; + transform: translate(0, -50%); + top: 50%; + width: 100%; + height: 100%; + background: #000000; +} + +.range-slider .range-slider__thumb { + position: absolute; + z-index: 3; + top: 50%; + width: 24px; + height: 24px; + transform: translate(-50%, -50%); + border-radius: 50%; + background: #000000; +} + + +@media (min-width: 768px) { + .slider-container { + max-width: 400px; + } +} diff --git a/src/components/pages/shop/shop.jsx b/src/components/pages/shop/shop.jsx new file mode 100644 index 0000000..367cf39 --- /dev/null +++ b/src/components/pages/shop/shop.jsx @@ -0,0 +1,59 @@ +import React, { useState, useEffect } from "react"; +import { PRODUCTS } from "../../products"; +import { Product } from "./product"; +import RangeSlider from 'react-range-slider-input'; +import 'react-range-slider-input/dist/style.css'; +import './shop.css'; + +export const Shop = () => { + // Slider values for min and max price range + const [priceRange, setPriceRange] = useState([0, 15000]); + + // State to hold filtered products + const [filteredProducts, setFilteredProducts] = useState(PRODUCTS); + + // useEffect to automatically filter and sort products when priceRange changes + useEffect(() => { + const filteredAndSortedProducts = PRODUCTS.filter( + (product) => + product.price >= priceRange[0] && product.price <= priceRange[1] + ).sort((a, b) => a.price - b.price); // Sorting by price in ascending order + + setFilteredProducts(filteredAndSortedProducts); + }, [priceRange]); // Runs whenever priceRange changes + + return ( +
    +
    + {/*

    Our Shop

    */} +
    + + {/* Price Filter Section with Single Range Slider */} +
    +
    + + +
    +
    + + {/* Display filtered products */} +
    + {filteredProducts.length > 0 ? ( + filteredProducts.map((product) => ) + ) : ( +

    No products found in this price range.

    + )} +
    +
    + ); +}; diff --git a/src/components/products.js b/src/components/products.js new file mode 100644 index 0000000..b6f545c --- /dev/null +++ b/src/components/products.js @@ -0,0 +1,299 @@ +import product1 from "./assets/products/800.jpg"; +import product2 from "./assets/products/1200.jpg"; +import product3 from "./assets/products/1200a.jpg"; +import product4 from "./assets/products/1200aa.jpg"; +import product5 from "./assets/products/1200ab.jpg"; +import product6 from "./assets/products/1200abb.jpg"; +import product7 from "./assets/products/1200abbb.jpg"; +import product8 from "./assets/products/1200b.jpg"; +import product9 from "./assets/products/1700.jpg"; +import product10 from "./assets/products/1900.jpg"; +import product11 from "./assets/products/2300.jpg"; +import product12 from "./assets/products/2500.jpg"; +import product13 from "./assets/products/2500a.jpg"; +import product14 from "./assets/products/2500ad.jpg"; +import product15 from "./assets/products/2600.jpg"; +import product16 from "./assets/products/2600a.jpg"; +import product17 from "./assets/products/2750.jpg"; +import product18 from "./assets/products/3200.jpg"; +import product19 from "./assets/products/3200a.jpg"; +import product20 from "./assets/products/3300.jpg"; +import product21 from "./assets/products/3800.jpg"; +import product22 from "./assets/products/4000.jpg"; +import product23 from "./assets/products/4000a.jpg"; +import product24 from "./assets/products/4000aa.jpg"; +import product25 from "./assets/products/4000ab.jpg"; +import product26 from "./assets/products/4000ac.jpg"; +import product27 from "./assets/products/4000acc.jpg"; +import product28 from "./assets/products/4000av.jpg"; +import product29 from "./assets/products/4500.jpg"; +import product30 from "./assets/products/4500a.jpg"; +import product31 from "./assets/products/4500aa.jpg"; +import product32 from "./assets/products/4600.jpg"; +import product33 from "./assets/products/4700.jpg"; +import product34 from "./assets/products/5000.jpg"; +import product35 from "./assets/products/5000a.jpg"; +import product36 from "./assets/products/5500aa.jpg"; +import product37 from "./assets/products/6000.jpg"; +import product38 from "./assets/products/6000aa.jpg"; +import product39 from "./assets/products/7000.jpg"; +import product40 from "./assets/products/8000.jpg"; +import product41 from "./assets/products/9000.jpg"; +import product42 from "./assets/products/9000a.jpg"; +import product43 from "./assets/products/15000.jpg"; +import product44 from "./assets/products/5500.jpg" +import product45 from "./assets/products/5500a.jpg" +import product46 from "./assets/products/n1500.jpg"; +import product47 from "./assets/products/n2400.jpg"; +import product48 from "./assets/products/n4200.jpg"; +import product49 from "./assets/products/n10000.jpg"; + + + +export const PRODUCTS = [ + { + id: 1, + price: 800.0, + productImage: product1, + }, + { + id: 2, + price: 1200.0, + productImage: product2, + }, + { + id: 3, + price: 1200.0, + productImage: product3, + }, + { + id: 4, + price: 1200.0, + productImage: product4, + }, + { + id: 5, + price: 1200.0, + productImage: product5, + }, + { + id: 6, + price: 1200.0, + productImage: product6, + }, + { + id: 7, + price: 1200.0, + productImage: product7, + }, + { + id: 8, + price: 1200.0, + productImage: product8, + }, + { + id: 9, + price: 1700, + productImage: product9, + }, + { + id: 10, + price: 1900.0, + productImage: product10, + }, + { + id: 11, + price: 2300.0, + productImage: product11, + }, + { + id: 12, + price: 2500.0, + productImage: product12, + }, + { + id: 13, + price: 2500.0, + productImage: product13, + }, + { + id: 14, + price: 2500.0, + productImage: product14, + }, + { + id: 15, + price: 2600.0, + productImage: product15, + }, + { + id: 16, + price: 2600.0, + productImage: product16, + }, + { + id: 17, + price: 2750.0, + productImage: product17, + }, + { + id: 18, + price: 3200.0, + productImage: product18, + }, + { + id: 19, + price: 3200.0, + productImage: product19, + }, + { + id: 20, + price: 3300.0, + productImage: product20, + }, + { + id: 21, + price: 3800.0, + productImage: product21, + }, + { + id: 22, + price: 4000.0, + productImage: product22, + }, + { + id: 23, + price: 4000.0, + productImage: product23, + }, + { + id: 24, + price: 4000.0, + productImage: product24, + }, + { + id: 25, + price: 4000.0, + productImage: product25, + }, + { + id: 26, + price: 4000.0, + productImage: product26, + }, + { + id: 27, + price: 4000.0, + productImage: product27, + }, + { + id: 28, + price: 4000.0, + productImage: product28, + }, + { + id: 29, + price: 4500.0, + productImage: product29, + }, + { + id: 30, + price: 4500.0, + productImage: product30, + }, + { + id: 31, + price: 4500.0, + productImage: product31, + }, + { + id: 32, + price: 4600.0, + productImage: product32, + }, + { + id: 33, + price: 4700.0, + productImage: product33, + }, + { + id: 34, + price: 5000.0, + productImage: product34, + }, + { + id: 35, + price: 5000.0, + productImage: product35, + }, + { + id: 36, + price: 5500.0, + productImage: product36, + }, + { + id: 37, + price: 6000.0, + productImage: product37, + }, + { + id: 38, + price: 6000.0, + productImage: product38, + }, + { + id: 39, + price: 7000.0, + productImage: product39, + }, + { + id: 40, + price: 8000.0, + productImage: product40, + }, + { + id: 41, + price: 9000.0, + productImage: product41, + }, + { + id: 42, + price: 9000.0, + productImage: product42, + }, + { + id: 43, + price: 15000.0, + productImage: product43, + }, + { + id: 44, + price: 5500.0, + productImage: product44, + }, + { + id: 45, + price: 5500.0, + productImage: product45, + }, + { + id: 46, + price: 15000, + productImage: product46, + }, + { + id: 47, + price: 2400.0, + productImage: product47, + }, + { + id: 48, + price: 4200.0, + productImage: product48, + }, + { + id: 49, + price: 10000.0, + productImage: product49, + }, +]; diff --git a/src/components/utils/NewsCard.jsx b/src/components/utils/NewsCard.jsx index 4397648..66334bb 100644 --- a/src/components/utils/NewsCard.jsx +++ b/src/components/utils/NewsCard.jsx @@ -1,13 +1,13 @@ import React from "react"; const NewsCard = ({ date, category, title, imglink }) => ( -
    -
    - news1 -
    - {date} - {category} -

    {title}

    +
    +
    + {title} +
    + {date} + {category} +

    {title}

    diff --git a/src/constants/index.js b/src/constants/index.js index 1405517..c9d3716 100644 --- a/src/constants/index.js +++ b/src/constants/index.js @@ -1,4 +1,4 @@ -import { facebook, instagram, linkedin, twitter } from "../assets"; +import { Discord, instagram, WhatsApp } from "../assets"; export const navLinks = [ { @@ -6,24 +6,28 @@ export const navLinks = [ title: "Home", }, { - id: "/#news", + id: "/news", title: "News", }, { - id: "/#overview", - title: "Overview", + id: "/aboutus", + title: "About", }, { - id: "/#about", - title: "About", + id: "/reviews", + title: "Review", }, { - id: "/agents", - title: "Agents", + id: "/shop", + title: "Shop", }, { - id: "/maps", - title: "Maps", + id: "/contact", + title: "Contact Us", + }, + { + id: "/blogs", + title: "Blog", }, ]; @@ -33,21 +37,28 @@ export const news = [ title: "AGENT COSPLAY GUIDE: HARBOR", date: "10/27/22", category: "COMMUNITY", - imglink: "https://images.contentstack.io/v3/assets/bltb6530b271fddd0b1/bltefa41c5a9c334a87/6356e33edc15735d5cd03980/Val_Banner_Harbor_Cosplay_1920x1080_New_Tattoo.jpg?auto=webp&disable=upscale&width=1073" + imglink: "https://cmsassets.rgpub.io/sanity/images/dsfx7636/news/d80da40569edce255f709e70b28954f41d39feba-1920x1080.jpg?auto=format&fit=fill&q=80&w=480" }, { id: "news-2", title: "VALORANT’S PREMIER ALPHA TEST", date: "10/26/22", category: "ANNOUNCEMENTS", - imglink: "https://images.contentstack.io/v3/assets/bltb6530b271fddd0b1/blt916477036f3b64c7/63574eaf9a123e5dbdbc61d5/PremierAlpha_Announce_Banner16x9_optimized.jpg?auto=webp&disable=upscale&width=1073" + imglink: "https://cmsassets.rgpub.io/sanity/images/dsfx7636/news/d80da40569edce255f709e70b28954f41d39feba-1920x1080.jpg?auto=format&fit=fill&q=80&w=480" }, { id: "news-3", title: "WHAT’S NEW IN VALORANT EPISODE 5 ACT III", date: "10/18/22", category: "GAME UPDATES", - imglink: "https://images.contentstack.io/v3/assets/bltb6530b271fddd0b1/bltea3dd93cc82f3b59/63484defe9d2c541844df655/VALORANT_2022_EP5-3_Article_Banner_1920x1080_MB01.jpg?auto=webp&disable=upscale&width=1073" + imglink: "https://cmsassets.rgpub.io/sanity/images/dsfx7636/news/d80da40569edce255f709e70b28954f41d39feba-1920x1080.jpg?auto=format&fit=fill&q=80&w=480" + }, + { + id: "news-4", + title: "AGENT COSPLAY GUIDE: HARBOR", + date: "10/27/22", + category: "COMMUNITY", + imglink: "https://cmsassets.rgpub.io/sanity/images/dsfx7636/news/d80da40569edce255f709e70b28954f41d39feba-1920x1080.jpg?auto=format&fit=fill&q=80&w=480" }, ] @@ -55,21 +66,96 @@ export const socialMedia = [ { id: "social-media-1", icon: instagram, - link: "https://www.instagram.com/", + link: "http://instagram.com/teamfury.store", }, { id: "social-media-2", - icon: facebook, - link: "https://www.facebook.com/", + icon: WhatsApp, + link: "http://chat.whatsapp.com/H7LvFLMR88IAs2T1Quy6wZ", }, { id: "social-media-3", - icon: twitter, - link: "https://www.twitter.com/", + icon: Discord, + link: "http://discord.com/invite/Bbsd68NmqT", + }, + +]; + +export const reviews = [ + { + id: "1", + name: "john doe", + image: "", + review: "Bought MYS VP,apart from the little delay the service was very fine and clean people are very helpful and trustworthy no second thoughts needed will come back for more offers soon", + }, + { + id: "2", + name: "Aryan Jadhav", + image: "", + review: "Very trustworthy person was amazing dealing with them…looking forward for more amazing deals.. you can trust them guys!! They are genuine ❤ bought kuronami vandal account for 2200", + }, + { + id: "3", + name: "Shreyash Gawande", + image: "", + review: "100 % trusted and legit Most trusted and friendly, I ordered 1165 vp I got 1170 instead 😂 but really fast and legit service🙏🙏", + }, + { + id: "4", + name: "Aditya Rathod", + image: "", + review: "“I’ve bought multiple VALORANT accounts from TEAM FURY, and I couldn’t be happier. The prices are unbeatable, and the service is top-notch! The owners are so sweet and helpful, making the whole experience smooth and easy.” ", }, { - id: "social-media-4", - icon: linkedin, - link: "https://www.linkedin.com/", + id: "5", + name: "Akshit ", + image: "", + review: "“TEAM FURY is hands down the best place for VALORANT accounts! Affordable prices and exceptional service. The owners were so sweet and answered all my questions without hesitation. Highly recommend them!” ", }, -]; \ No newline at end of file + { + id: "6", + name: "Sarvesh mane", + image: "", + review: "“I was nervous about buying an account online, but TEAM FURY made the process simple and stress-free. The customer service is excellent, and the prices can’t be beat. The owners are so nice and really care about their customers!” ", + }, + { + id: "6", + name: "Sandesh bramhane", + image: "https://i.redd.it/i-swiped-up-on-this-guys-instagram-story-with-the-message-v0-34kcutxi8geb1.jpg?width=1170&format=pjpg&auto=webp&s=a295640a193f5e1ba9234e6ab566e78e0648f3af", + // review: "“I was nervous about buying an account online, but TEAM FURY made the process simple and stress-free. The customer service is excellent, and the prices can’t be beat. The owners are so nice and really care about their customers!” ", + }, + + +] +export const homePageReview = [ + { + id: "1", + name: "Devin Joe", + words: "I recently purchased an account from TEAM FURY, and I couldn't be more thrilled! The transaction was smooth, and the support team was incredibly helpful. They answered all my questions promptly and made me feel at ease throughout the process. Highly recommend!", + }, + { + id: "2", + name: "Emily Chen", + words: "Buying my VALORANT account from TEAM FURY was a fantastic experience! The account was exactly as described, and I received it within hours. The professionalism and dedication of the team are truly commendable. I will definitely return for more!", + }, + { + id: "3", + name: "Alex Johnson", + words: "TEAM FURY exceeded my expectations! I was hesitant at first about purchasing an account online, but their customer service was top-notch. I got a great deal, and the account quality is unmatched. I can't wait to dive into my new VALORANT adventures!", + }, + { + id: "4", + name: "Samantha Lee", + words: "What an amazing service! The staff at TEAM FURY are not only knowledgeable but also incredibly friendly. They helped me pick the perfect account, and their fast delivery was a pleasant surprise. A definite 10/10 for quality and service!", + }, + { + id: "5", + name: "Michael Smith", + words: "I’m so glad I found TEAM FURY! The entire process from start to finish was seamless. They provide a great selection of accounts, and the support team was there for me every step of the way. I highly recommend them for anyone looking to enhance their gaming experience!", + }, + { + id: "6", + name: "Ava Martinez", + words: "TEAM FURY is simply the best! I purchased a VALORANT account and was impressed by the quick service and the reliability of the account. The entire experience was enjoyable, and I will definitely be recommending them to my friends!", + }, +]; diff --git a/src/index.css b/src/index.css index aaf199b..5520d40 100644 --- a/src/index.css +++ b/src/index.css @@ -4,6 +4,40 @@ @tailwind components; @tailwind utilities; +/* Scrollbar container */ +::-webkit-scrollbar { + width: 12px; /* Width of the scrollbar */ + background-color: #1c1f25; /* Dark background like Valorant's theme */ +} + +/* Track (the background of the scrollbar) */ +::-webkit-scrollbar-track { + background-color: #1c1f25; /* Dark track background */ +} + +/* Thumb (the draggable part of the scrollbar) */ +::-webkit-scrollbar-thumb { + background-color: #ff4655; /* Valorant's signature red color */ + border-radius: 8px; /* Rounded edges for a sleek look */ + border: 2px solid #0f1923; /* Dark outer border for contrast */ +} + +/* Thumb hover effect */ +::-webkit-scrollbar-thumb:hover { + background-color: #ff5e73; /* Slightly brighter red on hover for interactivity */ +} + +/* Thumb active (when clicked) */ +::-webkit-scrollbar-thumb:active { + background-color: #ff3141; /* Darker red when clicked */ +} + +/* Optional: Customize the scrollbar corner */ +::-webkit-scrollbar-corner { + background-color: #0f1923; /* Dark corner background for a seamless look */ +} + + :root { --black-gradient: linear-gradient(144.39deg, #ffffff -278.56%, @@ -225,7 +259,7 @@ nav { .btn__inner { position: relative; display: block; - padding: 20px 30px; + padding: 10px 0px; background-color: var(--button-background-color); overflow: hidden; box-shadow: inset 0px 0px 0px 1px var(--button-inner-border-color); @@ -322,7 +356,7 @@ nav { } #hero::after { - background-color: #e6e8e1; + background-color: rgba(9, 151, 124, 0.1); } @media (min-width: 768px) { @@ -351,4 +385,7 @@ select { select>option{ font-size: 1.5rem; +} +.range-slider { + accent-color: red; } \ No newline at end of file diff --git a/src/pages/about/About.jsx b/src/pages/about/About.jsx new file mode 100644 index 0000000..9bb8686 --- /dev/null +++ b/src/pages/about/About.jsx @@ -0,0 +1,43 @@ +import React from 'react'; +import styles, { layout } from "../../style"; + +const About = () => { + return ( +
    +
    +
    +
    +
    +
    +

    +
    + WE ARE FURY +
    +

    +
    + DEFY THE LIMITS +
    + + Blend your style and experience on a global, competitive stage. You have 13 rounds to attack and defend your side using sharp gunplay and tactical abilities. And, with one life per-round, you'll need to think faster than your opponent if you want to survive. Take on foes across Competitive and Unranked modes as well as Deathmatch and Spike Rush. + +
    + {/* Add content for buttons or more information here */} +
    +
    +
    +
    + {/* If needed, add the image back in this block */} + {/* agents */} +
    +
    +
    +
    +
    + ); +}; + +export default About; diff --git a/src/pages/about/TermsAndServices.jsx b/src/pages/about/TermsAndServices.jsx new file mode 100644 index 0000000..d9d9e4e --- /dev/null +++ b/src/pages/about/TermsAndServices.jsx @@ -0,0 +1,88 @@ +import React from 'react'; + +const TermsAndServices = () => { + return ( +
    + + {/* Hero Section */} +
    +

    + Terms and Services +

    +
    + + {/* Content Section */} +
    + + {/* Section 1 */} +
    +

    + 1. Introduction +

    +

    + Welcome to the Valorant ID Marketplace. By accessing or using our services, you agree to comply with and be bound by the following terms and conditions. Please read these terms carefully before using our services. +

    +
    + + {/* Section 2 */} +
    +

    + 2. Acceptance of Terms +

    +

    + By using our website, you affirm that you are at least 18 years of age or have the consent of a parent or guardian. If you do not agree to these terms, please do not use our services. +

    +
    + + {/* Section 3 */} +
    +

    + 3. Services Offered +

    +
      +
    • Account listing for sale.
    • +
    • Account purchase options.
    • +
    • Account verification services.
    • +
    +
    + + {/* Section 4 */} +
    +

    + 4. User Responsibilities +

    +

    + As a user of our services, you agree to: +

    +
      +
    • Provide accurate information when creating an account.
    • +
    • Respect the rights of other users and not engage in fraudulent activities.
    • +
    • Not share your account credentials with anyone.
    • +
    +
    + + {/* Section 5 - 10 */} + {/* Repeat similar pattern for the remaining sections */} + + {/* Final Section */} +
    +

    + 10. Contact Information +

    +

    + If you have any questions or concerns regarding these terms, please contact us at: +

    +

    + Email: support@valorantidmarketplace.com +

    +

    + Phone: +1 (123) 456-7890 +

    +
    + +
    +
    + ); +}; + +export default TermsAndServices; diff --git a/src/pages/about/cokkie.jsx b/src/pages/about/cokkie.jsx new file mode 100644 index 0000000..7001cd0 --- /dev/null +++ b/src/pages/about/cokkie.jsx @@ -0,0 +1,87 @@ +import React, { useState } from 'react'; +import { useNavigate } from "react-router-dom"; + +const CookiePreference = () => { + + const navigate = useNavigate(); + + const [preferences, setPreferences] = useState({ + essential: true, + analytics: false, + marketing: false, + }); + + const handleChange = (e) => { + const { name, checked } = e.target; + setPreferences((prev) => ({ ...prev, [name]: checked })); + }; + + const handleSubmit = (e) => { + e.preventDefault(); + // Logic to handle the preferences, e.g., save to cookies or state + console.log('Cookie Preferences:', preferences); + }; + + return ( +
    +

    Cookie Preferences

    +

    + We use cookies to enhance your experience on our site. Please select your preferences below: +

    +
    +
    + +

    These cookies are necessary for the website to function.

    +
    + +
    + +

    Help us analyze user behavior to improve our service.

    +
    + +
    + +

    Cookies used for delivering personalized ads.

    +
    + + +
    +
    + ); +}; + +export default CookiePreference; diff --git a/src/pages/about/privacy.jsx b/src/pages/about/privacy.jsx new file mode 100644 index 0000000..f3a04da --- /dev/null +++ b/src/pages/about/privacy.jsx @@ -0,0 +1,98 @@ +import React from 'react'; + +const PrivacyNotes = () => { + return ( +
    + + {/* Hero Section */} +
    +

    + Privacy Notes +

    +
    + + {/* Content Section */} +
    + + {/* Section 1 */} +
    +

    + 1. Data Collection +

    +

    + We collect personal information such as your name, email address, and payment details to facilitate transactions on the Valorant ID Marketplace. By using our services, you consent to the collection and use of this information as outlined in this privacy policy. +

    +
    + + {/* Section 2 */} +
    +

    + 2. How We Use Your Information +

    +

    + Your personal information is used solely for the purpose of providing our services, processing transactions, and improving your user experience. We may also use your contact information to send important updates regarding your account or services. +

    +
    + + {/* Section 3 */} +
    +

    + 3. Data Protection +

    +

    + We implement industry-standard security measures to protect your data from unauthorized access, alteration, or disclosure. While we strive to keep your data secure, no method of transmission over the internet is 100% secure. +

    +
    + + {/* Section 4 */} +
    +

    + 4. Sharing Your Information +

    +

    + We do not sell, trade, or rent your personal information to third parties. We may share your data with trusted partners solely for the purpose of operating our services, such as payment processing. +

    +
    + + {/* Section 5 */} +
    +

    + 5. Cookies and Tracking +

    +

    + Our website uses cookies to enhance your experience, track analytics, and improve functionality. You can choose to disable cookies in your browser settings, but this may affect your ability to use some features of our site. +

    +
    + + {/* Section 6 */} +
    +

    + 6. Changes to this Policy +

    +

    + We reserve the right to modify this privacy policy at any time. Any changes will be posted on this page, and we encourage you to review the policy periodically. +

    +
    + + {/* Section 7 */} +
    +

    + 7. Contact Us +

    +

    + If you have any questions or concerns about our privacy practices, please reach out to us at: +

    +

    + Email: support@valorantidmarketplace.com +

    +

    + Phone: +1 (123) 456-7890 +

    +
    + +
    +
    + ); +}; + +export default PrivacyNotes; diff --git a/src/pages/cart/cart-item.jsx b/src/pages/cart/cart-item.jsx new file mode 100644 index 0000000..c81dfd2 --- /dev/null +++ b/src/pages/cart/cart-item.jsx @@ -0,0 +1,35 @@ +import React, { useContext } from "react"; +import { ShopContext } from "../../components/context/shop-context"; + +export const CartItem = (props) => { + const { id, productName, price, productImage } = props.data; + const { cartItems, addToCart, removeFromCart, updateCartItemCount } = + useContext(ShopContext); + + return ( +
    + {productName} +
    +

    + {productName} +

    +

    + Price: ₹{price} +

    +
    + +
    +
    +
    + + ); +}; diff --git a/src/pages/cart/cart.css b/src/pages/cart/cart.css new file mode 100644 index 0000000..bb3bc14 --- /dev/null +++ b/src/pages/cart/cart.css @@ -0,0 +1,49 @@ +.cart { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.cartItem { + width: 700px; + height: 250px; + display: flex; + justify-content: space-around; + align-items: center; + box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2); + border-radius: 25px; + margin: 30px; +} + +.cartItem img { + margin: 20px; + width: 400px; + border-radius: 15px; +} + +.cartItem .description { + width: 100%; + font-size: 30px; +} + +.countHandler input { + width: 40px; + text-align: center; + font-weight: bolder; +} + +.checkout button { + width: 150px; + height: 50px; + background-color: rgb(19, 19, 19); + color: white; + border: none; + border-radius: 8px; + margin: 10px; + cursor: pointer; +} + +.blankCart { + height: 400px; +} \ No newline at end of file diff --git a/src/pages/cart/cart.jsx b/src/pages/cart/cart.jsx new file mode 100644 index 0000000..b280747 --- /dev/null +++ b/src/pages/cart/cart.jsx @@ -0,0 +1,68 @@ +import React, { useContext } from "react"; +import { ShopContext } from "../../components/context/shop-context"; +import { PRODUCTS } from "../../components/products"; +import { CartItem } from "./cart-item"; +import { useNavigate } from "react-router-dom"; + +import "./cart.css"; +export const Cart = () => { + const { cartItems, getTotalCartAmount, checkout } = useContext(ShopContext); + const totalAmount = getTotalCartAmount(); + + + const whatsapp = () => { + const url = `https://wa.me/${918511037477}`; + window.open(url, "_blank"); + + }; + + const navigate = useNavigate(); + + return ( +
    + {/*
    +

    Your Cart Items

    +
    */} +
    + {PRODUCTS.map((product) => { + if (cartItems[product.id] !== 0) { + return ; + } + })} +
    + + {totalAmount > 0 ? ( +
    +
    +

    Subtotal: ₹{totalAmount}

    +
    +
    + + + +
    + +
    + + ) : ( +
    + +
    + )} +
    + ); +}; diff --git a/src/pages/contact/Contact.jsx b/src/pages/contact/Contact.jsx new file mode 100644 index 0000000..e808504 --- /dev/null +++ b/src/pages/contact/Contact.jsx @@ -0,0 +1,132 @@ +import React, { useState } from 'react'; +import { socialMedia } from "../../constants"; +import logo from "../../assets/logo.png"; + +const Contact = () => { + const initialFormData = { + name: "", + email: "", + phone: "", + address: "", + subject: "", + message: "", + }; + + const [formData, setFormData] = useState(initialFormData); + + const handleChange = (e) => { + setFormData({ ...formData, [e.target.name]: e.target.value }); + }; + + return ( +
    +
    +
    + +
    +

    Contact Us

    +

    You can also contact us through Social media:

    +
    +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + +
    +
    + +
    + + +
    + +
    + + +
    + + {/* Optional hidden fields */} + + + + +
    +
    +
    + ); +}; + +export default Contact; diff --git a/src/pages/home/Hero.jsx b/src/pages/home/Hero.jsx new file mode 100644 index 0000000..b298823 --- /dev/null +++ b/src/pages/home/Hero.jsx @@ -0,0 +1,67 @@ +import React, { useEffect } from "react"; +import styles from "../../style"; // Assuming you have styles defined here. +import { valoranttext } from "../../assets/index"; // Assuming this is your asset. +import { useNavigate } from "react-router-dom"; + +const Hero = () => { + // Move useNavigate inside the Hero component + const navigate = useNavigate(); + + // Define visitShop function within the component + const visitShop = () => { + navigate('/shop'); + }; + + // You can use useEffect if you want to run some side effects on component mount + useEffect(() => { + // You can add any logic that needs to run on mount here + // Currently, it's empty because we don't have any specific logic. + }, []); // Empty array means this runs once on mount + + return ( +
    +
    +
    + {/* Optional content could be uncommented if needed */} + {/*
    + A 5v5 character-based tactical shooter +
    */} +
    + {/* Uncomment this if wanted */} + {/* valorant */} +
    +
    + {/* */} +
    + +
    + ); +}; + +export default Hero; diff --git a/src/pages/home/Home.jsx b/src/pages/home/Home.jsx new file mode 100644 index 0000000..23f61ba --- /dev/null +++ b/src/pages/home/Home.jsx @@ -0,0 +1,24 @@ +import styles from "../../style"; +import Hero from "../home/Hero"; +import News from "../home/News"; +// import LastEpisode from "../home/LastEpisode"; +//import Overview from "../home/Overview"; +import About from "./about"; +import Agent from "./agent"; + +const Home = () => ( + <> +
    +
    + + + {/* */} +
    +
    + {/* */} + {/* + */} + +); + +export default Home; diff --git a/src/pages/home/News.jsx b/src/pages/home/News.jsx new file mode 100644 index 0000000..911edc1 --- /dev/null +++ b/src/pages/home/News.jsx @@ -0,0 +1,35 @@ +import styles, { layout } from "../../style"; +import { news } from "../../constants"; +import { homePageReview } from "../../constants"; +import icon from "./icon.svg"; +import "./home.css"; + +const News = () => ( +
    +
    +
    +

    + THE LATEST +

    +
    + {homePageReview.map((review) => ( +
    + Icon + {review.name} +
    +
    + {review.words} +
    +
    +
    + ))} +
    +
    +
    +
    +); + +export default News; diff --git a/src/pages/home/about.jsx b/src/pages/home/about.jsx new file mode 100644 index 0000000..05d9854 --- /dev/null +++ b/src/pages/home/about.jsx @@ -0,0 +1,51 @@ +import { Link } from "react-router-dom"; +import styles, { layout } from "../../style"; + +const About = () => ( +
    +
    +
    +
    +
    +
    +

    +
    + WE ARE VALORANT +
    +

    +
    + DEFY THE LIMITS +
    + + Blend your style and experience on a global, competitive + stage. You have 13 rounds to attack and defend your side using + sharp gunplay and tactical abilities. And, with one life + per-round, you'll need to think faster than your opponent if + you want to survive. Take on foes across Competitive and + Unranked modes as well as Deathmatch and Spike Rush. + +
    + +
    +
    +
    +
    + {/*
    + agents +
    */} +
    +
    +
    +
    +
    +); + +export default About; diff --git a/src/components/pages/home/MapsSection.jsx b/src/pages/home/agent.jsx similarity index 71% rename from src/components/pages/home/MapsSection.jsx rename to src/pages/home/agent.jsx index 48fbd2c..d03ff22 100644 --- a/src/components/pages/home/MapsSection.jsx +++ b/src/pages/home/agent.jsx @@ -1,8 +1,8 @@ import { Link } from "react-router-dom"; -import styles, { layout } from "../../../style"; +import styles, { layout } from "../../style"; -const Maps = () => ( -
    +const Agent = () => ( +
    (

    - YOUR MAPS + YOUR AGENTS

    - FIGHT AROUND THE WORLD. + CREATIVITY IS YOUR GREATEST WEAPON.
    - Each map is a playground to showcase your creative thinking. - Purpose-built for team strategies, spectacular plays, and clutch - moments. Make the play others will imitate for years to come. + More than guns and bullets, you’ll choose an Agent armed with + adaptive, swift, and lethal abilities that create opportunities + to let your gunplay shine. No two Agents play alike, just as no + two highlight reels will look the same.
    - + {/* - + */}
    - agents + /> */}
    @@ -53,4 +54,4 @@ const Maps = () => (
    ); -export default Maps; +export default Agent; diff --git a/src/pages/home/home.css b/src/pages/home/home.css new file mode 100644 index 0000000..6e6493e --- /dev/null +++ b/src/pages/home/home.css @@ -0,0 +1,8 @@ +.scrollbar-hidden::-webkit-scrollbar { + display: none; /* Hide scrollbar for Chrome, Safari, and Opera */ + } + + .scrollbar-hidden { + -ms-overflow-style: none; /* Hide scrollbar for Internet Explorer and Edge */ + scrollbar-width: none; /* Hide scrollbar for Firefox */ + } \ No newline at end of file diff --git a/src/pages/home/icon.svg b/src/pages/home/icon.svg new file mode 100644 index 0000000..76976e4 --- /dev/null +++ b/src/pages/home/icon.svg @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/src/pages/news/News.jsx b/src/pages/news/News.jsx new file mode 100644 index 0000000..3f1d85c --- /dev/null +++ b/src/pages/news/News.jsx @@ -0,0 +1,33 @@ +import React from 'react' +import styles, { layout } from "../../style"; +import { news } from "../../constants/index" +import NewsCard from "../../components/utils/NewsCard"; + +const News = () => { + return ( +
    +
    +
    +

    + THE LATEST NEWS +

    +
    +
    + {news.map((newsItem) => ( + + ))} +
    +
    +
    +
    +
    + ) +} + +export default News \ No newline at end of file diff --git a/src/pages/reviews/Reviews.jsx b/src/pages/reviews/Reviews.jsx new file mode 100644 index 0000000..8c8cdfc --- /dev/null +++ b/src/pages/reviews/Reviews.jsx @@ -0,0 +1,81 @@ +import React, { useState } from 'react'; +import { reviews } from '../../constants/index'; +import { XMarkIcon } from '@heroicons/react/24/solid'; // Updated import for Heroicons v2 + +const Reviews = () => { + const [selectedImage, setSelectedImage] = useState(null); + + const handleImageClick = (image) => { + setSelectedImage(image); + }; + + const closeModal = () => { + setSelectedImage(null); + }; + + const handleOutsideClick = (event) => { + if (event.target.classList.contains('modal-overlay')) { + closeModal(); + } + }; + + return ( +
    +

    + Player Reviews +

    +
    + {reviews.map((review) => ( +
    +
    +
    + {review.name.charAt(0).toUpperCase()} +
    +

    + {review.name} +

    +
    +

    "{review.review}"

    + {review.image && ( +
    + {review.name} handleImageClick(review.image)} + /> +
    + )} +
    + ))} +
    + + {selectedImage && ( +
    +
    + Selected +
    + +
    + )} +
    + ); +}; + +export default Reviews; diff --git a/src/pages/shop/product.jsx b/src/pages/shop/product.jsx new file mode 100644 index 0000000..2ff0046 --- /dev/null +++ b/src/pages/shop/product.jsx @@ -0,0 +1,59 @@ +import React, { useContext, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { ShopContext } from "../../components/context/shop-context"; + +export const Product = (props) => { + const { id, productName, price, productImage } = props.data; + const { addToCart, removeFromCart, cartItems } = useContext(ShopContext); + const [showCartButton, setShowCartButton] = useState(false); + const cartItemCount = cartItems[id]; + const originalPrice = price + 500; + const navigate = useNavigate(); + + const handleAddToCart = () => { + setShowCartButton(true); + setTimeout(() => setShowCartButton(false), 10000); + }; + + const handleButtonClick = () => { + if (cartItemCount > 0) { + removeFromCart(id); + } else { + addToCart(id); + handleAddToCart(); + } + }; + + return ( +
    + {productName} +
    +

    {productName}

    +
    + ₹{originalPrice} + ₹{price} +
    +
    +
    + +
    + {showCartButton && ( +
    navigate('/cart')} + > + /icon/ + CheckOut Cart +
    + )} +
    + ); +}; diff --git a/src/pages/shop/shop.css b/src/pages/shop/shop.css new file mode 100644 index 0000000..c7d1db6 --- /dev/null +++ b/src/pages/shop/shop.css @@ -0,0 +1,119 @@ +.shopTitle { + text-align: center; + font-size: 40px; +} + +.products { + width: 100%; + height: auto; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + place-items: center; +} + +.product { + border-radius: 0px; + width: 400px; + height: 450px; + margin: 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.product img { + width: 100%; + max-width: 500px; /* Restrict the image size for responsiveness */ + height: auto; + border-radius: 0px; +} + +.product .description { + text-align: center; + margin: 0px 0px -36px 0px; +} + +.product:hover { + transition: 0.3s ease-in; + cursor: pointer; +} + +.addToCartBttn { + background-color: transparent; + border: 2px solid rgb(19, 19, 19); + min-width: 100px; + padding: 5px 10px; + border-radius: 15px; +} + +.addToCartBttn:hover { + background-color: rgb(19, 19, 19); + color: white; + cursor: pointer; +} + +/* Responsive Adjustments */ +@media (max-width: 1200px) { + .products { + grid-template-columns: 1fr 1fr; /* Two products per row */ + } +} + +@media (max-width: 768px) { + .products { + grid-template-columns: 1fr; /* One product per row */ + } + + .shopTitle { + font-size: 30px; + } + + .product { + width: 80%; + margin: 20px; + } + + .product img { + max-width: 100%; /* Full width of the product card */ + } +} + +@media (max-width: 480px) { + .shopTitle { + font-size: 24px; + } + + .addToCartBttn { + min-width: 80px; + padding: 3px 8px; + } +} + + +.original-price { + text-decoration: line-through; /* Strikethrough effect */ + color: red; /* Color for the original price */ + margin-right: 10px; /* Space between the original and discounted prices */ +} + +.discounted-price { + color: green; /* Color for the discounted price */ + font-weight: bold; /* Make the discounted price bold */ +} +.animated-cart-button { + opacity: 0; + transition: opacity 0.5s ease, transform 0.5s ease; + animation: fadeIn 0.5s forwards; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} diff --git a/src/pages/shop/shop.jsx b/src/pages/shop/shop.jsx new file mode 100644 index 0000000..0cd0c12 --- /dev/null +++ b/src/pages/shop/shop.jsx @@ -0,0 +1,143 @@ +import React, { useState, useEffect } from "react"; +import { useInView } from "react-intersection-observer"; +import RangeSlider from 'react-range-slider-input'; +import 'react-range-slider-input/dist/style.css'; // Ensure the styles for the range slider are imported +import { PRODUCTS } from "../../components/products"; +import { Product } from "./product"; +import "./shop.css"; // Your custom CSS file + +export const Shop = () => { + const [visibleProducts, setVisibleProducts] = useState(6); + const [isFetching, setIsFetching] = useState(false); + const [priceRange, setPriceRange] = useState([0, 15000]); // Initialize the price range + const { ref, inView } = useInView({ + threshold: 1.0, + }); + const [filteredProducts, setFilteredProducts] = useState(PRODUCTS); + + // State for sorting + const [sortOption, setSortOption] = useState("default"); // "default", "priceAsc", "priceDesc" + + const hasMoreProducts = visibleProducts < filteredProducts.length; + + // Filter products based on the price range and sort them + useEffect(() => { + const filteredAndSortedProducts = PRODUCTS.filter( + (product) => + product.price >= priceRange[0] && product.price <= priceRange[1] + ); + + // Sort products based on the selected sort option + if (sortOption === "priceAsc") { + filteredAndSortedProducts.sort((a, b) => a.price - b.price); // Sorting by price ascending + } else if (sortOption === "priceDesc") { + filteredAndSortedProducts.sort((a, b) => b.price - a.price); // Sorting by price descending + } + + setFilteredProducts(filteredAndSortedProducts); + setVisibleProducts(6); // Reset visible products when price range or sort option changes + }, [priceRange, sortOption]); + + // Load more products on scroll when inView + useEffect(() => { + if (inView && !isFetching && hasMoreProducts) { + setIsFetching(true); + const loadMoreProducts = () => { + setTimeout(() => { + setVisibleProducts((prevVisible) => + Math.min(prevVisible + 6, filteredProducts.length) + ); + setIsFetching(false); + }, 300); + }; + loadMoreProducts(); + } + }, [inView, isFetching, hasMoreProducts, filteredProducts.length]); + + // Handle price range changes + const handlePriceRangeChange = (value) => { + setPriceRange(value); + }; + + // Handle sorting option change + const handleSortChange = (sortby) => { + setSortOption(sortby); + }; + + return ( +
    +
    +

    + PRODUCT SHOP +

    +
    + + {/* Range Slider for selecting price range */} +
    +
    +
    + +
    + +
    +
    + + {/* Sort By Buttons */} +
    +
    +
    + +
    +
    + + + +
    +
    +
    +
    + +
    + {filteredProducts.slice(0, visibleProducts).map((product) => ( + + ))} +
    + + {isFetching && hasMoreProducts && ( +
    + Loading... +
    + )} + + {hasMoreProducts && ( +
    + )} +
    + ); +}; diff --git a/src/style.js b/src/style.js index 9edd4ac..2584b22 100644 --- a/src/style.js +++ b/src/style.js @@ -1,5 +1,5 @@ const styles = { - boxWidth: "xl:max-w-[1280px] w-full", + boxWidth: "w-full", heading2: "font-poppins font-semibold xs:text-[48px] text-[40px] text-white xs:leading-[76.8px] leading-[66.8px] w-full", paragraph: "font-poppins font-normal text-dimWhite text-[18px] leading-[30.8px]", diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..9bbe442 --- /dev/null +++ b/vercel.json @@ -0,0 +1,10 @@ +{ + "cleanUrls": true, + "rewrites": [ + { + "source": "/(.*)", + "destination": "/" + } + ] + } + \ No newline at end of file diff --git a/{ b/{ new file mode 100644 index 0000000..e69de29