diff --git a/package-lock.json b/package-lock.json
index ec8bfd62..abae6074 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,6 +14,7 @@
"mini-css-extract-plugin": "^2.9.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "react-icons": "^5.2.1",
"react-redux": "^9.1.2",
"react-router-dom": "^6.24.0",
"sass": "^1.77.6",
@@ -7070,7 +7071,6 @@
"resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.6.tgz",
"integrity": "sha512-8qpnGVincVDLEcQXWaHOf6zmlbwTKc6Us6PPu4CRnPXCzo2OGBS5cwgMMOWdxDpEz1mkbvXHpEy99M5Yvt682w==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@adobe/css-tools": "^4.4.0",
"@babel/runtime": "^7.9.2",
@@ -20092,6 +20092,14 @@
"integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==",
"dev": true
},
+ "node_modules/react-icons": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.2.1.tgz",
+ "integrity": "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
diff --git a/package.json b/package.json
index f87243ab..8e58f7a1 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
"mini-css-extract-plugin": "^2.9.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "react-icons": "^5.2.1",
"react-redux": "^9.1.2",
"react-router-dom": "^6.24.0",
"sass": "^1.77.6",
diff --git a/public/person.jpg b/public/person.jpg
new file mode 100644
index 00000000..430ca557
Binary files /dev/null and b/public/person.jpg differ
diff --git a/src/App.tsx b/src/App.tsx
index abd182e0..a7f836ef 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,7 +1,9 @@
-/* eslint-disable linebreak-style */
-import React from 'react';
-import { BrowserRouter as Router } from 'react-router-dom';
-import AppRouter from './router';
+/* eslint-disable*/
+import React from "react";
+import { BrowserRouter as Router } from "react-router-dom";
+import AppRouter from "./router";
+import "./styles/style.scss";
+import Sidebar from "./components/sidebar/Sidebar";
const App: React.FC = () => (
@@ -9,4 +11,4 @@ const App: React.FC = () => (
);
-export default App;
\ No newline at end of file
+export default App;
diff --git a/src/components/buttons/Button.tsx b/src/components/buttons/Button.tsx
index 7a279b71..4371da16 100644
--- a/src/components/buttons/Button.tsx
+++ b/src/components/buttons/Button.tsx
@@ -1,4 +1,6 @@
-import React from 'react';
+/* eslint-disable */
+
+import React from "react";
const Button = ({ title }: { title: string }) => (
diff --git a/src/components/categories/Categories.tsx b/src/components/categories/Categories.tsx
new file mode 100644
index 00000000..ffe03e1b
--- /dev/null
+++ b/src/components/categories/Categories.tsx
@@ -0,0 +1,83 @@
+/* eslint-disable */
+
+import React from "react";
+import "../../styles/Categories.scss";
+
+function Categories() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Women's shoes
+
+
+
+
+
+
+
Accessories
+
+
+
+
+
+ );
+}
+
+export default Categories;
diff --git a/src/components/inputs/Input.tsx b/src/components/inputs/Input.tsx
new file mode 100644
index 00000000..9b52c52f
--- /dev/null
+++ b/src/components/inputs/Input.tsx
@@ -0,0 +1,58 @@
+/* eslint-disable */
+
+import React, { ReactNode } from "react";
+import "../../styles/Input.scss";
+
+interface InputLabelProps extends React.InputHTMLAttributes {
+ label: string;
+ type?: "text" | "date" | "password" | "select" | "textarea" | "search";
+ children?: ReactNode;
+}
+
+function InputLabel({
+ label,
+ type = "text",
+ children,
+ ...props
+}: InputLabelProps) {
+ return (
+
+ {type === "select" ? (
+
+ ) : type === "textarea" ? (
+
+ ) : (
+
+ )}
+
+
+
+ );
+}
+
+function InputDefault(
+ props: React.JSX.IntrinsicAttributes &
+ React.ClassAttributes &
+ React.InputHTMLAttributes
+) {
+ return ;
+}
+
+function InputRounded(
+ props: React.JSX.IntrinsicAttributes &
+ React.ClassAttributes &
+ React.InputHTMLAttributes
+) {
+ return ;
+}
+
+export { InputLabel, InputDefault, InputRounded };
diff --git a/src/components/inputs/SearchInput.tsx b/src/components/inputs/SearchInput.tsx
new file mode 100644
index 00000000..8d72ffcc
--- /dev/null
+++ b/src/components/inputs/SearchInput.tsx
@@ -0,0 +1,24 @@
+/* eslint-disable */
+
+import React from "react";
+import { FiSearch } from "react-icons/fi";
+import "../../styles/SearchInput.scss";
+
+interface SearchInputProps {
+ className?: string;
+ placeholder?: string;
+}
+
+function SearchInput({ className, placeholder }: SearchInputProps) {
+ return (
+
+ );
+}
+
+export default SearchInput;
diff --git a/src/components/layout/AdminHeader.tsx b/src/components/layout/AdminHeader.tsx
new file mode 100644
index 00000000..67c6cae2
--- /dev/null
+++ b/src/components/layout/AdminHeader.tsx
@@ -0,0 +1,38 @@
+/* eslint-disable */
+import React from "react";
+import { IoIosNotifications } from "react-icons/io";
+import { FaEnvelope } from "react-icons/fa";
+import "../../styles/AdminHeader.scss";
+
+function AdminHeader() {
+ return (
+
+
+
+
+ e-Commerce Ninjas
+
+
+
+
+ 10
+
+
+
+ 30
+
+
+
+
+ Hi, Emmanuel
+
+
+
+ );
+}
+
+export default AdminHeader;
diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx
index 2708ec45..991f2bdb 100644
--- a/src/components/layout/Footer.tsx
+++ b/src/components/layout/Footer.tsx
@@ -1,17 +1,185 @@
-/* eslint-disable linebreak-style */
-import React from 'react';
+/* eslint-disable */
-const getYear = (): number => new Date().getFullYear();
+import React from "react";
+import { FaInstagramSquare } from "react-icons/fa";
+import { IoLogoFacebook } from "react-icons/io";
+import { FaSquareTwitter } from "react-icons/fa6";
+import { FaLinkedin } from "react-icons/fa6";
-const Footer: React.FC = () => (
-
-);
+import "../../styles/Footer.scss";
-export default Footer;
\ No newline at end of file
+function Footer() {
+ return (
+
+ );
+}
+export default Footer;
diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx
index bd999e16..d98a9370 100644
--- a/src/components/layout/Header.tsx
+++ b/src/components/layout/Header.tsx
@@ -1,17 +1,171 @@
-/* eslint-disable linebreak-style */
-/* eslint-disable import/no-extraneous-dependencies */
-import React from 'react';
-import { Link } from 'react-router-dom';
-
-const Header: React.FC = () => (
-
-);
-
-export default Header;
\ No newline at end of file
+/* eslint-disable */
+import React, { useState } from "react";
+import { FaLocationDot } from "react-icons/fa6";
+import { IoMdMailUnread } from "react-icons/io";
+import { FaPhoneVolume } from "react-icons/fa6";
+import { FaBuildingCircleCheck } from "react-icons/fa6";
+import { FaRegUser } from "react-icons/fa";
+import { IoCartOutline } from "react-icons/io5";
+import { IoLogOutSharp } from "react-icons/io5";
+import { FaUserClock } from "react-icons/fa6";
+import { FaChevronDown } from "react-icons/fa";
+
+import "../../styles/Header.scss";
+
+import SearchInput from "../inputs/SearchInput";
+
+function Header() {
+ const [isOpen, setIsOpen] = useState(false);
+ const [isOpen2, setIsOpen2] = useState(false);
+
+ const categories = Array.from({ length: 5 }, (_, i) => i + 1);
+
+ function handleSetIsOpen() {
+ setIsOpen((isOpen) => !isOpen);
+ }
+
+ function handleSetIsOpen2() {
+ setIsOpen2((isOpen) => !isOpen);
+ }
+
+ return (
+
+
+
+
+
+ e-Commerce Ninjas
+
+
+
+
+
+
Our office
+
KK 4 Rd, Kigali, Rwanda
+
+
+
+
+
+
Email us
+
support@ecommerce-ninjas.com
+
+
+
+
Contact us
+
+250782355872
+
+
+
+
+
+
+
+
+ Shopping Categories
+
+
+
+
+ {isOpen && (
+
+ )}
+
+
+
+
+ Cart
+ $ 100
+
+
+
+
User
+
Account
+ {isOpen2 && (
+
+ )}
+
+
+
+
+
+ );
+}
+
+export default Header;
diff --git a/src/components/layout/SellerHeader.tsx b/src/components/layout/SellerHeader.tsx
new file mode 100644
index 00000000..8b9a33ab
--- /dev/null
+++ b/src/components/layout/SellerHeader.tsx
@@ -0,0 +1,32 @@
+/* eslint-disable */
+import React from "react";
+import { IoIosNotifications } from "react-icons/io";
+import { MdDarkMode } from "react-icons/md";
+import { MdLightMode } from "react-icons/md";
+
+import "../../styles/SellerHeader.scss";
+
+function SellerHeader() {
+ return (
+
+ Dashboard
+
+
+ 10
+
+
+
+
+
+ Light
+
+
+
+ Dark
+
+
+
+ );
+}
+
+export default SellerHeader;
diff --git a/src/components/sidebar/Sidebar.tsx b/src/components/sidebar/Sidebar.tsx
new file mode 100644
index 00000000..92e2e38f
--- /dev/null
+++ b/src/components/sidebar/Sidebar.tsx
@@ -0,0 +1,93 @@
+/* eslint-disable */
+
+import React, { useState } from "react";
+import { IoLogOutSharp } from "react-icons/io5";
+import { IoIosPeople } from "react-icons/io";
+import { FaBuildingCircleCheck } from "react-icons/fa6";
+import { AiFillDashboard } from "react-icons/ai";
+import { FaShop } from "react-icons/fa6";
+import { FaBoxArchive } from "react-icons/fa6";
+
+import "../../styles/Sidebar.scss";
+
+function Sidebar() {
+ const [isActive, setIsActive] = useState(false);
+
+ function handleSetActive() {
+ setIsActive((isActive) => !isActive);
+ }
+
+ return (
+
+
+
+ e-CommerceNinjas
+
+
+
+
+ );
+}
+
+export default Sidebar;
diff --git a/src/index.tsx b/src/index.tsx
index 7b2dfb30..6237650c 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,13 +1,13 @@
-/* eslint-disable linebreak-style */
-import React from 'react';
-import { createRoot } from 'react-dom/client';
-import { Provider } from 'react-redux';
-import { store } from './store/store';
-import App from './App';
+/* eslint-disable*/
+import React from "react";
+import { createRoot } from "react-dom/client";
+import { Provider } from "react-redux";
+import { store } from "./store/store";
+import App from "./App";
-const root = createRoot(document.getElementById('root')!);
+const root = createRoot(document.getElementById("root")!);
root.render(
-);
\ No newline at end of file
+);
diff --git a/src/pages/LandingPage.tsx b/src/pages/LandingPage.tsx
index 884a4781..4d3c1d36 100644
--- a/src/pages/LandingPage.tsx
+++ b/src/pages/LandingPage.tsx
@@ -1,14 +1,22 @@
-import React, { useEffect } from 'react';
-import { useAppDispatch, useAppSelector } from '../store/store';
-import { loadWelcomeMessage } from '../store/features/welcomeSlice';
-import { IWelcomeMessage } from '../utils/types/store';
-import Header from '../components/layout/Header';
-import Footer from '../components/layout/Footer';
-import '../styles/LandingPage.scss';
+/* eslint-disable */
+
+import React, { useEffect } from "react";
+import { useAppDispatch, useAppSelector } from "../store/store";
+import { loadWelcomeMessage } from "../store/features/welcomeSlice";
+import { IWelcomeMessage } from "../utils/types/store";
+import Header from "../components/layout/Header";
+import Footer from "../components/layout/Footer";
+import "../styles/LandingPage.scss";
+import SearchInput from "../components/inputs/SearchInput";
+import Sidebar from "../components/sidebar/Sidebar";
+import AdminHeader from "../components/layout/AdminHeader";
+import SellerHeader from "../components/layout/SellerHeader";
const LandingPage: React.FC = () => {
const dispatch = useAppDispatch();
- const welcomeMessage: IWelcomeMessage = useAppSelector((state) => state.initialMessage.welcomeMessage);
+ const welcomeMessage: IWelcomeMessage = useAppSelector(
+ (state) => state.initialMessage.welcomeMessage
+ );
useEffect(() => {
dispatch(loadWelcomeMessage());
@@ -16,11 +24,14 @@ const LandingPage: React.FC = () => {
return (
<>
+
+
-
- {welcomeMessage.message}
-
+ {welcomeMessage.message}
+
+
+
>
diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx
index 6e812f51..03dfb022 100644
--- a/src/pages/Login.tsx
+++ b/src/pages/Login.tsx
@@ -1,5 +1,7 @@
-import React from 'react';
-import Header from '../components/layout/Header';
+/* eslint-disable */
+
+import React from "react";
+import Header from "../components/layout/Header";
const Login: React.FC = () => (
<>
diff --git a/src/pages/NotFound.tsx b/src/pages/NotFound.tsx
index 8001f6e6..4b5038ad 100644
--- a/src/pages/NotFound.tsx
+++ b/src/pages/NotFound.tsx
@@ -1,4 +1,6 @@
-import React from 'react';
+/* eslint-disable */
+
+import React from "react";
const NotFound: React.FC = () => (
@@ -7,4 +9,4 @@ const NotFound: React.FC = () => (
);
-export default NotFound;
\ No newline at end of file
+export default NotFound;
diff --git a/src/router.tsx b/src/router.tsx
index 8809600d..18d7297e 100644
--- a/src/router.tsx
+++ b/src/router.tsx
@@ -1,10 +1,10 @@
-/* eslint-disable linebreak-style */
+/* eslint-disable*/
/* eslint-disable arrow-body-style */
-import React from 'react';
-import { Route, Routes } from 'react-router-dom';
-import LandingPage from './pages/LandingPage';
-import Login from './pages/Login';
-import NotFound from './pages/NotFound';
+import React from "react";
+import { Route, Routes } from "react-router-dom";
+import LandingPage from "./pages/LandingPage";
+import Login from "./pages/Login";
+import NotFound from "./pages/NotFound";
const AppRouter: React.FC = () => {
return (
@@ -18,4 +18,4 @@ const AppRouter: React.FC = () => {
);
};
-export default AppRouter;
\ No newline at end of file
+export default AppRouter;
diff --git a/src/store/features/welcomeSlice.tsx b/src/store/features/welcomeSlice.tsx
index 05940769..19db0cb1 100644
--- a/src/store/features/welcomeSlice.tsx
+++ b/src/store/features/welcomeSlice.tsx
@@ -1,33 +1,44 @@
-import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit';
-import axiosInstance from '../../utils/axios/axiosInstance';
-import type { IWelcomeMessage, IWelcomeMessageState } from '../../utils/types/store';
+/* eslint-disable */
+
+import { createSlice, createAsyncThunk, PayloadAction } from "@reduxjs/toolkit";
+import axiosInstance from "../../utils/axios/axiosInstance";
+import type {
+ IWelcomeMessage,
+ IWelcomeMessageState,
+} from "../../utils/types/store";
const initialState: IWelcomeMessageState = {
- welcomeMessage: { status: false, message: '' }
+ welcomeMessage: { status: false, message: "" },
};
export const loadWelcomeMessage = createAsyncThunk(
- 'welcomeMessage/loadWelcomeMessage',
+ "welcomeMessage/loadWelcomeMessage",
async () => {
- const response = await axiosInstance.get('/');
+ const response = await axiosInstance.get("/");
return response.data;
}
);
export const WelcomeSlice = createSlice({
- name: 'welcomeMessage',
+ name: "welcomeMessage",
initialState,
reducers: {},
extraReducers: (builder) => {
builder
.addCase(loadWelcomeMessage.pending, (state) => {
- state.welcomeMessage = { status: false, message: 'Loading...' };
- })
- .addCase(loadWelcomeMessage.fulfilled, (state, action: PayloadAction) => {
- state.welcomeMessage = action.payload;
+ state.welcomeMessage = { status: false, message: "Loading..." };
})
+ .addCase(
+ loadWelcomeMessage.fulfilled,
+ (state, action: PayloadAction) => {
+ state.welcomeMessage = action.payload;
+ }
+ )
.addCase(loadWelcomeMessage.rejected, (state) => {
- state.welcomeMessage = { status: false, message: 'Failed to load welcome message.' };
+ state.welcomeMessage = {
+ status: false,
+ message: "Failed to load welcome message.",
+ };
});
},
});
diff --git a/src/store/store.ts b/src/store/store.ts
index 9e8881ff..ea36a199 100644
--- a/src/store/store.ts
+++ b/src/store/store.ts
@@ -1,6 +1,8 @@
-import { configureStore } from '@reduxjs/toolkit';
-import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';
-import welcomeReducer from './features/welcomeSlice';
+/* eslint-disable */
+
+import { configureStore } from "@reduxjs/toolkit";
+import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux";
+import welcomeReducer from "./features/welcomeSlice";
export const store = configureStore({
reducer: {
@@ -9,4 +11,6 @@ export const store = configureStore({
});
export const useAppDispatch: () => typeof store.dispatch = useDispatch;
-export const useAppSelector: TypedUseSelectorHook> = useSelector;
+export const useAppSelector: TypedUseSelectorHook<
+ ReturnType
+> = useSelector;
diff --git a/src/stories/Button.stories.ts b/src/stories/Button.stories.ts
index 301a2d02..d5454641 100644
--- a/src/stories/Button.stories.ts
+++ b/src/stories/Button.stories.ts
@@ -1,5 +1,7 @@
-import type { Meta, StoryObj } from '@storybook/react';
-import Button from '../components/buttons/Button';
+/* eslint-disable */
+
+import type { Meta, StoryObj } from "@storybook/react";
+import Button from "../components/buttons/Button";
const meta = { component: Button } satisfies Meta;
export default meta;
@@ -7,12 +9,12 @@ type Story = StoryObj;
export const LongTitle = {
args: {
- title: 'This is how button will look like with long title',
+ title: "This is how button will look like with long title",
},
} satisfies Story;
export const ShortTitle = {
args: {
- title: 'Short Btn',
+ title: "Short Btn",
},
} satisfies Story;
diff --git a/src/styles/AdminHeader.scss b/src/styles/AdminHeader.scss
new file mode 100644
index 00000000..7550da67
--- /dev/null
+++ b/src/styles/AdminHeader.scss
@@ -0,0 +1,103 @@
+@import "./Colors";
+
+.admin-header {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ gap: 3.2rem;
+ padding: 2.4rem 5.2rem;
+}
+
+.header {
+ &__notification {
+ &__box {
+ position: relative;
+ cursor: pointer;
+ }
+
+ &__icon {
+ color: $primary-color;
+ width: 2rem;
+ height: 2rem;
+
+ &__1 {
+ width: 3rem;
+ height: 3rem;
+ transform: translateX(15%);
+ }
+ }
+
+ &__number {
+ font-size: 1rem;
+ color: $white;
+ font-weight: 600;
+ display: inline-block;
+ position: absolute;
+ top: 0;
+ transform: translate(-30%, -10%);
+ z-index: 2;
+
+ &::after {
+ content: "";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 1.8rem;
+ height: 1.8rem;
+ border-radius: 50%;
+ background-color: #dc143c;
+ z-index: -1;
+ }
+ }
+ }
+
+ &__user {
+ &__box {
+ display: flex;
+ align-items: center;
+ gap: 1rem;
+ }
+
+ &__img {
+ display: block;
+ width: 4rem;
+ height: 4rem;
+ border-radius: 50%;
+ border: 0.1rem solid $primary-color;
+ }
+
+ &__name {
+ font-weight: 600;
+ }
+ }
+
+ &__text {
+ font-size: 1.6rem;
+ }
+
+ &__logo {
+ display: flex;
+ align-items: center;
+ gap: 1.2rem;
+ align-self: center;
+ margin-right: auto;
+
+ &-container {
+ align-self: center;
+ }
+
+ &__img {
+ height: 3.6rem;
+ }
+
+ &__text {
+ font-size: 2.8rem;
+ color: #555;
+
+ span {
+ color: $primary-color;
+ }
+ }
+ }
+}
diff --git a/src/styles/Button.scss b/src/styles/Button.scss
new file mode 100644
index 00000000..bbd4abdf
--- /dev/null
+++ b/src/styles/Button.scss
@@ -0,0 +1,74 @@
+@import "./Colors";
+
+.button-wrapper {
+ width: 60rem;
+ margin: 5rem auto;
+ padding: 1rem;
+}
+
+.button {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ margin: 0.5rem;
+ padding: 0.75rem 1.5rem;
+ font-size: 1rem;
+ font-weight: bold;
+ text-align: center;
+ text-decoration: none;
+ cursor: pointer;
+ border: none;
+ border-radius: 0.25rem;
+ transition:
+ background-color 0.3s ease,
+ color 0.3s ease;
+ position: relative;
+
+ &--primary {
+ background-color: $primary-color;
+ color: $white;
+
+ &:hover {
+ background-color: darken($primary-color, 10%);
+ }
+ }
+
+ &--secondary {
+ background-color: $secondary-color;
+ color: $white;
+
+ &:hover {
+ background-color: darken($secondary-color, 10%);
+ }
+ }
+
+ &--outline {
+ background-color: transparent;
+ color: $primary-color;
+ border: 0.2rem solid $primary-color;
+
+ &:hover {
+ background-color: $primary-color;
+ color: $white;
+ }
+ }
+
+ &--disabled {
+ background-color: $secondary-color;
+ color: $white;
+ cursor: not-allowed;
+ }
+
+ .button-icon {
+ margin-right: 0.8rem;
+ }
+
+ .button-icon:last-child {
+ margin-right: 0;
+ margin-left: 0.8rem;
+ }
+
+ .button-text {
+ vertical-align: middle;
+ }
+}
diff --git a/src/styles/Categories.scss b/src/styles/Categories.scss
new file mode 100644
index 00000000..5d4bd2e9
--- /dev/null
+++ b/src/styles/Categories.scss
@@ -0,0 +1,186 @@
+@import "./Colors";
+
+.categories {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ grid-template-rows: repeat(3, 1fr);
+ row-gap: 0.4rem;
+ column-gap: 1rem;
+ background-color: #d7d7d7;
+
+ &__filters {
+ border-top: 0.1rem solid #ccc;
+ border-bottom: 0.1rem solid #ccc;
+ padding: 1.2rem;
+ display: flex;
+ gap: 20rem;
+ justify-content: space-between;
+ }
+
+ &__filter {
+ outline: none;
+ width: 25rem;
+ border: none;
+ display: flex;
+ align-items: center;
+ gap: 3.2rem;
+ padding: 1.2rem;
+ background-color: $primary-color-light;
+
+ &__text {
+ font-size: 1.8rem;
+ font-weight: 600;
+ }
+
+ &__icon {
+ font-size: 3.2rem;
+ color: $primary-color;
+ font-weight: 800;
+ transform: rotate(90deg);
+ }
+ }
+
+ &__form {
+ flex: 1;
+ }
+
+ &__content {
+ position: absolute;
+ z-index: 1;
+ top: 50%;
+ transform: translateY(-50%) translateX(30%);
+
+ &__right {
+ transform: translateY(-50%);
+ left: 55%;
+ }
+ }
+
+ &__text {
+ font-size: 1.8rem;
+ letter-spacing: 0.1rem;
+ font-weight: 600;
+ margin-bottom: 0.8rem;
+ color: #fff;
+ }
+
+ &__btn {
+ display: inline-block;
+ padding: 0.4rem 2rem;
+ border: none;
+ border-radius: 10rem;
+ color: #4c6ef5;
+ cursor: pointer;
+ font-weight: 600;
+ font-size: 1.2rem;
+
+ &__orange {
+ color: orangered;
+ }
+
+ &__gray {
+ color: #999;
+ }
+ }
+
+ &__box {
+ position: relative;
+
+ &__1 {
+ grid-row: 1 / 2;
+ grid-column: 1 / 2;
+ }
+
+ &__2 {
+ grid-row: 2 / 3;
+ grid-column: 1 / 2;
+ }
+
+ &__3 {
+ grid-row: 1 / span 2;
+ grid-column: 2 / 3;
+ }
+ }
+
+ &__img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+
+ &__controlls {
+ width: 100%;
+ position: absolute;
+ top: 50%;
+ }
+
+ &__controll {
+ position: absolute;
+ transform: translateY(-50%);
+ border: none;
+ display: inline-block;
+ width: 2rem;
+ height: 2rem;
+ font-size: 1.2rem;
+ font-weight: 700;
+ color: #c7c7c7;
+ cursor: pointer;
+ border-radius: 10rem;
+
+ &__left {
+ left: 5%;
+ }
+
+ &__right {
+ right: 5%;
+ }
+ }
+
+ .dots {
+ position: absolute;
+ bottom: 5%;
+ left: 10%;
+ transform: translateX(-50%);
+ display: flex;
+ gap: 1.2rem;
+ align-items: center;
+ }
+
+ .dot {
+ left: 0;
+ width: 1rem;
+ height: 1rem;
+ border-radius: 50%;
+ background-color: #fff;
+
+ &__active {
+ background-color: orange;
+ }
+ }
+
+ .search__icon {
+ font-size: 3rem;
+ }
+
+ &__btn__join {
+ font-size: 1.8rem;
+ font-weight: 700;
+ color: $primary-color;
+ display: inline-block;
+ padding: 1rem 4.8rem;
+ border-radius: 10rem;
+ border: 0.1rem solid $primary-color;
+ cursor: pointer;
+ transition: all 0.2s ease-in;
+
+ &:hover {
+ background-color: $primary-color;
+ color: $white;
+ }
+ }
+
+ &__arrow {
+ font-size: 2.4rem;
+ font-weight: 900;
+ }
+}
diff --git a/src/styles/Colors.scss b/src/styles/Colors.scss
new file mode 100644
index 00000000..fd8c1546
--- /dev/null
+++ b/src/styles/Colors.scss
@@ -0,0 +1,16 @@
+$primary-color: #ff6d18;
+$primary-color-light: #ffe2d1;
+$primary-color-dark: #ff8a46;
+$secondary-color: #777777;
+$black: #111;
+$white: #fff;
+$white-2: #eee;
+$background-color: #ffefe1;
+$icon-color: #ff6d18;
+$text-color: #112a46;
+$secondary-color: #777777;
+$black: #000;
+$white: #fff;
+$black-2: #232f3e;
+$black-3: #131a22;
+$secondary-color-2: #edeef0;
diff --git a/src/styles/Footer.scss b/src/styles/Footer.scss
new file mode 100644
index 00000000..ba76406e
--- /dev/null
+++ b/src/styles/Footer.scss
@@ -0,0 +1,149 @@
+@import "./Colors";
+
+.footer {
+ &__container {
+ background-color: $black-2;
+ padding: 8rem 5.2rem 2.4rem 5.2rem;
+ }
+
+ &__content {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ justify-content: space-between;
+ margin-bottom: 4.8rem;
+ }
+
+ &__left {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ &__right {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ &__nav {
+ display: flex;
+ flex-direction: column;
+ gap: 2.4rem;
+
+ &__last {
+ justify-self: end;
+ }
+
+ &__second__last {
+ justify-self: center;
+ }
+ }
+
+ &__list {
+ list-style: none;
+ display: flex;
+ flex-direction: column;
+ gap: 0.8rem;
+ }
+
+ &__title {
+ font-size: 2.2rem;
+ font-weight: 900;
+ color: $white-2;
+ }
+
+ &__special__item {
+ display: grid;
+ grid-template-columns: auto 1fr;
+ column-gap: 1.2rem;
+ row-gap: 1.6rem;
+ }
+
+ &__item {
+ font-size: 1.8rem;
+ line-height: 1.4;
+ }
+
+ &__link {
+ &:link,
+ &:visited {
+ text-decoration: none;
+ font-size: 1.3rem;
+ color: $white-2;
+ letter-spacing: 0.05rem;
+ transition: all 0.15s ease-in;
+ }
+
+ &:hover,
+ &:active {
+ color: $primary-color;
+ }
+ }
+
+ &__socials {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 2.4rem;
+ width: 90%;
+ padding-left: 9.6rem;
+ }
+
+ &__social {
+ height: 3rem;
+ width: 3rem;
+ }
+
+ &__additional {
+ background-color: $black-3;
+ padding: 3.2rem 1.6rem;
+
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ gap: 1.8rem;
+ }
+
+ &__additional__list {
+ display: flex;
+ align-items: center;
+ gap: 2.4rem;
+ color: #fff;
+ }
+
+ &__additional__item:first-child {
+ list-style: none;
+ }
+
+ &__additional__link {
+ &:link,
+ &:visited {
+ text-decoration: none;
+ color: $white;
+ font-size: 1.3rem;
+ }
+ }
+
+ &__address {
+ font-size: 1.3rem;
+ font-style: normal;
+ line-height: 1.4;
+ color: $white-2;
+ }
+
+ &__copyright {
+ font-size: 1.2rem;
+ color: $white-2;
+ }
+
+ &__text {
+ font-size: 1.2rem;
+ justify-self: start;
+ color: $white-2;
+ }
+
+ &__icon {
+ width: 3.2rem;
+ height: 3.2rem;
+ color: $white-2;
+ }
+}
diff --git a/src/styles/Header.scss b/src/styles/Header.scss
new file mode 100644
index 00000000..629f1af6
--- /dev/null
+++ b/src/styles/Header.scss
@@ -0,0 +1,303 @@
+@import "./Colors";
+
+.header {
+ display: flex;
+ flex-direction: column;
+
+ &__top {
+ flex: 1 0 auto;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border-bottom: 0.01rem solid #ccc;
+ padding: 2.4rem 5.2rem;
+ }
+
+ &__input {
+ flex: 0 0 40%;
+ }
+
+ &__bottom {
+ padding: 0 5.2rem;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+
+ &__top {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+
+ &__bottom {
+ display: flex;
+ justify-content: flex-end;
+ padding-bottom: 1.2rem;
+ padding-right: 4.8rem;
+ }
+ }
+
+ &__dropdown__container {
+ margin-bottom: 1.2rem;
+ padding: 1.6rem 2.4rem;
+ display: flex;
+ align-items: center;
+ gap: 3.2rem;
+ justify-content: space-between;
+ background-color: $background-color;
+ cursor: pointer;
+ }
+
+ &__selected {
+ &__text {
+ font-size: 2rem;
+ font-weight: 600;
+ letter-spacing: 0.1rem;
+ color: $text-color;
+ }
+
+ &__icon {
+ font-weight: 600;
+ width: 3.2rem;
+ height: 3.2rem;
+ color: $primary-color;
+ transition: all 0.08s linear;
+ }
+ }
+
+ &__logo {
+ display: flex;
+ align-items: center;
+ gap: 1.2rem;
+ align-self: center;
+
+ &-container {
+ align-self: center;
+ }
+
+ &__img {
+ height: 3.6rem;
+ }
+
+ &__text {
+ font-size: 2.8rem;
+ color: #555;
+
+ span {
+ color: $primary-color;
+ }
+ }
+ }
+
+ &__box {
+ display: grid;
+ grid-template-columns: auto 1fr;
+ row-gap: 0.4rem;
+ column-gap: 1rem;
+ }
+
+ &__icon {
+ font-size: 3.2rem;
+ color: $primary-color;
+ grid-column: 1 / 2;
+ grid-row: 1 / span 2;
+ }
+
+ &__text {
+ font-size: 2rem;
+ font-weight: 700;
+ grid-column: 2 / -1;
+ letter-spacing: 0.08rem;
+ }
+
+ &__description {
+ font-size: 1.4rem;
+ grid-column: 2 / -1;
+ letter-spacing: 0.04rem;
+ }
+
+ &__container {
+ display: flex;
+ flex-direction: column;
+ gap: 3.2rem;
+ }
+
+ &__content {
+ display: flex;
+ gap: 6rem;
+ }
+
+ &__nav {
+ align-self: center;
+
+ ul {
+ display: flex;
+ align-items: center;
+ list-style: none;
+ gap: 3.6rem;
+ }
+
+ a:link,
+ a:visited {
+ text-decoration: none;
+ font-size: 2rem;
+ color: #555;
+ }
+
+ a:active,
+ a:hover {
+ color: $primary-color;
+ border-bottom: 0.1rem solid #ff6d18;
+ }
+ }
+
+ &__menu {
+ position: relative;
+ }
+
+ &__dropdown {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ top: 105%;
+ background-color: #fff;
+ box-shadow: 0 5rem 10rem 0 rgba(0, 0, 0, 0.08);
+ background-color: $background-color;
+ padding: 3.2rem;
+ border-radius: 0.9rem;
+ z-index: 1000;
+ transition: all 0.3s ease-in;
+ }
+}
+
+.dropdown {
+ &__list {
+ list-style: none;
+ display: flex;
+ flex-direction: column;
+ gap: 2.4rem;
+ }
+
+ &__link {
+ &:link,
+ &:visited {
+ font-size: 2rem;
+ color: $secondary-color;
+ text-decoration: none;
+ display: flex;
+ align-items: center;
+ gap: 1.2rem;
+ }
+
+ &:hover,
+ &:active {
+ color: $primary-color;
+ }
+ }
+}
+
+.cart {
+ &__container {
+ display: grid;
+ grid-template-columns: auto 1fr;
+ grid-template-rows: repeat(2, 1fr);
+ align-items: center;
+ column-gap: 1rem;
+ }
+
+ &__icon {
+ color: $primary-color;
+ width: 3.2rem;
+ height: 3.2rem;
+ grid-column: 1 / 2;
+ grid-row: span 2;
+ }
+
+ &__text {
+ font-size: 1.8rem;
+ font-weight: 700;
+ }
+
+ &__description {
+ font-size: 1.6rem;
+ color: #888;
+ }
+}
+
+.rotate {
+ transform: rotate(180deg);
+}
+
+.user__container {
+ position: relative;
+ height: 100%;
+ flex: 0 0 10%;
+ cursor: pointer;
+
+ &::before {
+ content: "";
+ position: absolute;
+ top: -58%;
+ left: -30%;
+ width: 0.2rem;
+ height: 7rem;
+ background-color: #ccc;
+ }
+}
+
+.order {
+ &__dropdown {
+ background-color: $primary-color;
+ color: $white;
+ padding: 1.8rem;
+ border-radius: 0.6rem;
+ position: absolute;
+ left: -12%;
+ top: 150%;
+ width: 130%;
+
+ &::before {
+ content: "";
+ position: absolute;
+ top: -3%;
+ left: 6%;
+ width: 5rem;
+ height: 5rem;
+ background-color: $black;
+ transform: rotate(45deg);
+ z-index: 1;
+ background-color: $primary-color;
+ }
+ }
+
+ &__list {
+ list-style: none;
+ display: flex;
+ flex-direction: column;
+ gap: 1.2rem;
+ }
+
+ &__icon {
+ width: 1.8rem;
+ height: 1.8rem;
+ }
+
+ &__text {
+ font-size: 1.4rem;
+ }
+
+ &__link {
+ display: flex;
+ align-items: center;
+ gap: 0.8rem;
+
+ &:link,
+ &:visited {
+ text-decoration: none;
+ color: inherit;
+ font-family: inherit;
+ position: relative;
+ z-index: 2;
+ }
+ }
+}
diff --git a/src/styles/Input.scss b/src/styles/Input.scss
new file mode 100644
index 00000000..45596226
--- /dev/null
+++ b/src/styles/Input.scss
@@ -0,0 +1,158 @@
+@import "./Colors";
+
+.input-wrapper {
+ width: 40rem;
+ margin: 5rem auto;
+ padding: 1rem;
+}
+
+.floating-label {
+ margin-bottom: 3rem;
+ position: relative;
+
+ > label {
+ font-weight: normal;
+ font-size: 1.8rem;
+ color: $secondary-color;
+ pointer-events: none;
+ position: absolute;
+ left: 1.2rem;
+ top: -0.1rem;
+ transition: 0.2s ease all;
+ padding: 0 0.4rem;
+ background-color: $white;
+ z-index: 1;
+ }
+
+ .input-highlight {
+ width: 100%;
+ height: 50%;
+ pointer-events: none;
+ position: absolute;
+ top: 0.8rem;
+ left: 0;
+ opacity: 0.5;
+ }
+}
+
+// Form Elements
+.floating-input,
+.floating-select {
+ display: block;
+ font-size: 1.4rem;
+ width: 100%;
+ height: 4rem;
+ padding: 0.6rem 1.2rem;
+ background-color: transparent;
+ border: 0.1rem solid $primary-color;
+ border-radius: 0.4rem;
+ position: relative;
+ z-index: 0;
+
+ &:focus {
+ outline: none;
+ border-color: $secondary-color;
+
+ ~ label {
+ color: $primary-color;
+ }
+ }
+
+ &:not(:placeholder-shown) ~ label,
+ &:not([value=""]) ~ label,
+ &:valid ~ label {
+ font-size: 1.4rem;
+ color: $primary-color;
+ padding: 0 0.4rem;
+ background-color: $white;
+ top: -0.1rem;
+ left: 1.4rem;
+ }
+}
+
+.floating-textarea {
+ min-height: 6rem;
+ max-height: 25rem;
+ overflow: hidden;
+ overflow-x: hidden;
+}
+
+// Active State
+.floating-input:focus,
+.floating-select:focus {
+ ~ .bar {
+ &:before,
+ &:after {
+ width: 550%;
+ }
+ }
+
+ ~ .input-highlight {
+ animation: input-Highlighter 0.1s ease;
+ }
+}
+
+// Normal Inputs
+.input-default {
+ display: block;
+ font-size: 1.4rem;
+ width: 100%;
+ height: 4rem;
+ padding: 0.6rem 1.2rem;
+ background-color: $white;
+ border: 0.1rem solid $primary-color;
+ border-radius: 0.4rem;
+ margin-bottom: 2rem;
+
+ &:focus {
+ outline: none;
+ border-color: $primary-color;
+ }
+}
+
+.input-rounded {
+ display: block;
+ font-size: 1.4rem;
+ width: 100%;
+ height: 4rem;
+ padding: 0.6rem 1.7rem;
+ background-color: $white;
+ border: 0.1rem solid $primary-color;
+ border-radius: 2rem;
+ margin-bottom: 2rem;
+
+ &:focus {
+ outline: none;
+ border-color: $primary-color;
+ }
+}
+
+.input-icon {
+ display: flex;
+ align-items: center;
+ font-size: 1.4rem;
+ width: 100%;
+ height: 4rem;
+ padding: 0.6rem 1.2rem;
+ background-color: $white;
+ border: 0.1rem solid $secondary-color;
+ border-radius: 0.4rem;
+ margin-bottom: 2rem;
+ position: relative;
+
+ &:focus-within {
+ border-color: $primary-color;
+ }
+
+ input {
+ border: none;
+ outline: none;
+ flex: 1;
+ padding: 0.6rem 0.6rem;
+ }
+
+ .icon {
+ color: $icon-color;
+ margin-right: 0.1rem;
+ }
+}
diff --git a/src/styles/LandingPage.scss b/src/styles/LandingPage.scss
index e26b291c..aa533d75 100644
--- a/src/styles/LandingPage.scss
+++ b/src/styles/LandingPage.scss
@@ -1,12 +1,16 @@
-$primary-color: #FF6D18;
+@import "./Colors";
.landingPage {
background: $primary-color;
- color: white;
- padding: 20px;
+ color: white;
+ padding: 2rem;
h1 {
- font-size: 2em;
- margin-bottom: 10px;
+ font-size: 2rem;
+ margin-bottom: 1rem;
}
}
+
+.container__button {
+ padding: 3.2rem;
+}
diff --git a/src/styles/SearchInput.scss b/src/styles/SearchInput.scss
new file mode 100644
index 00000000..6f209380
--- /dev/null
+++ b/src/styles/SearchInput.scss
@@ -0,0 +1,56 @@
+@import "./Colors";
+
+.search-container {
+ display: flex;
+ align-items: center;
+ border: 0.1rem solid $primary-color-dark;
+ border-radius: 10rem;
+ overflow: hidden;
+ position: relative;
+
+ .search-icon {
+ font-size: 2.4rem;
+ padding: 0 1rem;
+ display: flex;
+ color: $primary-color;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ cursor: pointer;
+ z-index: 1;
+ }
+
+ input {
+ border: none;
+ outline: none;
+ font-family: inherit;
+ font-size: 1.6rem;
+ flex: 1;
+ background-color: transparent;
+
+ &::placeholder {
+ color: $secondary-color;
+ }
+ }
+
+ .search-button {
+ background-color: $primary-color;
+ border: none;
+ padding: 0.8rem 4.8rem;
+ color: $white;
+ font-size: 1.6rem;
+ font-weight: 600;
+ cursor: pointer;
+ position: relative;
+ z-index: 1;
+ transition: all 0.2s ease-in;
+
+ &:hover {
+ background-color: darken($primary-color, 10%);
+ }
+
+ &:focus {
+ outline: none;
+ }
+ }
+}
diff --git a/src/styles/SellerHeader.scss b/src/styles/SellerHeader.scss
new file mode 100644
index 00000000..2399ec36
--- /dev/null
+++ b/src/styles/SellerHeader.scss
@@ -0,0 +1,60 @@
+@import "./Colors";
+
+.seller-header {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ gap: 3.2rem;
+ padding: 2.4rem 5.2rem;
+}
+
+.header {
+ &__theme {
+ display: flex;
+ align-items: center;
+ gap: 0.4rem;
+ padding: 0.3rem 1rem;
+
+ cursor: pointer;
+
+ &--active {
+ border-radius: 10rem;
+ background-color: #eee;
+ }
+
+ &__container {
+ display: flex;
+ align-items: center;
+ gap: 0.2rem;
+ background-color: #ccc;
+ border-radius: 10rem;
+ overflow: hidden;
+ }
+
+ &__icon {
+ width: 1.8rem;
+ height: 1.8rem;
+ }
+
+ &__text {
+ font-size: 1.2rem;
+ }
+ }
+
+ &__theme--active &__theme__text,
+ &__theme--active &__theme__icon {
+ color: $primary-color;
+ }
+
+ &__title {
+ font-size: 3.2rem;
+ margin-right: auto;
+ }
+}
+
+.line {
+ width: 0.1rem;
+ height: 3.2rem;
+ transform: translateX(0.6rem);
+ background-color: #666;
+}
diff --git a/src/styles/Sidebar.scss b/src/styles/Sidebar.scss
new file mode 100644
index 00000000..3425f1b5
--- /dev/null
+++ b/src/styles/Sidebar.scss
@@ -0,0 +1,135 @@
+@import "./Colors";
+
+.sidebar {
+ display: inline-block;
+ height: 100vh;
+ position: relative;
+ overflow: hidden;
+ background-color: $white;
+ padding-bottom: 3.2rem;
+ border-right: 0.1rem solid #eee;
+
+ &__content {
+ position: relative;
+ height: 100%;
+ }
+
+ &::before {
+ content: "";
+ position: absolute;
+ width: 28%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ background-color: $primary-color;
+ }
+
+ &__title {
+ font-size: 2.2rem;
+ transform: translateX(34%);
+ padding-top: 2.4rem;
+
+ span {
+ color: $primary-color;
+ }
+ }
+
+ &__list {
+ list-style: none;
+ display: flex;
+ flex-direction: column;
+ gap: 1.6rem;
+ transform: translateY(5.2rem);
+ }
+
+ &__item {
+ position: relative;
+ display: flex;
+ align-items: center;
+ gap: 2rem;
+ transition: all 0.2s ease-in;
+ padding-right: 3rem;
+
+ &:hover {
+ background-color: $primary-color;
+ }
+ }
+
+ &__link {
+ padding: 1.6rem 5.2rem 1.6rem 2.4rem;
+ display: flex;
+ align-items: center;
+ gap: 4.4rem;
+ font-size: 2.4rem;
+ cursor: pointer;
+
+ &:link,
+ &:visited {
+ text-decoration: none;
+ font-size: 2.4rem;
+ color: $text-color;
+ }
+
+ &:hover,
+ &:active {
+ color: $white;
+ }
+ }
+
+ &__icon {
+ font-size: 3.6rem;
+
+ color: $white;
+ }
+
+ &__inner__icon {
+ font-size: 3.2rem;
+ font-weight: 700;
+ transform: rotate(90deg);
+ transition: all 0.15s ease-in;
+ }
+
+ &__logout {
+ transform: translateY(200%);
+ }
+
+ &__inner__link {
+ &--active {
+ background-color: $primary-color;
+ }
+
+ &:link,
+ &:visited {
+ text-decoration: none;
+ color: $text-color;
+ opacity: 0.8;
+ font-size: 1.8rem;
+ display: inline-block;
+ padding: 0.8rem 3.2rem;
+ border-radius: 10rem;
+ margin-bottom: 1.6rem;
+ }
+
+ &:hover,
+ &:active {
+ background-color: $primary-color;
+ }
+ }
+}
+
+.dropdown {
+ position: relative;
+ transform: translateY(-12%);
+ left: 28%;
+ background-color: #eee;
+ padding: 2.4rem;
+ transition: all 0.3s ease-in;
+
+ ul {
+ list-style: none;
+ }
+}
+
+.rotate {
+ transform: rotate(-90deg);
+}
diff --git a/src/styles/style.scss b/src/styles/style.scss
new file mode 100644
index 00000000..cefd9a80
--- /dev/null
+++ b/src/styles/style.scss
@@ -0,0 +1,44 @@
+@import url("https://fonts.googleapis.com/css2?family=Averia+Serif+Libre:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Rubik:ital,wght@0,300..900;1,300..900&display=swap");
+@import "./Colors";
+
+*,
+*::before,
+*::after {
+ padding: 0;
+ margin: 0;
+ box-sizing: border-box;
+}
+
+html {
+ font-size: 10px;
+}
+
+body {
+ font-family: "Averia Serif Libre", serif;
+ font-weight: 400;
+ line-height: 1;
+ color: $text-color;
+}
+
+.container {
+ max-width: 150rem;
+ padding: 0 3.2rem;
+ margin: 0 auto;
+}
+
+::-webkit-scrollbar {
+ width: 1.2rem;
+}
+
+::-webkit-scrollbar-track {
+ background-color: #3b5bdb;
+}
+
+::-webkit-scrollbar-thumb {
+ background-color: #228be6;
+ border-radius: 10rem;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background-color: #3897e9;
+}
diff --git a/src/test/Button.test.tsx b/src/test/Button.test.tsx
index 64928b73..3d179d43 100644
--- a/src/test/Button.test.tsx
+++ b/src/test/Button.test.tsx
@@ -1,16 +1,14 @@
-/* eslint-disable linebreak-style */
-/* eslint-disable import/no-extraneous-dependencies */
-/* eslint-disable import/extensions */
-import React from 'react';
-import { render, screen } from '@testing-library/react';
-import '@testing-library/jest-dom';
-import Button from '../components/buttons/Button';
+/* eslint-disable */
+import React from "react";
+import { render, screen } from "@testing-library/react";
+import "@testing-library/jest-dom";
+import Button from "../components/buttons/Button";
-describe('Button Component', () => {
- it('renders button with correct title', () => {
- const title = 'Click me';
+describe("Button Component", () => {
+ it("renders button with correct title", () => {
+ const title = "Click me";
render();
- const buttonElement = screen.getByRole('button', { name: title });
+ const buttonElement = screen.getByRole("button", { name: title });
expect(buttonElement).toBeInTheDocument();
});
});
diff --git a/src/utils/axios/axiosInstance.ts b/src/utils/axios/axiosInstance.ts
index 9bb297c6..a3345fd2 100644
--- a/src/utils/axios/axiosInstance.ts
+++ b/src/utils/axios/axiosInstance.ts
@@ -1,15 +1,17 @@
-import axios from 'axios';
+/* eslint-disable */
+
+import axios from "axios";
const axiosInstance = axios.create({
- baseURL: 'https://e-commerce-ninjas-platform-backend.onrender.com/',
+ baseURL: "https://e-commerce-ninjas-platform-backend.onrender.com/",
headers: {
- 'Content-Type': 'application/json',
+ "Content-Type": "application/json",
},
});
axiosInstance.interceptors.request.use(
(config) => {
- const token = localStorage.getItem('token');
+ const token = localStorage.getItem("token");
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}