diff --git a/package-lock.json b/package-lock.json index 7a6be00..31d4c4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 4a1b06c..6e79603 100644 --- a/package.json +++ b/package.json @@ -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" } } diff --git a/src/components/admin/AddEmployee.css b/src/components/admin/AddEmployee.css deleted file mode 100644 index 979e0f1..0000000 --- a/src/components/admin/AddEmployee.css +++ /dev/null @@ -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 */ - } - \ No newline at end of file diff --git a/src/components/admin/AddEmployee.jsx b/src/components/admin/AddEmployee.jsx index ad8dedb..1039831 100644 --- a/src/components/admin/AddEmployee.jsx +++ b/src/components/admin/AddEmployee.jsx @@ -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 = () => {
-
-
- +
+
+ -

+

create employee account

@@ -120,16 +122,16 @@ const AddEmployee = () => {
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/components/admin/AdminDashboard.jsx b/src/components/admin/AdminDashboard.jsx index b4dcc21..f6962d2 100644 --- a/src/components/admin/AdminDashboard.jsx +++ b/src/components/admin/AdminDashboard.jsx @@ -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 ( -
+
-
-
-
-

admin dashboard

-
-
-

welcome back {userName}

-
+
+
+

Admin Dashboard

+

Welcome back, {userName}

-
-
- Dashboard Graphic +
+
+ Dashboard Graphic
diff --git a/src/components/admin/Dashboard.css b/src/components/admin/Dashboard.css deleted file mode 100644 index 3be2642..0000000 --- a/src/components/admin/Dashboard.css +++ /dev/null @@ -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%; - } -} diff --git a/src/components/admin/EmployeeList.jsx b/src/components/admin/EmployeeList.jsx index ef4bb09..b13ec71 100644 --- a/src/components/admin/EmployeeList.jsx +++ b/src/components/admin/EmployeeList.jsx @@ -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(); diff --git a/src/components/customer/AddCustomer.jsx b/src/components/customer/AddCustomer.jsx index 4530799..d7e47ef 100644 --- a/src/components/customer/AddCustomer.jsx +++ b/src/components/customer/AddCustomer.jsx @@ -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 = () => {
-
-
- +
+
+ -

- add customer +

+ Add Customer

- skip for now + Skip for now
@@ -109,7 +110,7 @@ const AddCustomer = () => { /> ) : (
- no image + No Image
)}
@@ -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
-

customer information

+

Customer Information

-

measurements

+

Measurements

@@ -142,130 +143,130 @@ const AddCustomer = () => {
- - -
+ + +
diff --git a/src/components/customer/CustomerList.jsx b/src/components/customer/CustomerList.jsx index 6381c4d..2145a0a 100644 --- a/src/components/customer/CustomerList.jsx +++ b/src/components/customer/CustomerList.jsx @@ -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([]); diff --git a/src/components/customer/CustomerMeasurements.jsx b/src/components/customer/CustomerMeasurements.jsx index 3e6e594..8c70313 100644 --- a/src/components/customer/CustomerMeasurements.jsx +++ b/src/components/customer/CustomerMeasurements.jsx @@ -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 ( -
+
-
-
-
-

customer measurements

- skip for now +
+
+
+

Customer Measurements

+ Skip for now
-
-

upper body measurements

- neck circumference (in inch)}> - + +

Upper Body Measurements

+ + - chest circumference (in inch)}> - + + - waist circumference (in inch)}> - + + - shoulder width (in inch)}> - + + - arm length (in inch)}> - + + - sleeve length (in inch)}> - + + -

lower body measurements

- hip circumference (in inch)}> - +

Lower Body Measurements

+ + - inseam (in inch)}> - + + - out seam (in inch)}> - + + - thigh circumference (in inch)}> - + + - ankle circumference (in inch)}> - + + -
- +
+
diff --git a/src/components/employee/Dashboard.css b/src/components/employee/Dashboard.css deleted file mode 100644 index edf9116..0000000 --- a/src/components/employee/Dashboard.css +++ /dev/null @@ -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; -} diff --git a/src/components/employee/EmployeeDashboard.jsx b/src/components/employee/EmployeeDashboard.jsx index 7d8d9f8..869cd12 100644 --- a/src/components/employee/EmployeeDashboard.jsx +++ b/src/components/employee/EmployeeDashboard.jsx @@ -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 ( -
+
-
-
+
+
-

home

+

Home

-

welcome back, {userName}

+

Welcome back, {userName}

-
-
- Suit +
+
+ Suit
@@ -58,4 +70,4 @@ const HomePage = () => { ); }; -export default HomePage; +export default EmployeeDashboard; diff --git a/src/components/sidebar/AdminSidebar.jsx b/src/components/sidebar/AdminSidebar.jsx index 4d604b5..b6767f1 100644 --- a/src/components/sidebar/AdminSidebar.jsx +++ b/src/components/sidebar/AdminSidebar.jsx @@ -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 ( <> -
- - Home +
+ + Home
-
- - Home +
+ + Home - - Categories + + Categories - - Add Customer + + Add Customer - - Orders + + Orders - - Catalog + + Catalog - - Employee + + Employee - - Measurements + + Measurements - - Profile + + Profile - - Logout + + Logout
diff --git a/src/components/sidebar/EmployeeSidebar.jsx b/src/components/sidebar/EmployeeSidebar.jsx index c9ec846..9c2d9fc 100644 --- a/src/components/sidebar/EmployeeSidebar.jsx +++ b/src/components/sidebar/EmployeeSidebar.jsx @@ -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 ( -
-
+
+
- Brooks Bingham Logo + Brooks Bingham Logo
-
- - Home +
+ + Home - - Categories + + Categories - - Add Customer + + Add Customer - - Orders + + Orders - - Profile + + Profile
-
+
- Logout + Logout
diff --git a/src/styles/AddCustomer.css b/src/styles/AddCustomer.css new file mode 100644 index 0000000..dd796a0 --- /dev/null +++ b/src/styles/AddCustomer.css @@ -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; +} diff --git a/src/styles/AddEmployee.css b/src/styles/AddEmployee.css new file mode 100644 index 0000000..fdad44c --- /dev/null +++ b/src/styles/AddEmployee.css @@ -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 */ + } + \ No newline at end of file diff --git a/src/styles/AdminDashboard.css b/src/styles/AdminDashboard.css new file mode 100644 index 0000000..350c235 --- /dev/null +++ b/src/styles/AdminDashboard.css @@ -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; + } + \ No newline at end of file diff --git a/src/styles/AdminSidebar.css b/src/styles/AdminSidebar.css new file mode 100644 index 0000000..91a50ac --- /dev/null +++ b/src/styles/AdminSidebar.css @@ -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 */ + } + \ No newline at end of file diff --git a/src/components/customer/CustomerList.css b/src/styles/CustomerList.css similarity index 94% rename from src/components/customer/CustomerList.css rename to src/styles/CustomerList.css index 55d6829..8efc33f 100644 --- a/src/components/customer/CustomerList.css +++ b/src/styles/CustomerList.css @@ -1,94 +1,94 @@ -.customer-list { - padding: 20px; - background-color: #ffffff; - /* color: #09090B; */ - border-radius: 8px; - max-width: 800px; - margin: 0 auto; - } - - .customer-list h1 { - color: #0e355b; - text-align: center; - } - - .customer-actions { - display: flex; - justify-content: flex-end; - margin-bottom: 20px; - } - - .add-customer-button { - padding: 10px 20px; - background-color: #0e355b; - /* color: #09090B; */ - border: none; - cursor: pointer; - border-radius: 5px; - transition: background-color 0.3s; - } - - .add-customer-button:hover { - background-color: #154676; - } - - .customer-table { - width: 100%; - border-collapse: collapse; - margin-top: 20px; - } - - .customer-table th, - .customer-table td { - border: 1px solid #ffffff; - padding: 10px; - text-align: left; - } - - .customer-table th { - background-color: #ffffff; - } - - .customer-table tbody tr:nth-child(odd) { - background-color: #ffffff; - } - - .customer-table tbody tr:nth-child(even) { - background-color: #ffffff; - } - - .customer-table tbody tr:hover { - background-color: #0e355b; - } - - .edit-button { - padding: 5px 10px; - background-color: #0e355b; - color: #ffffff; - border: none; - cursor: pointer; - border-radius: 5px; - transition: background-color 0.3s; - } - - .edit-button:hover { - background-color: #154676; - } - - - .input-underline { - background-color: transparent; - border: none; - border-bottom: 1px solid #b3b3b3; - color: #e8e8e8; - width: 100%; - padding: 0.5rem 0; - margin-bottom: 20px; - font-size: 16px; - outline: none; - } - - .input-underline:focus { - border-bottom-color: #4b5563; /* Orange underline on focus */ - } +.customer-list { + padding: 20px; + background-color: #ffffff; + /* color: #09090B; */ + border-radius: 8px; + max-width: 800px; + margin: 0 auto; + } + + .customer-list h1 { + color: #0e355b; + text-align: center; + } + + .customer-actions { + display: flex; + justify-content: flex-end; + margin-bottom: 20px; + } + + .add-customer-button { + padding: 10px 20px; + background-color: #0e355b; + /* color: #09090B; */ + border: none; + cursor: pointer; + border-radius: 5px; + transition: background-color 0.3s; + } + + .add-customer-button:hover { + background-color: #154676; + } + + .customer-table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; + } + + .customer-table th, + .customer-table td { + border: 1px solid #ffffff; + padding: 10px; + text-align: left; + } + + .customer-table th { + background-color: #ffffff; + } + + .customer-table tbody tr:nth-child(odd) { + background-color: #ffffff; + } + + .customer-table tbody tr:nth-child(even) { + background-color: #ffffff; + } + + .customer-table tbody tr:hover { + background-color: #0e355b; + } + + .edit-button { + padding: 5px 10px; + background-color: #0e355b; + color: #ffffff; + border: none; + cursor: pointer; + border-radius: 5px; + transition: background-color 0.3s; + } + + .edit-button:hover { + background-color: #154676; + } + + + .input-underline { + background-color: transparent; + border: none; + border-bottom: 1px solid #b3b3b3; + color: #e8e8e8; + width: 100%; + padding: 0.5rem 0; + margin-bottom: 20px; + font-size: 16px; + outline: none; + } + + .input-underline:focus { + border-bottom-color: #4b5563; /* Orange underline on focus */ + } \ No newline at end of file diff --git a/src/styles/CustomerMeasurements.css b/src/styles/CustomerMeasurements.css new file mode 100644 index 0000000..ef86008 --- /dev/null +++ b/src/styles/CustomerMeasurements.css @@ -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; + } + \ No newline at end of file diff --git a/src/styles/EmployeeDashboard.css b/src/styles/EmployeeDashboard.css new file mode 100644 index 0000000..1a72172 --- /dev/null +++ b/src/styles/EmployeeDashboard.css @@ -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; + } + \ No newline at end of file diff --git a/src/styles/EmployeeSidebar.css b/src/styles/EmployeeSidebar.css new file mode 100644 index 0000000..d210266 --- /dev/null +++ b/src/styles/EmployeeSidebar.css @@ -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 */ + } + \ No newline at end of file diff --git a/src/styles/styles.css b/src/styles/styles.css deleted file mode 100644 index e69de29..0000000 diff --git a/yarn.lock b/yarn.lock index e637766..89583c6 100644 --- a/yarn.lock +++ b/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==