add css files for each compnent
This commit is contained in:
parent
cb7ab37eb0
commit
89d5b17dc1
21
package-lock.json
generated
21
package-lock.json
generated
@ -29,8 +29,8 @@
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"eslint-plugin-react-refresh": "^0.4.6",
|
||||
"json-server": "^1.0.0-beta.1",
|
||||
"postcss": "^8.4.38",
|
||||
"tailwindcss": "^3.4.4",
|
||||
"postcss": "^8.4.39",
|
||||
"tailwindcss": "^3.4.6",
|
||||
"vite": "^5.2.0"
|
||||
}
|
||||
},
|
||||
@ -1795,6 +1795,7 @@
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"browserslist": "^4.23.0",
|
||||
"caniuse-lite": "^1.0.30001599",
|
||||
@ -4566,9 +4567,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.38",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
|
||||
"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
|
||||
"version": "8.4.39",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
|
||||
"integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@ -4584,9 +4585,10 @@
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.7",
|
||||
"picocolors": "^1.0.0",
|
||||
"picocolors": "^1.0.1",
|
||||
"source-map-js": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
@ -6208,10 +6210,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/tailwindcss": {
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz",
|
||||
"integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==",
|
||||
"version": "3.4.6",
|
||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.6.tgz",
|
||||
"integrity": "sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@alloc/quick-lru": "^5.2.0",
|
||||
"arg": "^5.0.2",
|
||||
|
@ -36,8 +36,8 @@
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"eslint-plugin-react-refresh": "^0.4.6",
|
||||
"json-server": "^1.0.0-beta.1",
|
||||
"postcss": "^8.4.38",
|
||||
"tailwindcss": "^3.4.4",
|
||||
"postcss": "^8.4.39",
|
||||
"tailwindcss": "^3.4.6",
|
||||
"vite": "^5.2.0"
|
||||
}
|
||||
}
|
||||
|
@ -1,18 +0,0 @@
|
||||
.employee-image-container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.employee-image-container button {
|
||||
position: absolute;
|
||||
bottom: -10px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.input-underline:focus {
|
||||
border-color: #4b5563; /* Adjust focus border color */
|
||||
}
|
||||
|
@ -4,6 +4,8 @@ import Sidebar from '../sidebar/Sidebar';
|
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||
import { faChevronLeft } from '@fortawesome/free-solid-svg-icons';
|
||||
import axiosInstance from '../../api/axiosConfig';
|
||||
import '../../styles/AddEmployee.css';
|
||||
|
||||
|
||||
const AddEmployee = () => {
|
||||
const navigate = useNavigate();
|
||||
@ -84,12 +86,12 @@ const AddEmployee = () => {
|
||||
<div className="flex flex-row">
|
||||
<Sidebar />
|
||||
<div className="w-full flex flex-col min-h-screen text-black">
|
||||
<div className="min-h-screen text-gray-800 p-6">
|
||||
<div className="flex items-center mb-6">
|
||||
<Link to="/employees" className="text-#0e355b text-xl mr-4">
|
||||
<div className="min-h-screen text-secondary p-6 bg-light">
|
||||
<div className="flex items-center ">
|
||||
<Link to="/employees" className="text-primary text-xl ">
|
||||
<FontAwesomeIcon icon={faChevronLeft} />
|
||||
</Link>
|
||||
<h1 className="text-2xl font-semibold text-#0e355b">
|
||||
<h1 className="text-2xl font-semibold text-primary">
|
||||
create employee account
|
||||
</h1>
|
||||
</div>
|
||||
@ -120,16 +122,16 @@ const AddEmployee = () => {
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => document.getElementById('imageUpload').click()}
|
||||
className="absolute bottom-0 left-1/2 transform -translate-x-1/2 bg-gray-700 text-white text-xs px-2 py-1 rounded-full"
|
||||
className="image-upload-btn"
|
||||
>
|
||||
add customer image
|
||||
Upload
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<form onSubmit={handleAddEmployeeSubmit} className="space-y-4">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
employee firstname:
|
||||
</label>
|
||||
<input
|
||||
@ -137,11 +139,11 @@ const AddEmployee = () => {
|
||||
name="firstname"
|
||||
value={employeeData.firstname}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
employee lastname:
|
||||
</label>
|
||||
<input
|
||||
@ -149,11 +151,11 @@ const AddEmployee = () => {
|
||||
name="lastname"
|
||||
value={employeeData.lastname}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
age:
|
||||
</label>
|
||||
<input
|
||||
@ -161,18 +163,18 @@ const AddEmployee = () => {
|
||||
name="age"
|
||||
value={employeeData.age}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
gender:
|
||||
</label>
|
||||
<select
|
||||
name="gender"
|
||||
value={employeeData.gender}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
>
|
||||
<option value="" disabled>
|
||||
select gender
|
||||
@ -183,7 +185,7 @@ const AddEmployee = () => {
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
mobile:
|
||||
</label>
|
||||
<input
|
||||
@ -191,11 +193,11 @@ const AddEmployee = () => {
|
||||
name="mobile"
|
||||
value={employeeData.mobile}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
/>
|
||||
</div>
|
||||
<div className="md:col-span-2 lg:col-span-3">
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
address line 1:
|
||||
</label>
|
||||
<input
|
||||
@ -203,11 +205,11 @@ const AddEmployee = () => {
|
||||
name="address_line_1"
|
||||
value={employeeData.address_line_1}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
/>
|
||||
</div>
|
||||
<div className="md:col-span-2 lg:col-span-3">
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
address line 2:
|
||||
</label>
|
||||
<input
|
||||
@ -215,11 +217,11 @@ const AddEmployee = () => {
|
||||
name="address_line_2"
|
||||
value={employeeData.address_line_2}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
/>
|
||||
</div>
|
||||
<div className="md:col-span-2 lg:col-span-3">
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
nearby landmark:
|
||||
</label>
|
||||
<input
|
||||
@ -227,11 +229,11 @@ const AddEmployee = () => {
|
||||
name="nearby_landmark"
|
||||
value={employeeData.nearby_landmark}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
/>
|
||||
</div>
|
||||
<div className="md:col-span-2 lg:col-span-3">
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
pincode:
|
||||
</label>
|
||||
<input
|
||||
@ -239,18 +241,18 @@ const AddEmployee = () => {
|
||||
name="pincode"
|
||||
value={employeeData.pincode}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
/>
|
||||
</div>
|
||||
<div className="md:col-span-2 lg:col-span-3">
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
city:
|
||||
</label>
|
||||
<select
|
||||
name="city_id"
|
||||
value={employeeData.city_id}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
>
|
||||
<option value="" disabled>
|
||||
select city
|
||||
@ -264,7 +266,7 @@ const AddEmployee = () => {
|
||||
</select>
|
||||
</div>
|
||||
<div className="md:col-span-2 lg:col-span-3">
|
||||
<label className="block text-gray-800 font-medium">
|
||||
<label className="block text-secondary font-medium">
|
||||
email:
|
||||
</label>
|
||||
<input
|
||||
@ -272,14 +274,14 @@ const AddEmployee = () => {
|
||||
name="email"
|
||||
value={employeeData.email}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="input-underline w-full p-2 focus-border"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-center mt-6">
|
||||
<button
|
||||
type="submit"
|
||||
className="bg-#0e355b text-white px-4 py-2 rounded-md font-semibold"
|
||||
className="btn-primary"
|
||||
>
|
||||
create account
|
||||
</button>
|
||||
|
@ -1,14 +1,13 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import Sidebar from '../sidebar/Sidebar';
|
||||
import './Dashboard.css';
|
||||
import '../../styles/AdminDashboard.css';
|
||||
|
||||
const AdminDashboard = () => {
|
||||
const navigate = useNavigate();
|
||||
const [userName, setUserName] = useState('');
|
||||
|
||||
useEffect(() => {
|
||||
// Fetch user name from localStorage or state management
|
||||
const user = JSON.parse(localStorage.getItem('user'));
|
||||
if (user && user.name) {
|
||||
setUserName(user.name);
|
||||
@ -16,41 +15,37 @@ const AdminDashboard = () => {
|
||||
}, []);
|
||||
|
||||
const handleClick = (link) => {
|
||||
navigate(link); // Redirect to the provided link
|
||||
navigate(link);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="flex flex-row">
|
||||
<div className="dashboard-container">
|
||||
<Sidebar />
|
||||
<div className="w-full flex flex-col min-h-screen text-white">
|
||||
<header className="w-full p-4 flex justify-between items-center">
|
||||
<div className="flex items-center">
|
||||
<h1 className="text-#0e355b text-2xl font-bold">admin dashboard</h1>
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-#4b5563">welcome back {userName}</p>
|
||||
</div>
|
||||
<div className="dashboard-content">
|
||||
<header className="dashboard-header">
|
||||
<h1 className="header-title">Admin Dashboard</h1>
|
||||
<p className="welcome-text">Welcome back, {userName}</p>
|
||||
</header>
|
||||
<main className="flex-1 flex flex-col items-center justify-center p-6">
|
||||
<div className="w-full max-w-3xl text-center">
|
||||
<img src="path_to_image" alt="Dashboard Graphic" className="w-full rounded-md mb-6" />
|
||||
<main className="dashboard-main">
|
||||
<div className="dashboard-buttons">
|
||||
<img src="path_to_image" alt="Dashboard Graphic" className="dashboard-image" />
|
||||
<button
|
||||
className="w-full py-4 bg-#0e355b text-#d1d5db rounded-md font-semibold mb-4 hover:bg-#154676"
|
||||
className="btn-primary"
|
||||
onClick={() => handleClick('')}
|
||||
>
|
||||
view orders
|
||||
View Orders
|
||||
</button>
|
||||
<button
|
||||
className="w-full py-4 bg-#0e355b text-#d1d5db rounded-md font-semibold mb-4 hover:bg-#154676"
|
||||
className="btn-primary"
|
||||
onClick={() => handleClick('/employees')}
|
||||
>
|
||||
view employees
|
||||
View Employees
|
||||
</button>
|
||||
<button
|
||||
className="w-full py-4 bg-#0e355b text-#d1d5db rounded-md font-semibold mb-4 hover:bg-#154676"
|
||||
className="btn-primary"
|
||||
onClick={() => handleClick('')}
|
||||
>
|
||||
view customers
|
||||
View Customers
|
||||
</button>
|
||||
</div>
|
||||
</main>
|
||||
|
@ -1,89 +0,0 @@
|
||||
/* Importing Google Fonts */
|
||||
@import url('https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@200;400;600;800&display=swap');
|
||||
|
||||
/* General styles */
|
||||
/* body {
|
||||
font-family: 'Nunito Sans', sans-serif;
|
||||
background-color: #09090B;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #fff;
|
||||
} */
|
||||
|
||||
.dashboard {
|
||||
padding: 24px;
|
||||
background-color: #ffffff;
|
||||
/* color: #; */
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.dashboard-title {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
left: 20px;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.dashboard-content {
|
||||
position: absolute;
|
||||
top: 150px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 80%;
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
.dashboard-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.dashboard-buttons {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20px;
|
||||
align-items: center;
|
||||
background-color: #0e355b;
|
||||
}
|
||||
|
||||
.dashboard-button {
|
||||
background-color: #0e355b;
|
||||
border-color: #0e355b;
|
||||
width: 300px;
|
||||
height: 60px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.dashboard-link {
|
||||
color: #0e355b;
|
||||
}
|
||||
|
||||
.button:hover {
|
||||
background-color: #154676;
|
||||
border-color: #154676;
|
||||
}
|
||||
|
||||
/* Responsive Styles */
|
||||
@media (max-width: 768px) {
|
||||
.dashboard-title {
|
||||
font-size: 20px;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
}
|
||||
|
||||
.dashboard-content {
|
||||
top: 120px;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.dashboard-button {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@ import { useNavigate } from 'react-router-dom';
|
||||
import Sidebar from '../sidebar/Sidebar';
|
||||
import axiosInstance from '../../api/axiosConfig';
|
||||
|
||||
|
||||
const EmployeeList = ({ className = '' }) => {
|
||||
const [employees, setEmployees] = useState([]);
|
||||
const navigate = useNavigate();
|
||||
|
@ -24,23 +24,22 @@ const AddCustomer = () => {
|
||||
const [cities, setCities] = useState([]);
|
||||
const [imagePreview, setImagePreview] = useState(null);
|
||||
|
||||
// Uncomment to fetch cities data from backend
|
||||
// useEffect(() => {
|
||||
// const fetchCities = async () => {
|
||||
// try {
|
||||
// const response = await axiosInstance.get('/cities');
|
||||
// if (Array.isArray(response.data)) {
|
||||
// setCities(response.data);
|
||||
// } else {
|
||||
// console.error('Error: Data is not an array', response.data);
|
||||
// }
|
||||
// } catch (error) {
|
||||
// console.error('Error fetching cities:', error.response || error.message);
|
||||
// }
|
||||
// };
|
||||
useEffect(() => {
|
||||
const fetchCities = async () => {
|
||||
try {
|
||||
const response = await axiosInstance.get('/cities');
|
||||
if (Array.isArray(response.data)) {
|
||||
setCities(response.data);
|
||||
} else {
|
||||
console.error('Error: Data is not an array', response.data);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error fetching cities:', error.response || error.message);
|
||||
}
|
||||
};
|
||||
|
||||
// fetchCities();
|
||||
// }, []);
|
||||
fetchCities();
|
||||
}, []);
|
||||
|
||||
const handleInputChange = (e) => {
|
||||
const { name, value } = e.target;
|
||||
@ -69,11 +68,13 @@ const AddCustomer = () => {
|
||||
});
|
||||
|
||||
try {
|
||||
await axiosInstance.post('http://localhost:5000/customers', formData, {
|
||||
const response = await axiosInstance.post('http://localhost:5000/customers', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
},
|
||||
});
|
||||
console.log('Raw response:', response);
|
||||
console.log('Customer added successfully:', response.data);
|
||||
navigate('/customers');
|
||||
} catch (error) {
|
||||
console.error('Error adding customer:', error.response || error.message);
|
||||
@ -85,16 +86,16 @@ const AddCustomer = () => {
|
||||
<Sidebar />
|
||||
<div className="w-full flex flex-col min-h-screen text-black">
|
||||
<div className="min-h-screen text-gray-800 p-6">
|
||||
<div className="flex justify-between items-center mb-6">
|
||||
<div className="flex items-center mb-6">
|
||||
<Link to="/customers" className="text-#0e355b text-xl mr-4">
|
||||
<div className="flex justify-between items-center">
|
||||
<div className="flex items-center">
|
||||
<Link to="/customers" className="text-[#0e355b] text-xl">
|
||||
<FontAwesomeIcon icon={faChevronLeft} />
|
||||
</Link>
|
||||
<h1 className="text-2xl font-semibold text-#0e355b">
|
||||
add customer
|
||||
<h1 className="text-2xl font-semibold text-[#0e355b]">
|
||||
Add Customer
|
||||
</h1>
|
||||
</div>
|
||||
<Link to="/CategoryList" className="text-blue-900">skip for now</Link>
|
||||
<Link to="/CategoryList" className="text-blue-900">Skip for now</Link>
|
||||
</div>
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||
<div className="space-y-6">
|
||||
@ -109,7 +110,7 @@ const AddCustomer = () => {
|
||||
/>
|
||||
) : (
|
||||
<div className="w-full h-full flex items-center justify-center text-gray-500">
|
||||
no image
|
||||
No Image
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
@ -125,16 +126,16 @@ const AddCustomer = () => {
|
||||
onClick={() => document.getElementById('imageUpload').click()}
|
||||
className="absolute bottom-0 left-1/2 transform -translate-x-1/2 bg-gray-700 text-white text-xs px-2 py-1 rounded-full"
|
||||
>
|
||||
|
||||
Upload
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<Link to="/add-customer">
|
||||
<h2 className="text-lg font-semibold">customer information</h2>
|
||||
<h2 className="text-lg font-semibold">Customer Information</h2>
|
||||
</Link>
|
||||
<Link to="/measurements">
|
||||
<h2 className="text-lg font-semibold">measurements</h2>
|
||||
<h2 className="text-lg font-semibold">Measurements</h2>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
@ -142,130 +143,130 @@ const AddCustomer = () => {
|
||||
<form onSubmit={handleAddCustomerSubmit}>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
customer firstname:
|
||||
First Name:
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
name="firstname"
|
||||
value={customerData.firstname}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
customer lastname:
|
||||
Last Name:
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
name="lastname"
|
||||
value={customerData.lastname}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
age:
|
||||
Age:
|
||||
</label>
|
||||
<input
|
||||
type="number"
|
||||
name="age"
|
||||
value={customerData.age}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
gender:
|
||||
</label>
|
||||
<select
|
||||
name="gender"
|
||||
value={customerData.gender}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
>
|
||||
<option value="" disabled>
|
||||
select gender
|
||||
</option>
|
||||
<option value="male">male</option>
|
||||
<option value="female">female</option>
|
||||
<option value="other">other</option>
|
||||
</select>
|
||||
</div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
Gender:
|
||||
</label>
|
||||
<select
|
||||
name="gender"
|
||||
value={customerData.gender}
|
||||
onChange={handleInputChange}
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
>
|
||||
<option value="" disabled>
|
||||
Select Gender
|
||||
</option>
|
||||
<option value="male">Male</option>
|
||||
<option value="female">Female</option>
|
||||
<option value="other">Other</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
email:
|
||||
Email:
|
||||
</label>
|
||||
<input
|
||||
type="email"
|
||||
name="email"
|
||||
value={customerData.email}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
address line 1:
|
||||
Address Line 1:
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
name="address_line_1"
|
||||
value={customerData.address_line_1}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
address line 2:
|
||||
Address Line 2:
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
name="address_line_2"
|
||||
value={customerData.address_line_2}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
nearby landmark:
|
||||
Nearby Landmark:
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
name="nearby_landmark"
|
||||
value={customerData.nearby_landmark}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
pincode:
|
||||
Pincode:
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
name="pincode"
|
||||
value={customerData.pincode}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
city:
|
||||
City:
|
||||
</label>
|
||||
<select
|
||||
name="city_id"
|
||||
value={customerData.city_id}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
>
|
||||
<option value="" disabled>
|
||||
select city
|
||||
Select City
|
||||
</option>
|
||||
{Array.isArray(cities) &&
|
||||
cities.map((city) => (
|
||||
@ -277,22 +278,22 @@ const AddCustomer = () => {
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-gray-800 font-medium">
|
||||
mobile:
|
||||
Mobile:
|
||||
</label>
|
||||
<input
|
||||
type="tel"
|
||||
name="mobile"
|
||||
value={customerData.mobile}
|
||||
onChange={handleInputChange}
|
||||
className="input-underline w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
className="w-full p-2 border-b border-gray-400 focus:border-gray-700"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex justify-end">
|
||||
<button
|
||||
type="submit"
|
||||
className="bg-#0e355b text-white py-2 px-4 rounded-md"
|
||||
className="bg-[#0e355b] text-white py-2 px-4 rounded-md"
|
||||
>
|
||||
add customer
|
||||
Add Customer
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import Sidebar from '../sidebar/Sidebar';
|
||||
import axiosInstance from '../../api/axiosConfig';
|
||||
import '../../styles/CustomerList.css';
|
||||
|
||||
const CustomerList = () => {
|
||||
const [customers, setCustomers] = useState([]);
|
||||
|
@ -3,13 +3,15 @@ import { Button, Input, Form } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import axios from 'axios';
|
||||
import Sidebar from '../sidebar/Sidebar';
|
||||
import '../../styles/CustomerMeasurements.css';
|
||||
|
||||
|
||||
const CustomerMeasurements = () => {
|
||||
const onFinish = async (values) => {
|
||||
const token = localStorage.getItem('token'); // Assuming the token is stored in localStorage
|
||||
|
||||
try {
|
||||
const response = await axios.post('http://localhost:8080/measurements', values, {
|
||||
const response = await axios.post('http://localhost:5000/measurements', values, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
@ -22,56 +24,56 @@ const CustomerMeasurements = () => {
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="flex flex-row">
|
||||
<div className="container">
|
||||
<Sidebar />
|
||||
<div className="w-full flex flex-col min-h-screen text-white">
|
||||
<div className="min-h-screen text-#4b5563 p-6">
|
||||
<div className="flex justify-between items-center mb-6">
|
||||
<h1 className="text-2xl font-semibold text-#0e355b">customer measurements</h1>
|
||||
<Link to="/CategoryList" className="text-#0e355b">skip for now</Link>
|
||||
<div className="content">
|
||||
<div className="form-container">
|
||||
<div className="header">
|
||||
<h1 className="text-2xl font-semibold text-[#0e355b]">Customer Measurements</h1>
|
||||
<Link to="/CategoryList" className="skip-link">Skip for now</Link>
|
||||
</div>
|
||||
<Form onFinish={onFinish} className="space-y-4">
|
||||
<h2 className="text-lg font-semibold text-#0e355b">upper body measurements</h2>
|
||||
<Form.Item name="neck" label={<span className="text-#0e355b">neck circumference (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 focus:ring-0" />
|
||||
<Form onFinish={onFinish} className="form">
|
||||
<h2 className="section-title">Upper Body Measurements</h2>
|
||||
<Form.Item name="neck" label="Neck Circumference (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
<Form.Item name="chest" label={<span className="text-#0e355b">chest circumference (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 focus:ring-0" />
|
||||
<Form.Item name="chest" label="Chest Circumference (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
<Form.Item name="waist" label={<span className="text-#0e355b">waist circumference (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 focus:ring-0" />
|
||||
<Form.Item name="waist" label="Waist Circumference (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
<Form.Item name="shoulder" label={<span className="text-#0e355b">shoulder width (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 focus:ring-0" />
|
||||
<Form.Item name="shoulder" label="Shoulder Width (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
<Form.Item name="arm" label={<span className="text-#0e355b">arm length (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 focus:ring-0" />
|
||||
<Form.Item name="arm" label="Arm Length (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
<Form.Item name="sleeve" label={<span className="text-#0e355b">sleeve length (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 focus:ring-0" />
|
||||
<Form.Item name="sleeve" label="Sleeve Length (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
|
||||
<h2 className="text-lg font-semibold text-#0e355b">lower body measurements</h2>
|
||||
<Form.Item name="hip" label={<span className="text-#0e355b">hip circumference (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 focus:ring-0" />
|
||||
<h2 className="section-title">Lower Body Measurements</h2>
|
||||
<Form.Item name="hip" label="Hip Circumference (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
<Form.Item name="inseam" label={<span className="text-#0e355b">inseam (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 focus:ring-0" />
|
||||
<Form.Item name="inseam" label="Inseam (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
<Form.Item name="outseam" label={<span className="text-#0e355b">out seam (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 focus:ring-0" />
|
||||
<Form.Item name="outseam" label="Outseam (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
<Form.Item name="thigh" label={<span className="text-#0e355b">thigh circumference (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 focus:ring-0" />
|
||||
<Form.Item name="thigh" label="Thigh Circumference (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
<Form.Item name="ankle" label={<span className="text-#0e355b">ankle circumference (in inch)</span>}>
|
||||
<Input className="w-full border-0 border-b border-gray-400 focus:border-#4b5563 " />
|
||||
<Form.Item name="ankle" label="Ankle Circumference (in inch)">
|
||||
<Input className="input" />
|
||||
</Form.Item>
|
||||
<Form.Item>
|
||||
<div className="text-center">
|
||||
<button type="submit" className="bg-#0e355b text-#d1d5db px-4 py-2 rounded-md text-sm">
|
||||
save measurements
|
||||
</button>
|
||||
<div className="button-container">
|
||||
<Button type="primary" htmlType="submit" className="submit-button">
|
||||
Save Measurements
|
||||
</Button>
|
||||
</div>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
|
@ -1,19 +0,0 @@
|
||||
.dashboard {
|
||||
padding: 20px;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.dashboard-title {
|
||||
font-size: 24px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.dashboard-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.dashboard-content .ant-btn {
|
||||
margin: 10px 0;
|
||||
}
|
@ -1,13 +1,25 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import Sidebar from '../sidebar/Sidebar';
|
||||
import '../../styles/EmployeeDashboard.css';
|
||||
|
||||
const HomePage = () => {
|
||||
const classNames = {
|
||||
container: 'dashboard-container',
|
||||
content: 'dashboard-content',
|
||||
header: 'dashboard-header',
|
||||
headerTitle: 'header-title',
|
||||
welcomeText: 'welcome-text',
|
||||
main: 'dashboard-main',
|
||||
mainContent: 'dashboard-main-content',
|
||||
image: 'dashboard-image',
|
||||
button: 'btn-primary',
|
||||
};
|
||||
|
||||
const EmployeeDashboard = () => {
|
||||
const navigate = useNavigate();
|
||||
const [userName, setUserName] = useState('');
|
||||
|
||||
useEffect(() => {
|
||||
// Fetch user name from localStorage or state management
|
||||
const user = JSON.parse(localStorage.getItem('user'));
|
||||
if (user && user.name) {
|
||||
setUserName(user.name);
|
||||
@ -15,41 +27,41 @@ const HomePage = () => {
|
||||
}, []);
|
||||
|
||||
const handleClick = (link) => {
|
||||
navigate(link); // Redirect to the provided link
|
||||
navigate(link);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="flex flex-row">
|
||||
<div className={classNames.container}>
|
||||
<Sidebar />
|
||||
<div className="w-full flex flex-col min-h-screen text-white">
|
||||
<header className="w-full p-4 flex justify-between items-center">
|
||||
<div className={classNames.content}>
|
||||
<header className={classNames.header}>
|
||||
<div className="flex items-center">
|
||||
<h1 className="text-#0e355b text-2xl font-bold">home</h1>
|
||||
<h1 className={classNames.headerTitle}>Home</h1>
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-#4b5563">welcome back, {userName}</p>
|
||||
<p className={classNames.welcomeText}>Welcome back, {userName}</p>
|
||||
</div>
|
||||
</header>
|
||||
<main className="flex-1 flex flex-col items-center justify-center p-6">
|
||||
<div className="w-full max-w-3xl text-center">
|
||||
<img src="path_to_image" alt="Suit" className="w-full rounded-md mb-6" />
|
||||
<main className={classNames.main}>
|
||||
<div className={classNames.mainContent}>
|
||||
<img src="path_to_image" alt="Suit" className={classNames.image} />
|
||||
<button
|
||||
className="w-full py-4 bg-#0e355b text-#d1d5db rounded-md font-semibold mb-4 hover:bg-#154676"
|
||||
className={classNames.button}
|
||||
onClick={() => handleClick('/customers')}
|
||||
>
|
||||
create a new order
|
||||
Create a New Order
|
||||
</button>
|
||||
<button
|
||||
className="w-full py-4 bg-#0e355b text-#d1d5db rounded-md font-semibold mb-4 hover:bg-#154676"
|
||||
className={classNames.button}
|
||||
onClick={() => handleClick('')}
|
||||
>
|
||||
view orders
|
||||
View Orders
|
||||
</button>
|
||||
<button
|
||||
className="w-full py-4 bg-#0e355b text-#d1d5db rounded-md font-semibold mb-4 hover:bg-#154676"
|
||||
className={classNames.button}
|
||||
onClick={() => handleClick('')}
|
||||
>
|
||||
view customers
|
||||
View Customers
|
||||
</button>
|
||||
</div>
|
||||
</main>
|
||||
@ -58,4 +70,4 @@ const HomePage = () => {
|
||||
);
|
||||
};
|
||||
|
||||
export default HomePage;
|
||||
export default EmployeeDashboard;
|
||||
|
@ -1,10 +1,8 @@
|
||||
// src/components/sidebar/AdminSidebar.js
|
||||
|
||||
import React, { useState } from 'react';
|
||||
import { Layout, Drawer, Button } from 'antd';
|
||||
import { Layout } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import {
|
||||
MenuFoldOutlined,
|
||||
MenuUnfoldOutlined,
|
||||
} from '@ant-design/icons';
|
||||
import BrookslogoIcon from '../../assets/thob-data/BrookslogoIcon.svg';
|
||||
import HomeIcon from '../../assets/thob-data/HomeIcon.svg';
|
||||
import AddCustomerIcon from '../../assets/thob-data/AddCustomerIcon.svg';
|
||||
@ -15,61 +13,62 @@ import EmployeeIcon from '../../assets/thob-data/EmployeeIcon.svg';
|
||||
import MeasurmentsIcon from '../../assets/thob-data/MeasurmentsIcon.svg';
|
||||
import ProfileIcon from '../../assets/thob-data/ProfileIcon.svg';
|
||||
import LogoutIcon from '../../assets/thob-data/LogoutIcon.svg';
|
||||
import '../../styles/AdminSidebar.css'; // Import the CSS file
|
||||
|
||||
const { Sider } = Layout;
|
||||
|
||||
const classNames = {
|
||||
sider: 'desktop-sidebar',
|
||||
logoContainer: 'flex items-center justify-center h-16 w-16 m-5 bg-white',
|
||||
iconContainer: 'flex flex-col items-center',
|
||||
iconLink: 'my-6',
|
||||
icon: 'hover:opacity-75 sidebar-icon',
|
||||
};
|
||||
|
||||
const AdminSidebar = () => {
|
||||
const [visible, setVisible] = useState(false);
|
||||
|
||||
const showDrawer = () => {
|
||||
setVisible(true);
|
||||
};
|
||||
|
||||
const closeDrawer = () => {
|
||||
setVisible(false);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Sider
|
||||
className="desktop-sidebar"
|
||||
className={classNames.sider}
|
||||
breakpoint="lg"
|
||||
collapsedWidth="0"
|
||||
width={80}
|
||||
style={{ height: '100vh' }}
|
||||
>
|
||||
<div className="flex items-center justify-center h-16 w-16 m-5 bg-white" style={{ width: '40px', height: '40px', marginTop: '16px', marginLeft: '20px' }}>
|
||||
<Link to="/admin" className="my-6">
|
||||
<img src={BrookslogoIcon} alt="Home" className="hover:opacity-75 sidebar-icon" />
|
||||
<div className={classNames.logoContainer} style={{ width: '40px', height: '40px', marginTop: '16px', marginLeft: '20px' }}>
|
||||
<Link to="/admin" className={classNames.iconLink}>
|
||||
<img src={BrookslogoIcon} alt="Home" className={classNames.icon} />
|
||||
</Link>
|
||||
</div>
|
||||
<div className="flex flex-col items-center">
|
||||
<Link to="/admin" className="my-6">
|
||||
<img src={HomeIcon} alt="Home" className="hover:opacity-75 sidebar-icon" />
|
||||
<div className={classNames.iconContainer}>
|
||||
<Link to="/admin" className={classNames.iconLink}>
|
||||
<img src={HomeIcon} alt="Home" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/admin/categories" className="my-6">
|
||||
<img src={CategoriesIcon} alt="Categories" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/admin/categories" className={classNames.iconLink}>
|
||||
<img src={CategoriesIcon} alt="Categories" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/admin/add-customer" className="my-6">
|
||||
<img src={AddCustomerIcon} alt="Add Customer" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/admin/add-customer" className={classNames.iconLink}>
|
||||
<img src={AddCustomerIcon} alt="Add Customer" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/admin/orders" className="my-6">
|
||||
<img src={OrdersIcon} alt="Orders" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/admin/orders" className={classNames.iconLink}>
|
||||
<img src={OrdersIcon} alt="Orders" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/admin/catalog" className="my-6">
|
||||
<img src={CatalogIcon} alt="Catalog" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/admin/catalog" className={classNames.iconLink}>
|
||||
<img src={CatalogIcon} alt="Catalog" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/employees" className="my-6">
|
||||
<img src={EmployeeIcon} alt="Employee" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/employees" className={classNames.iconLink}>
|
||||
<img src={EmployeeIcon} alt="Employee" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/admin/measurements" className="my-6">
|
||||
<img src={MeasurmentsIcon} alt="Measurements" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/admin/measurements" className={classNames.iconLink}>
|
||||
<img src={MeasurmentsIcon} alt="Measurements" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/admin/profile" className="my-6">
|
||||
<img src={ProfileIcon} alt="Profile" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/admin/profile" className={classNames.iconLink}>
|
||||
<img src={ProfileIcon} alt="Profile" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/admin/logout" className="my-6">
|
||||
<img src={LogoutIcon} alt="Logout" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/admin/logout" className={classNames.iconLink}>
|
||||
<img src={LogoutIcon} alt="Logout" className={classNames.icon} />
|
||||
</Link>
|
||||
</div>
|
||||
</Sider>
|
||||
|
@ -8,45 +8,56 @@ import OrdersIcon from '../../assets/thob-data/OrdersIcon.svg';
|
||||
import CategoriesIcon from '../../assets/thob-data/CategoriesIcon.svg';
|
||||
import ProfileIcon from '../../assets/thob-data/ProfileIcon.svg';
|
||||
import LogoutIcon from '../../assets/thob-data/LogoutIcon.svg';
|
||||
import '../../styles/EmployeeSidebar.css';
|
||||
|
||||
const { Sider } = Layout;
|
||||
|
||||
const classNames = {
|
||||
sider: 'desktop-sidebar',
|
||||
container: 'flex flex-col items-center mt-4',
|
||||
logoContainer: 'flex items-center justify-center h-16 w-16 mb-5 bg-white',
|
||||
iconContainer: 'flex flex-col items-center flex-grow',
|
||||
iconLink: 'my-6',
|
||||
icon: 'hover:opacity-75 sidebar-icon',
|
||||
logoutContainer: 'flex items-center justify-center mb-4',
|
||||
};
|
||||
|
||||
const EmployeeSidebar = () => {
|
||||
return (
|
||||
<Sider
|
||||
className="desktop-sidebar"
|
||||
className={classNames.sider}
|
||||
breakpoint="lg"
|
||||
collapsedWidth="0"
|
||||
width={70}
|
||||
style={{ height: '100vh', display: 'flex', flexDirection: 'column', justifyContent: 'space-between' }}
|
||||
>
|
||||
<div className="flex flex-col items-center mt-4">
|
||||
<div className="flex items-center justify-center h-16 w-16 mb-5 bg-white">
|
||||
<div className={classNames.container}>
|
||||
<div className={classNames.logoContainer}>
|
||||
<Link to="">
|
||||
<img src={BrookslogoIcon} alt="Brooks Bingham Logo" className="hover:opacity-75 sidebar-icon" />
|
||||
<img src={BrookslogoIcon} alt="Brooks Bingham Logo" className={classNames.icon} />
|
||||
</Link>
|
||||
</div>
|
||||
<div className="flex flex-col items-center flex-grow">
|
||||
<Link to="/employee/home" className="my-6">
|
||||
<img src={HomeIcon} alt="Home" className="hover:opacity-75 sidebar-icon" />
|
||||
<div className={classNames.iconContainer}>
|
||||
<Link to="/employee/home" className={classNames.iconLink}>
|
||||
<img src={HomeIcon} alt="Home" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/employee/categories" className="my-6">
|
||||
<img src={CategoriesIcon} alt="Categories" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/employee/categories" className={classNames.iconLink}>
|
||||
<img src={CategoriesIcon} alt="Categories" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/customers" className="my-6">
|
||||
<img src={AddCustomerIcon} alt="Add Customer" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/customers" className={classNames.iconLink}>
|
||||
<img src={AddCustomerIcon} alt="Add Customer" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/employee/orders" className="my-6">
|
||||
<img src={OrdersIcon} alt="Orders" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/employee/orders" className={classNames.iconLink}>
|
||||
<img src={OrdersIcon} alt="Orders" className={classNames.icon} />
|
||||
</Link>
|
||||
<Link to="/employee/profile" className="my-6">
|
||||
<img src={ProfileIcon} alt="Profile" className="hover:opacity-75 sidebar-icon" />
|
||||
<Link to="/employee/profile" className={classNames.iconLink}>
|
||||
<img src={ProfileIcon} alt="Profile" className={classNames.icon} />
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center justify-center mb-4">
|
||||
<div className={classNames.logoutContainer}>
|
||||
<Link to="/employee/logout">
|
||||
<img src={LogoutIcon} alt="Logout" className="hover:opacity-75 sidebar-icon" />
|
||||
<img src={LogoutIcon} alt="Logout" className={classNames.icon} />
|
||||
</Link>
|
||||
</div>
|
||||
</Sider>
|
||||
|
135
src/styles/AddCustomer.css
Normal file
135
src/styles/AddCustomer.css
Normal file
@ -0,0 +1,135 @@
|
||||
.container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
color: #e8e8e8;
|
||||
}
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.header-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.back-link {
|
||||
color: #0e355b;
|
||||
font-size: 1.25rem;
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
color: #0e355b;
|
||||
}
|
||||
|
||||
.skip-link {
|
||||
color: #0e355b;
|
||||
}
|
||||
|
||||
.sidebar-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.image-upload-container {
|
||||
position: relative;
|
||||
width: 6rem;
|
||||
height: 6rem;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.image-preview {
|
||||
background-color: #d1d5db;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 9999px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.image-preview img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.no-image {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #6b7280;
|
||||
}
|
||||
|
||||
.upload-button {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background-color: #0e355b;
|
||||
color: #fff;
|
||||
font-size: 0.75rem;
|
||||
padding: 0.5rem;
|
||||
border-radius: 9999px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 1.125rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 1rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.form-label {
|
||||
display: underline;
|
||||
color: #4b5563;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.form-input,
|
||||
.form-select {
|
||||
width: 100%;
|
||||
padding: 0.5rem;
|
||||
border: 1px solid #d1d5db;
|
||||
border-radius: 0.375rem;
|
||||
}
|
||||
|
||||
.form-input:focus,
|
||||
.form-select:focus {
|
||||
border-color: #e8e8e8;
|
||||
}
|
||||
|
||||
.submit-button {
|
||||
background-color: #0e355b;
|
||||
color: #d1d5db;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 0.375rem;
|
||||
align-self: flex-end;
|
||||
}
|
||||
|
||||
.form-row {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.form-row .form-group {
|
||||
flex: 1;
|
||||
}
|
52
src/styles/AddEmployee.css
Normal file
52
src/styles/AddEmployee.css
Normal file
@ -0,0 +1,52 @@
|
||||
/* styles.css */
|
||||
|
||||
.text-primary {
|
||||
color: #0e355b;
|
||||
}
|
||||
|
||||
.bg-primary {
|
||||
background-color: #0e355b;
|
||||
}
|
||||
|
||||
.text-secondary {
|
||||
color: #4b5563; /* Adjusted to a more standard color */
|
||||
}
|
||||
|
||||
.bg-light {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.border-input {
|
||||
border-bottom: 1px solid #ddd; /* Adjusted to a lighter gray */
|
||||
}
|
||||
|
||||
.focus-border {
|
||||
border-color: #e8e8e8; /* Adjusted to a more standard color */
|
||||
}
|
||||
|
||||
.input-underline {
|
||||
border: none;
|
||||
border-bottom: 1px solid #ddd; /* Adjusted to a lighter gray */
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: #0e355b;
|
||||
color: white;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 0.25rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.image-upload-btn {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background-color: #555; /* Adjusted to a more standard gray */
|
||||
color: white;
|
||||
font-size: 0.75rem;
|
||||
padding: 0.25rem 0.5rem;
|
||||
border-radius: 9999px;
|
||||
border: none; /* Ensure no border is applied */
|
||||
}
|
||||
|
69
src/styles/AdminDashboard.css
Normal file
69
src/styles/AdminDashboard.css
Normal file
@ -0,0 +1,69 @@
|
||||
/* Dashboard.css */
|
||||
|
||||
.dashboard-container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.dashboard-content {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.dashboard-header {
|
||||
width: 100%;
|
||||
padding: 1rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.header-title {
|
||||
color: #0e355b;
|
||||
font-size: 2rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.welcome-text {
|
||||
color: #4b5563;
|
||||
}
|
||||
|
||||
.dashboard-main {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.dashboard-buttons {
|
||||
width: 100%;
|
||||
max-width: 48rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.dashboard-image {
|
||||
width: 100%;
|
||||
border-radius: 0.375rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
width: 100%;
|
||||
padding: 1rem;
|
||||
background-color: #0e355b;
|
||||
color: #d1d5db;
|
||||
border-radius: 0.375rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 1rem;
|
||||
transition: background-color 0.3s ease;
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
background-color: #154676;
|
||||
}
|
||||
|
45
src/styles/AdminSidebar.css
Normal file
45
src/styles/AdminSidebar.css
Normal file
@ -0,0 +1,45 @@
|
||||
/* .desktop-sidebar {
|
||||
|
||||
}
|
||||
|
||||
.sidebar-icon {
|
||||
|
||||
} */
|
||||
|
||||
.hover\:opacity-75:hover {
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
.flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.h-16 {
|
||||
height: 4rem; /* 64px */
|
||||
}
|
||||
|
||||
.w-16 {
|
||||
width: 4rem; /* 64px */
|
||||
}
|
||||
|
||||
.m-5 {
|
||||
margin: 1.25rem; /* 20px */
|
||||
}
|
||||
|
||||
.bg-white {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.my-6 {
|
||||
margin-top: 1.5rem; /* 24px */
|
||||
margin-bottom: 1.5rem; /* 24px */
|
||||
}
|
||||
|
79
src/styles/CustomerMeasurements.css
Normal file
79
src/styles/CustomerMeasurements.css
Normal file
@ -0,0 +1,79 @@
|
||||
/* Container styles */
|
||||
.container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
/* Content styles */
|
||||
.content {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
/* Form container styles */
|
||||
.form-container {
|
||||
min-height: 100vh;
|
||||
color: #4b5563;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
/* Header styles */
|
||||
.header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 2rem;
|
||||
font-weight: 600;
|
||||
color: #0e355b;
|
||||
}
|
||||
|
||||
.skip-link {
|
||||
color: #0e355b;
|
||||
}
|
||||
|
||||
/* Form styles */
|
||||
.form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 1.125rem;
|
||||
font-weight: 600;
|
||||
color: #0e355b;
|
||||
}
|
||||
|
||||
/* Input styles */
|
||||
.input {
|
||||
width: 100%;
|
||||
border: 0;
|
||||
border-bottom: 1px solid #d1d5db;
|
||||
}
|
||||
|
||||
.input:focus {
|
||||
border-color: #4b5563;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* Button container styles */
|
||||
.button-container {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Submit button styles */
|
||||
.submit-button {
|
||||
background-color: #0e355b;
|
||||
color: #d1d5db;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 0.375rem;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
67
src/styles/EmployeeDashboard.css
Normal file
67
src/styles/EmployeeDashboard.css
Normal file
@ -0,0 +1,67 @@
|
||||
.dashboard-container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.dashboard-content {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.dashboard-header {
|
||||
width: 100%;
|
||||
padding: 1rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.header-title {
|
||||
color: #0e355b;
|
||||
font-size: 2rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.welcome-text {
|
||||
color: #4b5563;
|
||||
}
|
||||
|
||||
.dashboard-main {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.dashboard-main-content {
|
||||
width: 100%;
|
||||
max-width: 768px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.dashboard-image {
|
||||
width: 100%;
|
||||
border-radius: 0.375rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
width: 100%;
|
||||
padding: 1rem;
|
||||
background-color: #0e355b;
|
||||
color: #d1d5db;
|
||||
border-radius: 0.375rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 1rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
background-color: #154676;
|
||||
}
|
||||
|
62
src/styles/EmployeeSidebar.css
Normal file
62
src/styles/EmployeeSidebar.css
Normal file
@ -0,0 +1,62 @@
|
||||
|
||||
/* .desktop-sidebar {
|
||||
|
||||
}
|
||||
|
||||
.sidebar-icon {
|
||||
|
||||
} */
|
||||
|
||||
.hover\:opacity-75:hover {
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
.flex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flex-col {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.items-center {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.justify-center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.h-16 {
|
||||
height: 4rem; /* 64px */
|
||||
}
|
||||
|
||||
.w-16 {
|
||||
width: 4rem; /* 64px */
|
||||
}
|
||||
|
||||
.mb-5 {
|
||||
margin-bottom: 1.25rem; /* 20px */
|
||||
}
|
||||
|
||||
.mt-4 {
|
||||
margin-top: 1rem; /* 16px */
|
||||
}
|
||||
|
||||
.bg-white {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.flex-grow {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.my-6 {
|
||||
margin-top: 1.5rem; /* 24px */
|
||||
margin-bottom: 1.5rem; /* 24px */
|
||||
}
|
||||
|
||||
.mb-4 {
|
||||
margin-bottom: 1rem; /* 16px */
|
||||
}
|
||||
|
272
yarn.lock
272
yarn.lock
@ -75,7 +75,7 @@
|
||||
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz"
|
||||
integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==
|
||||
|
||||
"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.24.5":
|
||||
"@babel/core@^7.24.5":
|
||||
version "7.24.7"
|
||||
resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz"
|
||||
integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==
|
||||
@ -286,6 +286,121 @@
|
||||
resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz"
|
||||
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
|
||||
|
||||
"@esbuild/aix-ppc64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
|
||||
integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
|
||||
|
||||
"@esbuild/android-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
|
||||
integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
|
||||
|
||||
"@esbuild/android-arm@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
|
||||
integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
|
||||
|
||||
"@esbuild/android-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
|
||||
integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
|
||||
|
||||
"@esbuild/darwin-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
|
||||
integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
|
||||
|
||||
"@esbuild/darwin-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
|
||||
integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
|
||||
|
||||
"@esbuild/freebsd-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
|
||||
integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
|
||||
|
||||
"@esbuild/freebsd-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
|
||||
integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
|
||||
|
||||
"@esbuild/linux-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
|
||||
integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
|
||||
|
||||
"@esbuild/linux-arm@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
|
||||
integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
|
||||
|
||||
"@esbuild/linux-ia32@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
|
||||
integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
|
||||
|
||||
"@esbuild/linux-loong64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
|
||||
integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
|
||||
|
||||
"@esbuild/linux-mips64el@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
|
||||
integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
|
||||
|
||||
"@esbuild/linux-ppc64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
|
||||
integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
|
||||
|
||||
"@esbuild/linux-riscv64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
|
||||
integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
|
||||
|
||||
"@esbuild/linux-s390x@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
|
||||
integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
|
||||
|
||||
"@esbuild/linux-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
|
||||
integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
|
||||
|
||||
"@esbuild/netbsd-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
|
||||
integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
|
||||
|
||||
"@esbuild/openbsd-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
|
||||
integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
|
||||
|
||||
"@esbuild/sunos-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
|
||||
integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
|
||||
|
||||
"@esbuild/win32-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
|
||||
integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
|
||||
|
||||
"@esbuild/win32-ia32@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
|
||||
integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
|
||||
|
||||
"@esbuild/win32-x64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
|
||||
integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
|
||||
|
||||
"@eslint-community/eslint-utils@^4.2.0":
|
||||
version "4.4.0"
|
||||
resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz"
|
||||
@ -323,7 +438,7 @@
|
||||
resolved "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz"
|
||||
integrity sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==
|
||||
|
||||
"@fortawesome/fontawesome-svg-core@^6.6.0", "@fortawesome/fontawesome-svg-core@~1 || ~6":
|
||||
"@fortawesome/fontawesome-svg-core@^6.6.0":
|
||||
version "6.6.0"
|
||||
resolved "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.6.0.tgz"
|
||||
integrity sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==
|
||||
@ -415,7 +530,7 @@
|
||||
"@nodelib/fs.stat" "2.0.5"
|
||||
run-parallel "^1.1.9"
|
||||
|
||||
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
|
||||
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
|
||||
version "2.0.5"
|
||||
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
|
||||
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
|
||||
@ -516,6 +631,86 @@
|
||||
resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz"
|
||||
integrity sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27"
|
||||
integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==
|
||||
|
||||
"@rollup/rollup-android-arm64@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203"
|
||||
integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==
|
||||
|
||||
"@rollup/rollup-darwin-arm64@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096"
|
||||
integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==
|
||||
|
||||
"@rollup/rollup-darwin-x64@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c"
|
||||
integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==
|
||||
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8"
|
||||
integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==
|
||||
|
||||
"@rollup/rollup-linux-arm-musleabihf@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549"
|
||||
integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577"
|
||||
integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c"
|
||||
integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==
|
||||
|
||||
"@rollup/rollup-linux-powerpc64le-gnu@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf"
|
||||
integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==
|
||||
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9"
|
||||
integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==
|
||||
|
||||
"@rollup/rollup-linux-s390x-gnu@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec"
|
||||
integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942"
|
||||
integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==
|
||||
|
||||
"@rollup/rollup-linux-x64-musl@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d"
|
||||
integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==
|
||||
|
||||
"@rollup/rollup-win32-arm64-msvc@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf"
|
||||
integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54"
|
||||
integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.18.0":
|
||||
version "4.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4"
|
||||
integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==
|
||||
|
||||
"@tinyhttp/accepts@2.2.2":
|
||||
version "2.2.2"
|
||||
resolved "https://registry.npmjs.org/@tinyhttp/accepts/-/accepts-2.2.2.tgz"
|
||||
@ -723,7 +918,7 @@ acorn-jsx@^5.3.2:
|
||||
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
|
||||
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
|
||||
|
||||
"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0:
|
||||
acorn@^8.9.0:
|
||||
version "8.12.0"
|
||||
resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz"
|
||||
integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==
|
||||
@ -1001,7 +1196,7 @@ braces@^3.0.3, braces@~3.0.2:
|
||||
dependencies:
|
||||
fill-range "^7.1.1"
|
||||
|
||||
browserslist@^4.22.2, browserslist@^4.23.0, "browserslist@>= 4.21.0":
|
||||
browserslist@^4.22.2, browserslist@^4.23.0:
|
||||
version "4.23.1"
|
||||
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz"
|
||||
integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==
|
||||
@ -1074,7 +1269,7 @@ chokidar@^3.5.3, chokidar@^3.6.0:
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2, classnames@^2.5.1, classnames@2.x:
|
||||
classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2, classnames@^2.5.1:
|
||||
version "2.5.1"
|
||||
resolved "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz"
|
||||
integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
|
||||
@ -1093,16 +1288,16 @@ color-convert@^2.0.1:
|
||||
dependencies:
|
||||
color-name "~1.1.4"
|
||||
|
||||
color-name@~1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
|
||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
|
||||
color-name@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
|
||||
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
|
||||
|
||||
color-name@~1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
|
||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||
|
||||
combined-stream@^1.0.8:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
|
||||
@ -1183,7 +1378,7 @@ data-view-byte-offset@^1.0.0:
|
||||
es-errors "^1.3.0"
|
||||
is-data-view "^1.0.1"
|
||||
|
||||
dayjs@^1.11.11, "dayjs@>= 1.x":
|
||||
dayjs@^1.11.11:
|
||||
version "1.11.11"
|
||||
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz"
|
||||
integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==
|
||||
@ -1498,7 +1693,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4
|
||||
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
|
||||
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
|
||||
|
||||
"eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@^8.57.0, eslint@>=7:
|
||||
eslint@^8.57.0:
|
||||
version "8.57.0"
|
||||
resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz"
|
||||
integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
|
||||
@ -1688,6 +1883,11 @@ fs.realpath@^1.0.0:
|
||||
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
|
||||
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
|
||||
|
||||
fsevents@~2.3.2, fsevents@~2.3.3:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
||||
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||
|
||||
function-bind@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
|
||||
@ -1733,7 +1933,7 @@ get-symbol-description@^1.0.2:
|
||||
es-errors "^1.3.0"
|
||||
get-intrinsic "^1.2.4"
|
||||
|
||||
glob-parent@^5.1.2:
|
||||
glob-parent@^5.1.2, glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
@ -1747,13 +1947,6 @@ glob-parent@^6.0.2:
|
||||
dependencies:
|
||||
is-glob "^4.0.3"
|
||||
|
||||
glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
glob@^10.3.10:
|
||||
version "10.4.2"
|
||||
resolved "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz"
|
||||
@ -1856,7 +2049,7 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2:
|
||||
dependencies:
|
||||
function-bind "^1.1.2"
|
||||
|
||||
header-range-parser@^1.1.3, header-range-parser@1.1.3:
|
||||
header-range-parser@1.1.3, header-range-parser@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmjs.org/header-range-parser/-/header-range-parser-1.1.3.tgz"
|
||||
integrity sha512-B9zCFt3jH8g09LR1vHL4pcAn8yMEtlSlOUdQemzHMRKMImNIhhszdeosYFfNW0WXKQtXIlWB+O4owHJKvEJYaA==
|
||||
@ -2585,13 +2778,13 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
|
||||
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
|
||||
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
||||
|
||||
postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.38, postcss@>=8.0.9:
|
||||
version "8.4.38"
|
||||
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz"
|
||||
integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
|
||||
postcss@^8.4.23, postcss@^8.4.38, postcss@^8.4.39:
|
||||
version "8.4.39"
|
||||
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz"
|
||||
integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==
|
||||
dependencies:
|
||||
nanoid "^3.3.7"
|
||||
picocolors "^1.0.0"
|
||||
picocolors "^1.0.1"
|
||||
source-map-js "^1.2.0"
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
@ -2979,7 +3172,7 @@ rc-virtual-list@^3.14.2, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2:
|
||||
rc-resize-observer "^1.0.0"
|
||||
rc-util "^5.36.0"
|
||||
|
||||
react-dom@*, react-dom@^18.2.0, react-dom@>=16.0.0, react-dom@>=16.11.0, react-dom@>=16.8, react-dom@>=16.9.0:
|
||||
react-dom@^18.2.0:
|
||||
version "18.3.1"
|
||||
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz"
|
||||
integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
|
||||
@ -3017,7 +3210,7 @@ react-router@6.23.1:
|
||||
dependencies:
|
||||
"@remix-run/router" "1.16.1"
|
||||
|
||||
react@*, "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.2.0, react@^18.3.1, react@>=16.0.0, react@>=16.11.0, react@>=16.3, react@>=16.8, react@>=16.9.0:
|
||||
react@^18.2.0:
|
||||
version "18.3.1"
|
||||
resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz"
|
||||
integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
|
||||
@ -3081,16 +3274,7 @@ resolve-from@^4.0.0:
|
||||
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
|
||||
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
|
||||
|
||||
resolve@^1.1.7:
|
||||
version "1.22.8"
|
||||
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz"
|
||||
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
|
||||
dependencies:
|
||||
is-core-module "^2.13.0"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
resolve@^1.22.2:
|
||||
resolve@^1.1.7, resolve@^1.22.2:
|
||||
version "1.22.8"
|
||||
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz"
|
||||
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
|
||||
@ -3406,10 +3590,10 @@ supports-preserve-symlinks-flag@^1.0.0:
|
||||
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
|
||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||
|
||||
tailwindcss@^3.4.4:
|
||||
version "3.4.4"
|
||||
resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz"
|
||||
integrity sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==
|
||||
tailwindcss@^3.4.6:
|
||||
version "3.4.6"
|
||||
resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.6.tgz"
|
||||
integrity sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==
|
||||
dependencies:
|
||||
"@alloc/quick-lru" "^5.2.0"
|
||||
arg "^5.0.2"
|
||||
@ -3581,7 +3765,7 @@ util-deprecate@^1.0.2:
|
||||
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
|
||||
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
||||
|
||||
"vite@^4.2.0 || ^5.0.0", vite@^5.2.0:
|
||||
vite@^5.2.0:
|
||||
version "5.3.1"
|
||||
resolved "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz"
|
||||
integrity sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==
|
||||
|
Loading…
x
Reference in New Issue
Block a user