├── .gitignore
├── README.md
├── build
├── _redirects
├── asset-manifest.json
├── index.html
└── static
│ ├── css
│ ├── main.32e9ca1d.css
│ └── main.32e9ca1d.css.map
│ └── js
│ ├── main.66060ca7.js
│ ├── main.66060ca7.js.LICENSE.txt
│ └── main.66060ca7.js.map
├── package-lock.json
├── package.json
├── public
├── _redirects
└── index.html
├── src
├── App.js
├── app
│ └── store.js
├── components
│ ├── Card.js
│ ├── CheckOutSuccess.jsx
│ ├── Footer.js
│ ├── Navbar.js
│ ├── PayButton.jsx
│ ├── Slide.js
│ └── Slider.js
├── features
│ └── products
│ │ ├── cartSlice.js
│ │ └── productSlice.js
├── index.css
├── index.js
├── pages
│ ├── Cart.js
│ ├── Home.js
│ ├── NotFound.js
│ └── Products.js
└── utlities
│ └── currencyFormatter.js
└── tailwind.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 |
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Tech Alpha
2 |
3 | Tech-Alpha Ecommerce is an advanced online shopping platform powered by the MERN (MongoDB, Express, React, Node.js) stack. It enables users to enjoy a seamless shopping experience, with a dedicated cart page that allows effortless product additions. The integration of Redux state management ensures a high level of efficiency and flexibility.
4 |
5 | ## Features
6 | - State management using Redux Toolkit
7 | - Fetches product data using Redux thunk.
8 | - A shopping cart that uses Redux Toolkit for state management.
9 | - The cart items are saved in the client's browser local storage
10 | - Styling using Tailwind CSS
11 |
12 | ## Tools Used
13 |
14 | - Frontend: React, Redux
15 | - Backend: Node.js, Express
16 | - Database: MongoDB
17 | - State Management: Redux
18 | - UI Styling: TailwindCSS
19 |
20 | ## Installation (Client)
21 |
22 | 1. Clone this repository: `git clone https://github.com/Rafiul29/tech-alpha-client.git`
23 | 2. Navigate to the client directory: `cd tech-alpha-client`
24 | 3. Install dependencies: `npm install`
25 | 4. Start the client: `npm start`
26 | 5. Access the client in your browser at: `http://localhost:3000`
27 |
28 | ## Installation (Server)
29 |
30 | 1. Clone this repository: `git clone https://github.com/Rafiul29/tech-alpha-server.git`
31 | 2. Navigate to the server directory: `cd tech-alpha-server`
32 | 3. Install dependencies: `npm install`
33 | 4. Start the server: `npm start`
34 | 5. Create a `.env` file in the server directory and set the necessary environment variables (e.g, MongoDB URI, PORT).
35 | - `MONGODB_URI`: the MongoDB connection string
36 | - `PORT`: a secret string for JWT authentication
37 | 6. The server will be running at: `http://localhost:5000`
38 |
39 | ## Links
40 |
41 | - [Live Demo](https://tech-alpha-nu.vercel.app/)
42 | - [Front-End Repository](https://github.com/Rafiul29/tech-alpha-client.git)
43 | - [Back-End Repository](https://github.com/Rafiul29/tech-alpha-server.git)
44 |
--------------------------------------------------------------------------------
/build/_redirects:
--------------------------------------------------------------------------------
1 | /* /index.html 200
--------------------------------------------------------------------------------
/build/asset-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": {
3 | "main.css": "/static/css/main.32e9ca1d.css",
4 | "main.js": "/static/js/main.66060ca7.js",
5 | "index.html": "/index.html",
6 | "main.32e9ca1d.css.map": "/static/css/main.32e9ca1d.css.map",
7 | "main.66060ca7.js.map": "/static/js/main.66060ca7.js.map"
8 | },
9 | "entrypoints": [
10 | "static/css/main.32e9ca1d.css",
11 | "static/js/main.66060ca7.js"
12 | ]
13 | }
--------------------------------------------------------------------------------
/build/index.html:
--------------------------------------------------------------------------------
1 |
tech alpha
--------------------------------------------------------------------------------
/build/static/css/main.32e9ca1d.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap);@import url(https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap);
2 | /*
3 | ! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com
4 | */*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.absolute{position:absolute}.relative{position:relative}.-top-3{top:-.75rem}.-right-3{right:-.75rem}.top-\[50\%\]{top:50%}.left-\[50\%\]{left:50%}.bottom-20{bottom:5rem}.left-0{left:0}.right-0{right:0}.z-\[2\]{z-index:2}.z-\[1\]{z-index:1}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.mx-auto{margin-left:auto;margin-right:auto}.mt-5{margin-top:1.25rem}.mb-10{margin-bottom:2.5rem}.ml-auto{margin-left:auto}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-1{margin-top:.25rem}.flex{display:flex}.grid{display:grid}.h-72{height:18rem}.h-full{height:100%}.h-\[5\.25rem\]{height:5.25rem}.h-\[4\.8rem\]{height:4.8rem}.h-20{height:5rem}.h-5{height:1.25rem}.h-14{height:3.5rem}.h-32{height:8rem}.h-10{height:2.5rem}.min-h-screen{min-height:100vh}.w-full{width:100%}.w-5{width:1.25rem}.w-4\/5{width:80%}.w-3\/5{width:60%}.w-72{width:18rem}.w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.w-20{width:5rem}.w-32{width:8rem}.w-10{width:2.5rem}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-5{gap:1.25rem}.gap-10{gap:2.5rem}.gap-3{gap:.75rem}.gap-1{gap:.25rem}.overflow-hidden{overflow:hidden}.rounded-xl{border-radius:.75rem}.rounded-md{border-radius:.375rem}.rounded-full{border-radius:9999px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-violet-50{--tw-border-opacity:1;border-color:rgb(245 243 255/var(--tw-border-opacity))}.border-violet-200{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity))}.bg-violet-700{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-violet-900{--tw-bg-opacity:1;background-color:rgb(76 29 149/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-violet-400{--tw-bg-opacity:1;background-color:rgb(167 139 250/var(--tw-bg-opacity))}.object-cover{object-fit:cover}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-8{padding-left:2rem;padding-right:2rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-5{padding-bottom:1.25rem}.pb-3{padding-bottom:.75rem}.text-center{text-align:center}.text-xl{font-size:1.25rem}.text-lg,.text-xl{line-height:1.75rem}.text-lg{font-size:1.125rem}.text-7xl{font-size:4.5rem;line-height:1}.text-2xl{font-size:1.5rem;line-height:2rem}.font-semibold{font-weight:600}.font-medium{font-weight:500}.font-bold{font-weight:700}.uppercase{text-transform:uppercase}.tracking-widest{letter-spacing:.1em}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.text-violet-50{--tw-text-opacity:1;color:rgb(245 243 255/var(--tw-text-opacity))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.text-sky-50{--tw-text-opacity:1;color:rgb(240 249 255/var(--tw-text-opacity))}.text-violet-200{--tw-text-opacity:1;color:rgb(221 214 254/var(--tw-text-opacity))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-violet-300{--tw-shadow-color:#c4b5fd;--tw-shadow:var(--tw-shadow-colored)}.filter{-webkit-filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.duration-300{transition-duration:.3s}body{font-family:Poppins,sans-serif;overflow-x:hidden}.space-font{font-family:Space Grotesk,sans-serif}.nav-link{position:relative}.nav-link:after{background-color:#f9fafb;bottom:0;content:"";height:1px;left:50%;position:absolute;-webkit-transform:translate(-50%);transform:translate(-50%);transition:.3s;width:0}.nav-link:hover:after{width:100%}.slider{display:flex;height:calc(100vh - 5rem);transition:1s ease;width:500vw}.slide{background-position:50%;background-repeat:no-repeat;background-size:cover;height:100%;width:100vw}.slide-btn{position:relative}.slide-btn:before{background-color:#f97316;bottom:0;content:"";left:0;position:absolute;right:0;top:0;transition:.3s ease;width:0;z-index:1}.slide-btn:hover:before{width:100%}.hover\:border-gray-200:hover{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.hover\:border-rose-200:hover{--tw-border-opacity:1;border-color:rgb(254 205 211/var(--tw-border-opacity))}.hover\:bg-rose-500:hover{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.hover\:bg-sky-600:hover{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.hover\:bg-gray-900:hover{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.hover\:bg-rose-200:hover{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.hover\:text-rose-50:hover{--tw-text-opacity:1;color:rgb(255 241 242/var(--tw-text-opacity))}.hover\:text-orange-50:hover{--tw-text-opacity:1;color:rgb(255 247 237/var(--tw-text-opacity))}.hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.hover\:text-rose-300:hover{--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}.hover\:text-rose-600:hover{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity))}.hover\:shadow-2xl:hover{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-rose-300:hover{--tw-shadow-color:#fda4af;--tw-shadow:var(--tw-shadow-colored)}.active\:bg-gray-700:active{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.active\:text-gray-50:active{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}@media (min-width:768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width:1280px){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}:root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74c3c;--toastify-color-transparent:hsla(0,0%,100%,.7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-toast-width:320px;--toastify-toast-background:#fff;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error)}.Toastify__toast-container{box-sizing:border-box;color:#fff;padding:4px;position:fixed;-webkit-transform:translateZ(9999);-webkit-transform:translateZ(var(--toastify-z-index));width:320px;width:var(--toastify-toast-width);z-index:9999;z-index:var(--toastify-z-index)}.Toastify__toast-container--top-left{left:1em;top:1em}.Toastify__toast-container--top-center{left:50%;top:1em;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.Toastify__toast-container--top-right{right:1em;top:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width:480px){.Toastify__toast-container{left:0;margin:0;padding:0;width:100vw}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0;-webkit-transform:translateX(0);transform:translateX(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0;-webkit-transform:translateX(0);transform:translateX(0)}.Toastify__toast-container--rtl{left:auto;right:0}}.Toastify__toast{border-radius:4px;box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);box-sizing:border-box;cursor:default;direction:ltr;display:flex;font-family:sans-serif;font-family:var(--toastify-font-family);justify-content:space-between;margin-bottom:1rem;max-height:800px;max-height:var(--toastify-toast-max-height);min-height:64px;min-height:var(--toastify-toast-min-height);overflow:hidden;padding:8px;position:relative;z-index:0}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--close-on-click{cursor:pointer}.Toastify__toast-body{align-items:center;display:flex;flex:1 1 auto;margin:auto 0;padding:6px}.Toastify__toast-body>div:last-child{flex:1 1;word-break:break-word}.Toastify__toast-icon{-webkit-margin-end:10px;display:flex;flex-shrink:0;margin-inline-end:10px;width:20px}.Toastify--animate{-webkit-animation-duration:.7s;animation-duration:.7s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.Toastify--animate-icon{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media only screen and (max-width:480px){.Toastify__toast{border-radius:0;margin-bottom:0}}.Toastify__toast-theme--dark{background:#121212;background:var(--toastify-color-dark);color:#fff;color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:#fff;background:var(--toastify-color-light);color:#757575;color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{background:#3498db;background:var(--toastify-color-info);color:#fff;color:var(--toastify-text-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{background:#07bc0c;background:var(--toastify-color-success);color:#fff;color:var(--toastify-text-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{background:#f1c40f;background:var(--toastify-color-warning);color:#fff;color:var(--toastify-text-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{background:#e74c3c;background:var(--toastify-color-error);color:#fff;color:var(--toastify-text-color-error)}.Toastify__progress-bar-theme--light{background:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:#bb86fc;background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:#3498db;background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:#07bc0c;background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:#f1c40f;background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:#e74c3c;background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:hsla(0,0%,100%,.7);background:var(--toastify-color-transparent)}.Toastify__close-button{align-self:flex-start;background:transparent;border:none;color:#fff;cursor:pointer;opacity:.7;outline:none;padding:0;transition:.3s ease}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@-webkit-keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}@keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}.Toastify__progress-bar{bottom:0;height:5px;left:0;opacity:.7;position:absolute;-webkit-transform-origin:left;transform-origin:left;width:100%;z-index:9999;z-index:var(--toastify-z-index)}.Toastify__progress-bar--animated{-webkit-animation:Toastify__trackProgress linear 1 forwards;animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.Toastify__progress-bar--rtl{left:auto;right:0;-webkit-transform-origin:right;transform-origin:right}.Toastify__spinner{-webkit-animation:Toastify__spin .65s linear infinite;animation:Toastify__spin .65s linear infinite;border:2px solid #e0e0e0;border-color:var(--toastify-spinner-color-empty-area);border-radius:100%;border-right-color:#616161;border-right-color:var(--toastify-spinner-color);box-sizing:border-box;height:20px;width:20px}@-webkit-keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@-webkit-keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@-webkit-keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@-webkit-keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{-webkit-animation-name:Toastify__bounceInLeft;animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{-webkit-animation-name:Toastify__bounceInRight;animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{-webkit-animation-name:Toastify__bounceInDown;animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{-webkit-animation-name:Toastify__bounceInUp;animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{-webkit-animation-name:Toastify__bounceOutLeft;animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{-webkit-animation-name:Toastify__bounceOutRight;animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{-webkit-animation-name:Toastify__bounceOutUp;animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{-webkit-animation-name:Toastify__bounceOutDown;animation-name:Toastify__bounceOutDown}@-webkit-keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{-webkit-animation-name:Toastify__zoomIn;animation-name:Toastify__zoomIn}.Toastify__zoom-exit{-webkit-animation-name:Toastify__zoomOut;animation-name:Toastify__zoomOut}@-webkit-keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}@keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}.Toastify__flip-enter{-webkit-animation-name:Toastify__flipIn;animation-name:Toastify__flipIn}.Toastify__flip-exit{-webkit-animation-name:Toastify__flipOut;animation-name:Toastify__flipOut}@-webkit-keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}@keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{-webkit-animation-name:Toastify__slideInLeft;animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{-webkit-animation-name:Toastify__slideInRight;animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{-webkit-animation-name:Toastify__slideInDown;animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{-webkit-animation-name:Toastify__slideInUp;animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{-webkit-animation-name:Toastify__slideOutLeft;animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{-webkit-animation-name:Toastify__slideOutRight;animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{-webkit-animation-name:Toastify__slideOutUp;animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{-webkit-animation-name:Toastify__slideOutDown;animation-name:Toastify__slideOutDown}@-webkit-keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}
5 | /*# sourceMappingURL=main.32e9ca1d.css.map*/
--------------------------------------------------------------------------------
/build/static/css/main.32e9ca1d.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"static/css/main.32e9ca1d.css","mappings":"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","sources":["index.css","../node_modules/react-toastify/dist/ReactToastify.min.css"],"sourcesContent":["@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n\n@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap');\n@import url(\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap\");\n\nbody{\n font-family: 'Poppins', sans-serif;\n overflow-x: hidden;\n}\n\n\n/* Utilities */\n.space-font {\n font-family: \"Space Grotesk\", sans-serif;\n }\n \n/* Navbar */\n.nav-link{\n position: relative;\n}\n.nav-link::after{\n content: \"\";\n width: 0%;\n height: 1px;\n background-color: #f9fafb;\n position: absolute;\n left: 50%;\n bottom: 0;\n transform: translate(-50%);\n transition: 0.3s;\n}\n.nav-link:hover::after{\n width: 100%;\n}\n\n\n/* Slider */\n.slider{\n height: calc(100vh - 5rem);\n width: 500vw;\n display: flex;\n transition: 1s ease;\n}\n.slide{\n width: 100vw;\n height: 100%;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover; \n}\n\n\n/* Slide */\n.slide-btn {\n position: relative;\n }\n \n .slide-btn::before {\n content: \"\";\n position: absolute;\n z-index: 1;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #f97316;\n width: 0%;\n transition: 0.3s ease;\n }\n \n .slide-btn:hover::before {\n width: 100%;\n }",":root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74c3c;--toastify-color-transparent:hsla(0,0%,100%,.7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-toast-width:320px;--toastify-toast-background:#fff;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error)}.Toastify__toast-container{z-index:var(--toastify-z-index);-webkit-transform:translateZ(var(--toastify-z-index));position:fixed;padding:4px;width:var(--toastify-toast-width);box-sizing:border-box;color:#fff}.Toastify__toast-container--top-left{top:1em;left:1em}.Toastify__toast-container--top-center{top:1em;left:50%;transform:translateX(-50%)}.Toastify__toast-container--top-right{top:1em;right:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;transform:translateX(-50%)}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width:480px){.Toastify__toast-container{width:100vw;padding:0;left:0;margin:0}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0;transform:translateX(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0;transform:translateX(0)}.Toastify__toast-container--rtl{right:0;left:auto}}.Toastify__toast{position:relative;min-height:var(--toastify-toast-min-height);box-sizing:border-box;margin-bottom:1rem;padding:8px;border-radius:4px;box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-height:var(--toastify-toast-max-height);overflow:hidden;font-family:var(--toastify-font-family);cursor:default;direction:ltr;z-index:0}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--close-on-click{cursor:pointer}.Toastify__toast-body{margin:auto 0;-ms-flex:1 1 auto;flex:1 1 auto;padding:6px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.Toastify__toast-body>div:last-child{word-break:break-word;-ms-flex:1;flex:1}.Toastify__toast-icon{-webkit-margin-end:10px;margin-inline-end:10px;width:20px;-ms-flex-negative:0;flex-shrink:0;display:-ms-flexbox;display:flex}.Toastify--animate{animation-fill-mode:both;animation-duration:.7s}.Toastify--animate-icon{animation-fill-mode:both;animation-duration:.3s}@media only screen and (max-width:480px){.Toastify__toast{margin-bottom:0;border-radius:0}}.Toastify__toast-theme--dark{background:var(--toastify-color-dark);color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{color:var(--toastify-text-color-info);background:var(--toastify-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{color:var(--toastify-text-color-success);background:var(--toastify-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{color:var(--toastify-text-color-warning);background:var(--toastify-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{color:var(--toastify-text-color-error);background:var(--toastify-color-error)}.Toastify__progress-bar-theme--light{background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:var(--toastify-color-transparent)}.Toastify__close-button{color:#fff;background:transparent;outline:none;border:none;padding:0;cursor:pointer;opacity:.7;transition:.3s ease;-ms-flex-item-align:start;align-self:flex-start}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@keyframes Toastify__trackProgress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Toastify__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:5px;z-index:var(--toastify-z-index);opacity:.7;transform-origin:left}.Toastify__progress-bar--animated{animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:transform .2s}.Toastify__progress-bar--rtl{right:0;left:auto;transform-origin:right}.Toastify__spinner{width:20px;height:20px;box-sizing:border-box;border:2px solid;border-radius:100%;border-color:var(--toastify-spinner-color-empty-area);border-right-color:var(--toastify-spinner-color);animation:Toastify__spin .65s linear infinite}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes Toastify__bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes Toastify__bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes Toastify__bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{animation-name:Toastify__bounceOutDown}@keyframes Toastify__zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{animation-name:Toastify__zoomIn}.Toastify__zoom-exit{animation-name:Toastify__zoomOut}@keyframes Toastify__flipIn{0%{transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes Toastify__flipOut{0%{transform:perspective(400px)}30%{transform:perspective(400px) rotateX(-20deg);opacity:1}to{transform:perspective(400px) rotateX(90deg);opacity:0}}.Toastify__flip-enter{animation-name:Toastify__flipIn}.Toastify__flip-exit{animation-name:Toastify__flipOut}@keyframes Toastify__slideInRight{0%{transform:translate3d(110%,0,0);visibility:visible}to{transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{transform:translate3d(-110%,0,0);visibility:visible}to{transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{transform:translate3d(0,110%,0);visibility:visible}to{transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{transform:translate3d(0,-110%,0);visibility:visible}to{transform:translateZ(0)}}@keyframes Toastify__slideOutRight{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(110%,0,0)}}@keyframes Toastify__slideOutLeft{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(-110%,0,0)}}@keyframes Toastify__slideOutDown{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(0,500px,0)}}@keyframes Toastify__slideOutUp{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(0,-500px,0)}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{animation-name:Toastify__slideOutDown}@keyframes Toastify__spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}"],"names":[],"sourceRoot":""}
--------------------------------------------------------------------------------
/build/static/js/main.66060ca7.js.LICENSE.txt:
--------------------------------------------------------------------------------
1 | /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
2 |
3 | /**
4 | * @license React
5 | * react-dom.production.min.js
6 | *
7 | * Copyright (c) Facebook, Inc. and its affiliates.
8 | *
9 | * This source code is licensed under the MIT license found in the
10 | * LICENSE file in the root directory of this source tree.
11 | */
12 |
13 | /**
14 | * @license React
15 | * react-is.production.min.js
16 | *
17 | * Copyright (c) Facebook, Inc. and its affiliates.
18 | *
19 | * This source code is licensed under the MIT license found in the
20 | * LICENSE file in the root directory of this source tree.
21 | */
22 |
23 | /**
24 | * @license React
25 | * react-jsx-runtime.production.min.js
26 | *
27 | * Copyright (c) Facebook, Inc. and its affiliates.
28 | *
29 | * This source code is licensed under the MIT license found in the
30 | * LICENSE file in the root directory of this source tree.
31 | */
32 |
33 | /**
34 | * @license React
35 | * react.production.min.js
36 | *
37 | * Copyright (c) Facebook, Inc. and its affiliates.
38 | *
39 | * This source code is licensed under the MIT license found in the
40 | * LICENSE file in the root directory of this source tree.
41 | */
42 |
43 | /**
44 | * @license React
45 | * scheduler.production.min.js
46 | *
47 | * Copyright (c) Facebook, Inc. and its affiliates.
48 | *
49 | * This source code is licensed under the MIT license found in the
50 | * LICENSE file in the root directory of this source tree.
51 | */
52 |
53 | /**
54 | * @license React
55 | * use-sync-external-store-shim.production.min.js
56 | *
57 | * Copyright (c) Facebook, Inc. and its affiliates.
58 | *
59 | * This source code is licensed under the MIT license found in the
60 | * LICENSE file in the root directory of this source tree.
61 | */
62 |
63 | /**
64 | * @license React
65 | * use-sync-external-store-shim/with-selector.production.min.js
66 | *
67 | * Copyright (c) Facebook, Inc. and its affiliates.
68 | *
69 | * This source code is licensed under the MIT license found in the
70 | * LICENSE file in the root directory of this source tree.
71 | */
72 |
73 | /**
74 | * @remix-run/router v1.2.1
75 | *
76 | * Copyright (c) Remix Software Inc.
77 | *
78 | * This source code is licensed under the MIT license found in the
79 | * LICENSE.md file in the root directory of this source tree.
80 | *
81 | * @license MIT
82 | */
83 |
84 | /**
85 | * React Router DOM v6.6.1
86 | *
87 | * Copyright (c) Remix Software Inc.
88 | *
89 | * This source code is licensed under the MIT license found in the
90 | * LICENSE.md file in the root directory of this source tree.
91 | *
92 | * @license MIT
93 | */
94 |
95 | /**
96 | * React Router v6.6.1
97 | *
98 | * Copyright (c) Remix Software Inc.
99 | *
100 | * This source code is licensed under the MIT license found in the
101 | * LICENSE.md file in the root directory of this source tree.
102 | *
103 | * @license MIT
104 | */
105 |
106 | /** @license React v16.13.1
107 | * react-is.production.min.js
108 | *
109 | * Copyright (c) Facebook, Inc. and its affiliates.
110 | *
111 | * This source code is licensed under the MIT license found in the
112 | * LICENSE file in the root directory of this source tree.
113 | */
114 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tech-alpha",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@reduxjs/toolkit": "^1.9.1",
7 | "@testing-library/jest-dom": "^5.16.5",
8 | "@testing-library/react": "^13.4.0",
9 | "@testing-library/user-event": "^13.5.0",
10 | "axios": "^1.6.2",
11 | "react": "^18.2.0",
12 | "react-dom": "^18.2.0",
13 | "react-icons": "^4.7.1",
14 | "react-redux": "^8.0.5",
15 | "react-router-dom": "^6.6.1",
16 | "react-scripts": "5.0.1",
17 | "react-toastify": "^9.1.1",
18 | "web-vitals": "^2.1.4"
19 | },
20 | "scripts": {
21 | "start": "react-scripts start",
22 | "build": "react-scripts build",
23 | "test": "react-scripts test",
24 | "eject": "react-scripts eject"
25 | },
26 | "eslintConfig": {
27 | "extends": [
28 | "react-app",
29 | "react-app/jest"
30 | ]
31 | },
32 | "browserslist": {
33 | "production": [
34 | ">0.2%",
35 | "not dead",
36 | "not op_mini all"
37 | ],
38 | "development": [
39 | "last 1 chrome version",
40 | "last 1 firefox version",
41 | "last 1 safari version"
42 | ]
43 | },
44 | "devDependencies": {
45 | "@tailwindcss/line-clamp": "^0.4.4",
46 | "tailwindcss": "^3.2.4"
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/public/_redirects:
--------------------------------------------------------------------------------
1 | /* /index.html 200
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | tech alpha
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import { Route, Routes } from 'react-router-dom'
2 | import Navbar from './components/Navbar'
3 | import Footer from './components/Footer'
4 | import Home from './pages/Home'
5 | import Products from './pages/Products'
6 | import NotFound from './pages/NotFound'
7 | import Cart from './pages/Cart'
8 | import { ToastContainer } from 'react-toastify'
9 | import 'react-toastify/dist/ReactToastify.min.css';
10 | import CheckOutSuccess from './components/CheckOutSuccess'
11 |
12 |
13 | const App = () => {
14 |
15 | const isNavActiveStyles=({isActive})=>{
16 | return {
17 | color: isActive ? "#f97316":null,
18 | };
19 | }
20 |
21 | return (
22 | <>
23 |
24 |
25 |
26 |
27 | }/>
28 | }/>
29 | }/>
30 | } />
31 | } />
32 | }/>
33 |
34 |
35 |
36 | >
37 | )
38 | }
39 |
40 | export default App
--------------------------------------------------------------------------------
/src/app/store.js:
--------------------------------------------------------------------------------
1 | import { configureStore} from "@reduxjs/toolkit";
2 | import productsReducer,{productsFetching} from "../features/products/productSlice"
3 | import cartReducer from "../features/products/cartSlice"
4 |
5 | export const store= configureStore({
6 | reducer:{
7 | products:productsReducer,
8 | cart: cartReducer
9 | }
10 | })
11 |
12 | store.dispatch(productsFetching())
--------------------------------------------------------------------------------
/src/components/Card.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { useDispatch } from "react-redux";
3 | import { useNavigate } from "react-router-dom";
4 | import { addToCart } from "../features/products/cartSlice";
5 | import { currencyFormatter } from "../utlities/currencyFormatter";
6 |
7 | const Card = ({ product }) => {
8 | const dispatch = useDispatch();
9 | const navigate = useNavigate();
10 |
11 | const addToCardHandler = (product) => {
12 | dispatch(addToCart(product))
13 | navigate("/cart");
14 | };
15 |
16 | return (
17 |
18 |
19 |
20 |
21 |
22 |
23 | {product.category}
24 |
25 |
26 | {product.name}
27 |
28 |
{product.description}
29 |
30 |
31 | {currencyFormatter(product.price)}
32 |
33 | addToCardHandler(product)}
35 | className="cursor-pointer uppercase bg-violet-500 text-violet-50 font-medium py-3 px-8 rounded-md hover:bg-rose-500 hover:text-rose-50 duration-300 shadow-lg shadow-violet-300 hover:shadow-rose-300"
36 | >
37 | Add to cart
38 |
39 |
40 |
41 |
42 | );
43 | };
44 |
45 | export default Card;
46 |
--------------------------------------------------------------------------------
/src/components/CheckOutSuccess.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | const CheckOutSuccess = () => {
4 | return (
5 | Check Out Success
6 | )
7 | }
8 |
9 | export default CheckOutSuccess
--------------------------------------------------------------------------------
/src/components/Footer.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | const Footer = () => {
4 | return (
5 |
6 |
© {new Date().getFullYear}
7 | Tech Alpha. All rights reserved
8 |
9 |
10 | )
11 | }
12 |
13 | export default Footer
--------------------------------------------------------------------------------
/src/components/Navbar.js:
--------------------------------------------------------------------------------
1 |
2 | import { Link,NavLink } from "react-router-dom";
3 | import { BsCart3 } from "react-icons/bs";
4 | import { useSelector } from "react-redux";
5 |
6 |
7 | const Navbar = ({ isNavActiveStyles }) => {
8 |
9 | const { cartItems } = useSelector((state) => state.cart);
10 |
11 | return (
12 |
13 |
14 |
15 |
16 | tech
17 | Alpha
18 |
19 |
20 |
21 |
22 | Home
23 |
24 |
25 | Products
26 |
27 |
28 |
29 |
30 |
31 |
32 | {cartItems.length}
33 |
34 |
35 |
36 |
37 |
38 |
39 | );
40 | };
41 |
42 | export default Navbar;
43 |
--------------------------------------------------------------------------------
/src/components/PayButton.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import axios from "axios";
3 |
4 | const PayButton = ({ data }) => {
5 | const handleCheckout = async () => {
6 | // https://tech-alpha-qtwm.onrender.com/api
7 | // http://localhost:4000/api/
8 | axios
9 | .post(`https://tech-alpha-qtwm.onrender.com/api/stripe/create-checkout-session`, {
10 | data,
11 | userId: 3,
12 | })
13 | .then((response) => {
14 | if (response.data.url) {
15 | console.log(response.data.url)
16 | window.location.href = response.data.url;
17 | }
18 | })
19 | .catch((err) => console.log(err.message));
20 | };
21 |
22 | return (
23 | <>
24 | handleCheckout()}
26 | className="checkout bg-sky-500 w-full py-3 uppercase font-medium text-sky-50 tracking-widest hover:bg-sky-600 duration-300"
27 | >
28 | Check out
29 |
30 | >
31 | );
32 | };
33 |
34 | export default PayButton;
35 |
--------------------------------------------------------------------------------
/src/components/Slide.js:
--------------------------------------------------------------------------------
1 | import { Link } from "react-router-dom";
2 |
3 | const Slide = ({ image }) => {
4 | return (
5 |
6 |
7 |
8 | {image.headline}
9 |
10 |
{image.body}
11 |
15 |
16 | {image.cta}
17 |
18 |
19 |
20 |
21 | );
22 | };
23 |
24 | export default Slide;
--------------------------------------------------------------------------------
/src/components/Slider.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import { BsArrowRight, BsArrowLeft } from "react-icons/bs";
3 | import Slide from "./Slide";
4 | const data = [
5 | {
6 | id: 1,
7 | src: "https://i.ibb.co/XszmG02/camera.jpg",
8 | headline: "DSLR cameras for stunning photos",
9 | body: "Are you an aspiring photographer looking to take your skills to the next level? Our DSLR cameras offer advanced features and high-quality image sensors to help you capture stunning photos. From landscape shots to portraits, these cameras are perfect for capturing all types of subjects.",
10 | cta: "Shop DSLR cameras now",
11 | category: "cameras",
12 | },
13 | {
14 | id: 2,
15 | src: "https://i.ibb.co/mtc8v16/tv.jpg",
16 | headline: "Upgrade your home entertainment with our TVs",
17 | body: "Experience the latest in home entertainment with our selection of TVs. From sleek and modern designs to advanced features like 4K resolution and smart capabilities, our TVs will bring your favorite movies, TV shows, and streaming content to life.",
18 | cta: "Shop TVs and upgrade now",
19 | category: "tvs",
20 | },
21 | {
22 | id: 3,
23 | src: "https://i.ibb.co/kmr5qQv/headphones.jpg",
24 | headline: "Enhance your listening experience",
25 | body: "Take your music, movies, and more to the next level with our headphones. Our selection offers a range of styles and features, including noise-cancelling technology, wireless connectivity, and comfortable designs for all-day wear.",
26 | cta: "Experience enhanced sound",
27 | category: "headphones",
28 | },
29 | {
30 | id: 4,
31 | src: "https://i.ibb.co/JqxDhvZ/console.jpg",
32 | headline: "Take your gaming to the next level",
33 | body: "Elevate your gaming experience with our selection of gaming consoles. From the latest models to classic systems, we have a console for every type of gamer. Our consoles offer advanced graphics, fast processing speeds, and a variety of exclusive games to choose from.",
34 | cta: "Shop consoles and play now",
35 | category: "consoles",
36 | },
37 | {
38 | id: 5,
39 | src: "https://i.ibb.co/YbS7mL2/smart-watches.jpg",
40 | headline: "Stay connected with smart watches",
41 | body: "Stay connected and on top of your day with our smart watches. Our selection offers a range of styles and features, including fitness tracking, phone notifications, and voice assistants. These watches are the perfect combination of functionality and style.",
42 | cta: "Connect with a smart watch",
43 | category: "smart-watches",
44 | },
45 | ];
46 |
47 | const Slider = () => {
48 | const [currentSlide, setCurrentSlide] = useState(0);
49 |
50 | const prevSlide = () => {
51 | setCurrentSlide(
52 | currentSlide === 0 ? data.length - 1 : (prevSlide) => prevSlide - 1
53 | );
54 | };
55 | const nextSlide = () => {
56 | setCurrentSlide(
57 | currentSlide === data.length - 1 ? 0 : (prevSlide) => prevSlide + 1
58 | );
59 | };
60 |
61 | return (
62 |
63 |
67 | {data.map((image) => (
68 |
69 | ))}
70 |
71 |
72 |
76 |
77 | {" "}
78 |
79 |
80 |
81 |
85 |
86 | {" "}
87 |
88 |
89 |
90 |
91 |
92 | );
93 | };
94 |
95 | export default Slider;
96 |
--------------------------------------------------------------------------------
/src/features/products/cartSlice.js:
--------------------------------------------------------------------------------
1 | import { createSlice } from "@reduxjs/toolkit";
2 | import { toast } from "react-toastify";
3 | const initialState = {
4 | cartItems: localStorage.getItem("cartItems")
5 | ? JSON.parse(localStorage.getItem("cartItems"))
6 | : [],
7 | cartTotalQuantity: 0,
8 | cartTotalAmount: 0,
9 | };
10 |
11 | const cartSlice = createSlice({
12 | name: "cart",
13 | initialState,
14 | reducers: {
15 | addToCart(state, action) {
16 | //check if the items is already in the cart
17 | const existedItemIndex = state.cartItems.findIndex(
18 | (item) => item._id === action.payload._id
19 | );
20 |
21 | // if exist
22 | if (existedItemIndex >= 0) {
23 | // increase quantity
24 | state.cartItems[existedItemIndex].cartQuantity += 1;
25 | toast.info('Quantity Increase', {
26 | position: "bottom-left",
27 | autoClose: 5000,
28 | hideProgressBar: false,
29 | closeOnClick: true,
30 | pauseOnHover: true,
31 | draggable: true,
32 | progress: undefined,
33 | theme: "light",
34 | });
35 | } else {
36 | // add to cart
37 | const assembledItem = { ...action.payload, cartQuantity: 1 };
38 | state.cartItems.push(assembledItem);
39 |
40 | toast.success('Product added into cart', {
41 | position: "bottom-left",
42 | autoClose: 5000,
43 | hideProgressBar: false,
44 | closeOnClick: true,
45 | pauseOnHover: true,
46 | draggable: true,
47 | progress: undefined,
48 | theme: "light",
49 | });
50 | }
51 | // add to local storage
52 | localStorage.setItem("cartItems", JSON.stringify(state.cartItems));
53 | },
54 |
55 | // remove item
56 | removeFromCart(state, action) {
57 | const updatedCartItems = state.cartItems.filter(
58 | (item) => item._id !== action.payload._id
59 | );
60 | state.cartItems = updatedCartItems;
61 | //update local storage
62 | localStorage.setItem("cartItems", JSON.stringify(state.cartItems));
63 |
64 | toast.warn('Product remove from cart!', {
65 | position: "bottom-left",
66 | autoClose: 5000,
67 | hideProgressBar: false,
68 | closeOnClick: true,
69 | pauseOnHover: true,
70 | draggable: true,
71 | progress: undefined,
72 | theme: "light",
73 | });
74 | },
75 |
76 | clearCart(state, action) {
77 | state.cartItems = [];
78 | //update local storage
79 | localStorage.setItem("cartItems", JSON.stringify(state.cartItems));
80 | toast.error('cart clear', {
81 | position: "bottom-left",
82 | autoClose: 5000,
83 | hideProgressBar: false,
84 | closeOnClick: true,
85 | pauseOnHover: true,
86 | draggable: true,
87 | progress: undefined,
88 | theme: "light",
89 | });
90 | },
91 |
92 | decreaseCart(state, action) {
93 | const itemIndex = state.cartItems.findIndex(
94 | (item) => item._id === action.payload._id
95 | );
96 |
97 | //if exist
98 | if (state.cartItems[itemIndex].cartQuantity > 1) {
99 | state.cartItems[itemIndex].cartQuantity -= 1;
100 | toast.info('Quantity decrease', {
101 | position: "bottom-left",
102 | autoClose: 5000,
103 | hideProgressBar: false,
104 | closeOnClick: true,
105 | pauseOnHover: true,
106 | draggable: true,
107 | progress: undefined,
108 | theme: "light",
109 | });
110 | } else if (state.cartItems[itemIndex].cartQuantity === 1) {
111 | const updatedCartItems = state.cartItems.filter(
112 | (item) => item._id !== action.payload._id
113 | );
114 | state.cartItems = updatedCartItems;
115 | toast.warn('Product remove from cart!', {
116 | position: "bottom-left",
117 | autoClose: 5000,
118 | hideProgressBar: false,
119 | closeOnClick: true,
120 | pauseOnHover: true,
121 | draggable: true,
122 | progress: undefined,
123 | theme: "light",
124 | });
125 | }
126 |
127 | //update local storage
128 | localStorage.setItem("cartItems", JSON.stringify(state.cartItems));
129 | },
130 |
131 | //total amount
132 |
133 | getSubtotal(state,action){
134 | const subtotal=state.cartItems.reduce((acc,item)=>{
135 | const {price,cartQuantity}=item;
136 | const itemTotal=price*cartQuantity;
137 | acc+=itemTotal;
138 | return acc
139 | },0)
140 | state.cartTotalAmount=subtotal;
141 | }
142 |
143 |
144 |
145 | },
146 | });
147 |
148 | export const { addToCart, removeFromCart, clearCart ,decreaseCart,getSubtotal} = cartSlice.actions;
149 |
150 | export default cartSlice.reducer;
151 |
--------------------------------------------------------------------------------
/src/features/products/productSlice.js:
--------------------------------------------------------------------------------
1 | import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
2 | import axios from "axios";
3 |
4 | const initialState = {
5 | items: [],
6 | status: null,
7 | };
8 |
9 | // https://eager-sable-airedale.glitch.me/products
10 | // https://tech-alpha-qtwm.onrender.com/api/products
11 | export const productsFetching = createAsyncThunk(
12 | "Products/productsFetching",
13 | async () => {
14 | const res = await axios.get(
15 | "https://tech-alpha-qtwm.onrender.com/api/products"
16 | );
17 | return res.data;
18 | }
19 | );
20 |
21 | export const productSlice = createSlice({
22 | name: "Products",
23 | initialState,
24 | reducers: {},
25 | extraReducers: (builder) => {
26 | builder.addCase(productsFetching.pending, (state, action) => {
27 | state.status = "Loading .......";
28 | });
29 | builder.addCase(productsFetching.fulfilled, (state, action) => {
30 | state.status = "";
31 | state.items = action.payload;
32 | });
33 | builder.addCase(productsFetching.rejected, (state, action) => {
34 | state.status = "Something went wrong";
35 | });
36 | },
37 | });
38 |
39 | export default productSlice.reducer;
40 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 |
6 | @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap');
7 | @import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap");
8 |
9 | body{
10 | font-family: 'Poppins', sans-serif;
11 | overflow-x: hidden;
12 | }
13 |
14 |
15 | /* Utilities */
16 | .space-font {
17 | font-family: "Space Grotesk", sans-serif;
18 | }
19 |
20 | /* Navbar */
21 | .nav-link{
22 | position: relative;
23 | }
24 | .nav-link::after{
25 | content: "";
26 | width: 0%;
27 | height: 1px;
28 | background-color: #f9fafb;
29 | position: absolute;
30 | left: 50%;
31 | bottom: 0;
32 | transform: translate(-50%);
33 | transition: 0.3s;
34 | }
35 | .nav-link:hover::after{
36 | width: 100%;
37 | }
38 |
39 |
40 | /* Slider */
41 | .slider{
42 | height: calc(100vh - 5rem);
43 | width: 500vw;
44 | display: flex;
45 | transition: 1s ease;
46 | }
47 | .slide{
48 | width: 100vw;
49 | height: 100%;
50 | background-position: center;
51 | background-repeat: no-repeat;
52 | background-size: cover;
53 | }
54 |
55 |
56 | /* Slide */
57 | .slide-btn {
58 | position: relative;
59 | }
60 |
61 | .slide-btn::before {
62 | content: "";
63 | position: absolute;
64 | z-index: 1;
65 | top: 0;
66 | left: 0;
67 | right: 0;
68 | bottom: 0;
69 | background-color: #f97316;
70 | width: 0%;
71 | transition: 0.3s ease;
72 | }
73 |
74 | .slide-btn:hover::before {
75 | width: 100%;
76 | }
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import './index.css';
4 | import App from './App';
5 | import { BrowserRouter } from 'react-router-dom';
6 |
7 | import {store} from './app/store';
8 | import {Provider} from 'react-redux'
9 |
10 |
11 | const root = ReactDOM.createRoot(document.getElementById('root'));
12 | root.render(
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | );
22 |
--------------------------------------------------------------------------------
/src/pages/Cart.js:
--------------------------------------------------------------------------------
1 | import {useEffect} from "react"
2 | import { useNavigate } from "react-router-dom";
3 | import {Link} from "react-router-dom"
4 | import { currencyFormatter } from "../utlities/currencyFormatter";
5 | import { BsArrowLeft } from "react-icons/bs";
6 | import { useSelector, useDispatch } from "react-redux";
7 | import { removeFromCart,clearCart ,decreaseCart,addToCart,getSubtotal} from "../features/products/cartSlice.js";
8 | import PayButton from "../components/PayButton.jsx";
9 |
10 | const Cart = () => {
11 | const navigate = useNavigate();
12 | const dispatch = useDispatch();
13 | const { cartItems: data ,cartTotalAmount:subtotal} = useSelector((state) => state.cart);
14 |
15 | const productCard = () => {
16 | navigate("/products");
17 | };
18 |
19 | const handleRemove = (product) => {
20 | dispatch(removeFromCart(product));
21 | };
22 |
23 | const handleDecrease=(product)=>{
24 | dispatch(decreaseCart(product))
25 | }
26 |
27 | const handleIncrease=(product)=>{
28 | dispatch(addToCart(product))
29 | }
30 |
31 |
32 | useEffect(() => {
33 | dispatch(getSubtotal())
34 | }, [data,dispatch])
35 |
36 |
37 |
38 | return (
39 |
40 |
41 | {data.length>0? `You've added ${data.length} item${data.length>1? "s":""}`:"Cart is Empty" }
42 |
43 |
44 | {data.length===0 && (
45 | Start Shopping now
46 | )}
47 |
48 | {data.length>0 && (
49 | <>
50 |
51 |
52 |
Product
53 |
Unit Price
54 |
Quantity
55 |
TOtal price
56 |
57 |
58 | {data?.map((product) => (
59 |
60 |
61 |
66 |
67 | {product.name}
68 | handleRemove(product)}
70 | className="uppercase hover:text-rose-300 duration-300"
71 | >
72 | Remove
73 |
74 |
75 |
76 |
{currencyFormatter(product.price)}
77 |
78 | handleDecrease(product)}
80 | className="h-10 w-10 border border-gray-300 bg-gray-200 active:bg-gray-700 active:text-gray-50">
81 | -
82 |
83 |
84 | {product.cartQuantity}
85 |
86 | handleIncrease(product)}
88 | className="h-10 w-10 border border-gray-300 bg-gray-200 active:bg-gray-700 active:text-gray-50">
89 | +
90 |
91 |
92 |
93 | {" "}
94 | {currencyFormatter(product.price * product.cartQuantity)}
95 |
96 |
97 | ))}
98 |
99 |
100 |
dispatch(clearCart())}
102 | className="clear-btn uppercase bg-gray-100 py-3 px-5 border border-gray-200 font-medium hover:text-rose-600 hover:border-rose-200 duration-300 hover:bg-rose-200"
103 | >
104 | Clear Cart
105 |
106 |
107 |
108 | Subtotal
109 | {currencyFormatter(subtotal)}
110 |
111 |
112 | Taxes and shipping costs are calculated at the checkout
113 |
114 |
115 | {/*
116 | {data &&
117 | {" "} */}
118 |
122 |
123 | Continue Shopping
124 |
125 |
126 |
127 | >)
128 | }
129 |
130 |
131 | );
132 | };
133 |
134 | export default Cart;
135 |
--------------------------------------------------------------------------------
/src/pages/Home.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Slider from '../components/Slider'
3 | import Products from './Products'
4 |
5 | const Home = () => {
6 | return (
7 |
11 | )
12 | }
13 |
14 | export default Home
--------------------------------------------------------------------------------
/src/pages/NotFound.js:
--------------------------------------------------------------------------------
1 | import { Link } from "react-router-dom"
2 |
3 | const NotFound = () => {
4 | return (
5 |
6 |
7 | Page not found!
8 |
9 |
13 | Go home
14 |
15 |
16 |
17 | )
18 | }
19 |
20 | export default NotFound
--------------------------------------------------------------------------------
/src/pages/Products.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { useSelector } from 'react-redux'
3 | import Card from '../components/Card'
4 |
5 |
6 |
7 | const Products = () => {
8 |
9 | //redux state access
10 | const {items:data, status}= useSelector((state)=>state.products)
11 | console.log(data)
12 |
13 | return
14 |
Browse all Products
15 |
16 | {status &&
{status}
}
17 | {data.map((product)=>(
18 |
19 | ))}
20 |
21 |
22 | }
23 |
24 | export default Products
--------------------------------------------------------------------------------
/src/utlities/currencyFormatter.js:
--------------------------------------------------------------------------------
1 | export const currencyFormatter = (price) => {
2 | if (!price) return;
3 | return price.toLocaleString("en-us", {
4 | style: "currency",
5 | currency: "USD",
6 | });
7 | };
8 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | "./src/**/*.{js,jsx,ts,tsx}",
5 | ],
6 | theme: {
7 | extend: {},
8 | },
9 | plugins: [require('@tailwindcss/line-clamp'),],
10 | }
--------------------------------------------------------------------------------