diff --git a/package-lock.json b/package-lock.json index d74d137..f982782 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21417,20 +21417,6 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "node_modules/ua-parser-js": { "version": "1.0.40", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", diff --git a/src/menu-items/nearle.js b/src/menu-items/nearle.js index b0554ec..9fc647a 100644 --- a/src/menu-items/nearle.js +++ b/src/menu-items/nearle.js @@ -72,6 +72,13 @@ const nearle = { url: '/nearle/dispatch', icon: icons.DirectionsBikeOutlinedIcon }, + { + id: 'hubs', + title: , + type: 'item', + url: '/nearle/hubs', + icon: icons.DeploymentUnitOutlined + }, { id: 'orders', title: , @@ -114,13 +121,6 @@ const nearle = { type: 'item', url: '/nearle/riders', icon: DirectionsBikeOutlinedIcon - }, - { - id: 'hubs', - title: , - type: 'item', - url: '/nearle/hubs', - icon: icons.DeploymentUnitOutlined } ] }; diff --git a/src/pages/api/api.js b/src/pages/api/api.js index 679c5dd..8e55afa 100644 --- a/src/pages/api/api.js +++ b/src/pages/api/api.js @@ -136,9 +136,18 @@ export const fetchOrders = async ({ pageParam = 1, queryKey }) => { } }); + // TEMPORARY: backend fix in progress — pageno/pagesize are currently + // ignored server-side and it returns every matching record on every call. + // Slice client-side so infinite scroll doesn't dump the whole dataset on + // page 1. Safe to remove once the backend honours pagination. + const all = response.data.data || []; + const size = Number(rowsPerPage); + const start = (pageParam - 1) * size; + const rows = all.slice(start, start + size); + return { - rows: response.data.data, - nextPage: response.data.data.length === Number(rowsPerPage) ? pageParam + 1 : undefined + rows, + nextPage: start + size < all.length ? pageParam + 1 : undefined }; }; @@ -290,9 +299,14 @@ export const createAutomationDeliveries = async (variables) => { export const notifyRider = async () => ({ success: true }); // ==============================|| cancelOrder (orders) ||============================== // - export const cancelOrder = async (bookingid) => { - const response = await axios.patch(`${process.env.REACT_APP_URL}/admin/bookings/${bookingid}/status`, { status: 'Cancelled' }); + const response = await axios.post(`${process.env.REACT_APP_URL}/admin/bookings/${bookingid}/cancel`); + return response.data; +}; + +// ==============================|| updateBookingStatus (bookings) ||============================== // +export const updateBookingStatus = async (bookingid, status) => { + const response = await axios.put(`${process.env.REACT_APP_URL}/admin/bookings/${bookingid}/status`, { status }); return response.data; }; // ==============================|| cancelMultipleOrder (orders) ||============================== // @@ -332,9 +346,16 @@ export const fetchDeliveries = async ({ pageParam = 1, queryKey }) => { } }); + // TEMPORARY: same backend pagination bug as fetchOrders — slice client-side + // until pageno/pagesize are honoured server-side. + const all = response.data.data || []; + const size = Number(rowsPerPage); + const start = (pageParam - 1) * size; + const rows = all.slice(start, start + size); + return { - rows: response.data.data, - nextPage: response.data.data.length === Number(rowsPerPage) ? pageParam + 1 : undefined + rows, + nextPage: start + size < all.length ? pageParam + 1 : undefined }; }; @@ -389,11 +410,8 @@ export const fetchCountAPI = async () => { }; // ==============================|| cancelDeliveryAPI (deliveries) ||============================== // - export const cancelDeliveryAPI = async (selectedRow) => { - const response = await axios.patch(`${process.env.REACT_APP_URL}/admin/bookings/${selectedRow.bookingid}/status`, { - status: 'Cancelled' - }); + const response = await axios.post(`${process.env.REACT_APP_URL}/admin/bookings/${selectedRow.bookingid}/cancel`); return response.data; }; // ==============================|| getorderdetails (deliveries) ||============================== // @@ -474,50 +492,43 @@ export const getpricinglist = async () => { export const getallpricing = getpricinglist; // ==============================|| getcustomersummary (customers) ||============================== // -// No dedicated Doormile summary endpoint has been specified for customers — -// derives the count from the same /admin/customers list used below. export const getcustomersummary = async () => { try { const response = await axios.get(`${process.env.REACT_APP_URL}/admin/customers`); const customers = response.data?.data || []; - return { Total: customers.length }; + const total = response.data?.total || customers.length; + return { Total: total }; } catch (err) { - const message = err.response?.data?.message || err.message || 'Something went wrong'; - OpenToast(message); + OpenToast(err.message, 'error', 2000); return null; } }; // ==============================|| getallcustomers (customers) ||============================== // -// NOTE: field names below (firstname/contactno/address/suburb/customerid/...) -// are still the old NearlExpress shape — no Doormile customer response shape -// has been confirmed yet. Fetches from the real endpoint; the UI will just -// show blanks for any field that doesn't exist on a Doormile customer until -// the actual shape is confirmed and this gets a proper field-mapping pass. +// Backend rows key the customer id as `appcustomerid` — aliased to `userid` +// here so any call site still expecting the old field name keeps working. export const getallcustomers = async ({ pageParam = 1, queryKey }) => { const [, , debouncedSearch, rowsPerPage] = queryKey; try { - const response = await axios.get(`${process.env.REACT_APP_URL}/admin/customers`); - let customers = response.data?.data || []; + const response = await axios.get(`${process.env.REACT_APP_URL}/admin/customers`, { + params: { + keyword: debouncedSearch || undefined, + pageno: pageParam, + pagesize: rowsPerPage || 20 + } + }); + const customers = (response.data?.data || []).map((c) => ({ + ...c, + userid: c.appcustomerid + })); - if (debouncedSearch) { - const kw = debouncedSearch.toLowerCase(); - customers = customers.filter( - (c) => (c.firstname || c.name || '').toLowerCase().includes(kw) || (c.contactno || c.phone || '').includes(debouncedSearch) - ); - } - - // No documented pagination on /admin/customers — return everything as a - // single page rather than guess at pageno/pagesize semantics. return { - data: pageParam === 1 ? customers : [], - nextPage: undefined + data: customers, + nextPage: customers.length === Number(rowsPerPage) ? pageParam + 1 : undefined }; } catch (err) { - const message = err.response?.data?.message || err.message || 'Something went wrong'; - - OpenToast(message); + OpenToast(err.message, 'error', 2000); throw err; // IMPORTANT for React Query } }; diff --git a/src/pages/nearle/bookings/BookingDetail.js b/src/pages/nearle/bookings/BookingDetail.js index 5537e4b..fbc42bb 100644 --- a/src/pages/nearle/bookings/BookingDetail.js +++ b/src/pages/nearle/bookings/BookingDetail.js @@ -75,9 +75,9 @@ const BookingDetail = () => { enabled: Boolean(id) }); - // Response shape is unconfirmed beyond what /admin/bookings' list rows - // return — reads defensively off `data.data` first, falling back to the - // top-level response, same pattern used for the login response mismatch. + // Confirmed shape (booking id 5): bookingid, bookingreference, status, + // pickupaddress, deliveryaddress, assignedmileruserid, createdat, + // bookingparcels (nested parcels), serviceoptions, payments. const booking = data?.data || data || {}; const reassignMutation = useMutation({ diff --git a/src/pages/nearle/customers/customers.js b/src/pages/nearle/customers/customers.js index d3ef6f2..d479019 100644 --- a/src/pages/nearle/customers/customers.js +++ b/src/pages/nearle/customers/customers.js @@ -33,7 +33,6 @@ import { MdMyLocation, MdPersonPin, MdPhone, - MdLocationOn, MdEdit, MdGroups, MdOutlineGroups, @@ -527,7 +526,7 @@ export default function Customers() { ) : ( rows?.map((row, index) => ( @@ -537,10 +536,10 @@ export default function Customers() { - {row.firstname || '—'} + {row.name || '—'} - ID #{row.customerid} + ID #{row.appcustomerid} @@ -566,35 +565,10 @@ export default function Customers() { } > - - - {row.suburb ? ( - - {row.suburb} - - ) : ( - - )} - - - - {row.address || '—'} - - + + + + )) @@ -645,10 +619,11 @@ export default function Customers() { }} > # - Customer - Contact - Address - Location + Name + Phone + Email + Total Bookings + Joined Action @@ -657,7 +632,7 @@ export default function Customers() { {customersIsLoading && } {rows?.length === 0 && !customersIsLoading ? ( - + @@ -674,7 +649,7 @@ export default function Customers() { ) : ( rows?.map((row, index) => ( - {row.firstname || '—'} + {row.name || '—'} - ID #{row.customerid} + ID #{row.appcustomerid} - - - - - {row.contactno || '—'} - - - {row.email && ( - - {row.email} - - )} - - - - + + - {row.address || '—'} + {row.phone || '—'} - + - {row.suburb ? ( - - {row.suburb} - - ) : ( - - )} + + {row.email || '—'} + + + + + {row.totalbookings ?? 0} + + + + + {row.createdat ? new Date(row.createdat).toLocaleDateString() : '—'} + @@ -790,7 +734,7 @@ export default function Customers() { )} {rows?.length !== 0 && ( - +
{isFetchingNextPage || hasNextPage ? ( diff --git a/src/pages/nearle/dashboard/Dashboard.js b/src/pages/nearle/dashboard/Dashboard.js index 9a1f00d..35d45c7 100644 --- a/src/pages/nearle/dashboard/Dashboard.js +++ b/src/pages/nearle/dashboard/Dashboard.js @@ -9,7 +9,7 @@ import { MdOutlineCheckCircle, MdTwoWheeler, MdOutlineSmartToy, - MdDeploymentUnit, + MdLocationCity, MdArrowForward, MdCircle } from 'react-icons/md'; @@ -135,7 +135,7 @@ const Dashboard = () => { - + City Breakdown @@ -297,7 +297,7 @@ const Dashboard = () => { > - + Manage Hubs diff --git a/src/pages/nearle/hubs/Hubs.js b/src/pages/nearle/hubs/Hubs.js index 890f416..10cfeb1 100644 --- a/src/pages/nearle/hubs/Hubs.js +++ b/src/pages/nearle/hubs/Hubs.js @@ -1,4 +1,5 @@ import { useState, Fragment } from 'react'; +import axios from 'axios'; import { Avatar, Box, @@ -23,31 +24,17 @@ import { TableRow, TextField, Tooltip, - Typography, - useMediaQuery + Typography } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; -import { - MdDeploymentUnit, - MdOutlineWarehouse, - MdOutlineCheckCircle, - MdOutlineBarChart, - MdOutlineLocationCity, - MdAdd, - MdEdit, - MdKeyboardArrowDown, - MdKeyboardArrowUp, - MdTwoWheeler -} from 'react-icons/md'; -import StatCard from 'components/nearle_components/StatCard'; +import { DeploymentUnitOutlined } from '@ant-design/icons'; +import { MdAdd, MdEdit, MdKeyboardArrowDown, MdKeyboardArrowUp, MdOutlineWarehouse, MdTwoWheeler, MdStar } from 'react-icons/md'; import { OrdersTableSkeleton } from '../orders/OrdersTableSkeleton'; import { OpenToast } from 'components/third-party/OpenToast'; -import { fetchHubs, createHub, updateHub, fetchAllRiders } from 'pages/api/api'; +import { fetchHubs, createHub, updateHub } from 'pages/api/api'; // ============================================================================ -// Design tokens — mirrors the DT block used across the console (see -// CLAUDE.md §6). Brand red #C01227 is the canonical primary. +// DT token block — CLAUDE.md §6, copied verbatim. // ============================================================================ const DT = { radiusPill: 999, @@ -55,7 +42,6 @@ const DT = { radiusInner: 12, shadowSoft: '0 14px 40px rgba(15, 23, 42, 0.10)', shadowMd: '0 8px 24px rgba(15, 23, 42, 0.08)', - shadowPop: '0 18px 50px rgba(15, 23, 42, 0.18)', textPrimary: '#0f172a', textSecondary: '#64748b', textMuted: '#94a3b8', @@ -72,7 +58,18 @@ const edge = (c) => a(c, '55'); const BRAND = '#C01227'; -const CITIES = ['Coimbatore', 'Hyderabad', 'Bangalore', 'Chennai']; +// Confirmed from the backend test: hubs carry `applocationid` (1–4), not a +// literal city string. Everything else here (contact/address/pincode as +// editable fields) is inferred from the create-body shape, not confirmed +// present on the GET response — flagged in the summary, not guessed silently. +const CITY_MAP = { + 1: { name: 'Coimbatore', code: 'CBE', color: '#f59e0b' }, + 2: { name: 'Hyderabad', code: 'HYD', color: '#06b6d4' }, + 3: { name: 'Bangalore', code: 'BLR', color: '#8b5cf6' }, + 4: { name: 'Chennai', code: 'CHN', color: '#10b981' } +}; +const CITY_NAME_TO_ID = Object.fromEntries(Object.entries(CITY_MAP).map(([id, c]) => [c.name, Number(id)])); + const HUB_TYPES = [ { value: 'sorting_center', label: 'Sorting Center' }, { value: 'spoke', label: 'Spoke' }, @@ -93,13 +90,14 @@ const AccentAvatar = ({ color, selected, size = 24, children }) => ( ); -const EMPTY_FORM = { hubname: '', hubtype: 'sorting_center', city: CITIES[0], capacity: '', contact: '', address: '', pincode: '' }; +const EMPTY_FORM = { hubname: '', hubtype: 'sorting_center', city: 'Coimbatore', capacity: '', contact: '', address: '', pincode: '' }; + +const fetchAllMilers = () => + axios.get(`${process.env.REACT_APP_URL}/admin/milers`).then((r) => r.data?.data || []); const Hubs = () => { - const theme = useTheme(); - const isMobile = useMediaQuery(theme.breakpoints.down('md')); const queryClient = useQueryClient(); - const [cityFilter, setCityFilter] = useState('All'); + const [selectedCity, setSelectedCity] = useState('All'); const [dialogOpen, setDialogOpen] = useState(false); const [editingHub, setEditingHub] = useState(null); const [form, setForm] = useState(EMPTY_FORM); @@ -110,14 +108,10 @@ const Hubs = () => { queryFn: fetchHubs }); - // Milers filtered per-hub for the expandable row. /admin/milers has no - // server-side hub filter (same limitation noted in api.js for fetchAllRiders), - // so this fetches the full list once and filters client-side. - const { data: allMilersRes } = useQuery({ - queryKey: ['fetchAllRiders', 0, '', 0], - queryFn: fetchAllRiders + const { data: milers = [] } = useQuery({ + queryKey: ['fetchAllMilers'], + queryFn: fetchAllMilers }); - const allMilers = allMilersRes?.details || []; const createMutation = useMutation({ mutationFn: createHub, @@ -142,21 +136,14 @@ const Hubs = () => { onError: (err) => OpenToast(err.response?.data?.message || err.message, 'error', 3000) }); - const filteredHubs = cityFilter === 'All' ? hubs : hubs.filter((h) => h.city === cityFilter); + const filteredHubs = + selectedCity === 'All' ? hubs : hubs.filter((h) => CITY_MAP[h.applocationid]?.name === selectedCity); const kpis = [ - { key: 'total', label: 'Total Hubs', color: BRAND, icon: MdOutlineWarehouse, value: hubs.length }, - { key: 'active', label: 'Active', color: '#10b981', icon: MdOutlineCheckCircle, value: hubs.filter((h) => (h.status || 'active').toLowerCase() === 'active').length }, - { - key: 'capacity', - label: 'Capacity Used', - color: '#f59e0b', - icon: MdOutlineBarChart, - value: hubs.length - ? `${Math.round((hubs.reduce((s, h) => s + (h.usedcapacity || 0), 0) / (hubs.reduce((s, h) => s + (h.capacity || 0), 0) || 1)) * 100)}%` - : '0%' - }, - { key: 'cities', label: 'Cities', color: '#0ea5e9', icon: MdOutlineLocationCity, value: new Set(hubs.map((h) => h.city).filter(Boolean)).size } + { key: 'total', label: 'Total Hubs', color: BRAND, value: hubs.length }, + { key: 'sorting', label: 'Sorting Centers', color: '#3b82f6', value: hubs.filter((h) => h.hubtype === 'sorting_center').length }, + { key: 'spokes', label: 'Spokes', color: '#14b8a6', value: hubs.filter((h) => h.hubtype === 'spoke').length }, + { key: 'cities', label: 'Cities Covered', color: '#10b981', value: new Set(hubs.map((h) => h.applocationid).filter(Boolean)).size } ]; const openCreate = () => { @@ -169,8 +156,8 @@ const Hubs = () => { setForm({ hubname: hub.hubname || '', hubtype: hub.hubtype || 'sorting_center', - city: hub.city || CITIES[0], - capacity: hub.capacity || '', + city: CITY_MAP[hub.applocationid]?.name || 'Coimbatore', + capacity: hub.capacity ?? '', contact: hub.contact || '', address: hub.address || '', pincode: hub.pincode || '' @@ -183,10 +170,19 @@ const Hubs = () => { OpenToast('Enter a hub name', 'warning', 2000); return; } + const body = { + hubname: form.hubname, + hubtype: form.hubtype, + applocationid: CITY_NAME_TO_ID[form.city], + capacity: form.capacity === '' ? undefined : Number(form.capacity), + contact: form.contact, + address: form.address, + pincode: form.pincode + }; if (editingHub) { - updateMutation.mutate({ id: editingHub.hubid, body: form }); + updateMutation.mutate({ id: editingHub.hubid, body }); } else { - createMutation.mutate(form); + createMutation.mutate(body); } }; @@ -198,7 +194,7 @@ const Hubs = () => { sx={{ p: { xs: 2, md: 3 }, borderRadius: `${DT.radiusCard}px`, - background: `linear-gradient(135deg, ${tint(BRAND)} 0%, ${tint('#D35968')} 100%)`, + background: 'linear-gradient(135deg, #C012270A 0%, #D359680A 100%)', border: '1px solid', borderColor: DT.borderSubtle, mb: { xs: 1.5, md: 2 } @@ -207,30 +203,30 @@ const Hubs = () => { - + Hubs - Live · {cityFilter} + Live · {selectedCity} - {['All', ...CITIES].map((c) => ( + {['All', ...Object.values(CITY_MAP).map((c) => c.name)].map((c) => ( setCityFilter(c)} + onClick={() => setSelectedCity(c)} sx={{ fontWeight: 700, - bgcolor: cityFilter === c ? BRAND : '#fff', - color: cityFilter === c ? '#fff' : DT.textSecondary, - border: `1px solid ${cityFilter === c ? BRAND : DT.borderSubtle}`, - '&:hover': { bgcolor: cityFilter === c ? BRAND : DT.surfaceAlt } + bgcolor: selectedCity === c ? BRAND : '#fff', + color: selectedCity === c ? '#fff' : DT.textSecondary, + border: `1px solid ${selectedCity === c ? BRAND : DT.borderSubtle}`, + '&:hover': { bgcolor: selectedCity === c ? BRAND : DT.surfaceAlt } }} /> ))} @@ -240,14 +236,29 @@ const Hubs = () => { {/* ============================================= || KPI Cards || ============================================= */} - {kpis.map((item) => { - const Icon = item.icon; - return ( - - } color={item.color} loading={hubsLoading} /> - - ); - })} + {kpis.map((item) => ( + + + + {item.label} + + + {hubsLoading ? '—' : item.value} + + + + ))} {/* ============================================= || New Hub || ============================================= */} @@ -264,7 +275,7 @@ const Hubs = () => { {/* ============================================= || Table || ============================================= */} - + { City Type Capacity + Milers Status - Milers Assigned Actions @@ -309,48 +320,35 @@ const Hubs = () => { )} {filteredHubs.map((hub) => { - const hubMilers = allMilers.filter((m) => m.hubid === hub.hubid); + const hubMilers = milers.filter((m) => m.hubid === hub.hubid); const expanded = expandedHubId === hub.hubid; + const city = CITY_MAP[hub.applocationid]; + const isActive = (hub.status || 'active').toLowerCase() === 'active'; return ( - + - - - - - - {hub.hubname || '—'} - - - - - - {hub.city || '—'} + + {hub.hubname || '—'} - t.value === hub.hubtype)?.label || hub.hubtype || '—'} - sx={{ bgcolor: tint('#0ea5e9'), color: '#0ea5e9', border: `1px solid ${edge('#0ea5e9')}`, fontWeight: 700 }} - /> + {city ? ( + + ) : ( + + — + + )} + + + + {(hub.hubtype || '—').replace(/_/g, ' ')} + {hub.capacity ?? '—'} - - - { /> + + + @@ -391,17 +401,55 @@ const Hubs = () => { No milers assigned to this hub. ) : ( - - {hubMilers.map((m) => ( - } - label={`${m.displayname || `Miler #${m.userid}`} · ${m.availabilitystatus || '—'}`} - sx={{ bgcolor: '#fff', border: `1px solid ${DT.borderSubtle}`, fontWeight: 600 }} - /> - ))} - + +
+ + + Miler + Phone + Status + Rating + + + + {hubMilers.map((m) => { + const availColor = m.availabilitystatus === 'Available' ? '#10b981' : m.availabilitystatus === 'On_Break' ? '#f59e0b' : '#94a3b8'; + return ( + + + + + + + + {m.displayname || `Miler #${m.userid}`} + + + + + + {m.phone || '—'} + + + + + + + + + {m.rating ?? '—'} + + + + ); + })} + +
+
)}
@@ -416,9 +464,9 @@ const Hubs = () => {
{/* ============================================= || Create / Edit dialog || ============================================= */} - setDialogOpen(false)} maxWidth="sm" fullWidth fullScreen={isMobile} PaperProps={{ sx: { borderRadius: { xs: 0, sm: 3 } } }}> - - {editingHub ? `Edit ${editingHub.hubname}` : 'New Hub'} + setDialogOpen(false)} maxWidth="sm" fullWidth PaperProps={{ sx: { borderRadius: 3 } }}> + + {editingHub ? `Edit ${editingHub.hubname}` : 'Create New Hub'} @@ -439,9 +487,9 @@ const Hubs = () => { City @@ -456,7 +504,7 @@ const Hubs = () => { Pincode - setForm({ ...form, pincode: e.target.value })} /> + setForm({ ...form, pincode: e.target.value.replace(/\D/g, '') })} /> Address diff --git a/src/pages/nearle/orders/orders.js b/src/pages/nearle/orders/orders.js index 59c74cc..e8fbc15 100644 --- a/src/pages/nearle/orders/orders.js +++ b/src/pages/nearle/orders/orders.js @@ -221,9 +221,6 @@ const Orders = () => { }); // ==============================|| cancelOrder ||============================== // - // NOTE: no Doormile "cancel booking" endpoint has been specified anywhere in - // the conversion work so far — this still calls the old /orders/updateorder - // path and will fail against api.doormile.com until a real endpoint exists. const cancelOrderMutation = useMutation({ mutationFn: cancelOrder, onSuccess: () => { diff --git a/yarn.lock b/yarn.lock index 4118619..95aa62e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -101,7 +101,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz" integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.16.0", "@babel/core@^7.21.3", "@babel/core@^7.21.4", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.4.0-0", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@>=7.11.0": +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.21.3", "@babel/core@^7.21.4", "@babel/core@^7.7.2", "@babel/core@^7.8.0": version "7.21.4" resolved "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz" integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== @@ -462,7 +462,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-flow@^7.14.5", "@babel/plugin-syntax-flow@^7.16.7": +"@babel/plugin-syntax-flow@^7.16.7": version "7.26.0" resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz" integrity sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg== @@ -912,7 +912,7 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.27.1" -"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.27.1": +"@babel/plugin-transform-react-jsx@^7.27.1": version "7.27.1" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz" integrity sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw== @@ -1370,7 +1370,7 @@ resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== -"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.10.6", "@emotion/react@^11.4.1", "@emotion/react@^11.5.0", "@emotion/react@^11.7.1", "@emotion/react@^11.9.0": +"@emotion/react@^11.10.6": version "11.10.6" resolved "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz" integrity sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw== @@ -1400,7 +1400,7 @@ resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz" integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== -"@emotion/styled@^11.10.6", "@emotion/styled@^11.3.0", "@emotion/styled@^11.6.0", "@emotion/styled@^11.8.1": +"@emotion/styled@^11.10.6": version "11.10.6" resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz" integrity sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og== @@ -1533,7 +1533,7 @@ "@firebase/util" "1.10.0" tslib "^2.1.0" -"@firebase/app-compat@0.2.43", "@firebase/app-compat@0.x": +"@firebase/app-compat@0.2.43": version "0.2.43" resolved "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.43.tgz" integrity sha512-HM96ZyIblXjAC7TzE8wIk2QhHlSvksYkQ4Ukh1GmEenzkucSNUmUX4QvoKrqeWsLEQ8hdcojABeCV8ybVyZmeg== @@ -1544,12 +1544,12 @@ "@firebase/util" "1.10.0" tslib "^2.1.0" -"@firebase/app-types@0.9.2", "@firebase/app-types@0.x": +"@firebase/app-types@0.9.2": version "0.9.2" resolved "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.2.tgz" integrity sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ== -"@firebase/app@0.10.13", "@firebase/app@0.x": +"@firebase/app@0.10.13": version "0.10.13" resolved "https://registry.npmjs.org/@firebase/app/-/app-0.10.13.tgz" integrity sha512-OZiDAEK/lDB6xy/XzYAyJJkaDqmQ+BCtOEPLqFvxWKUz5JbBmej7IiiRHdtiIOD/twW7O5AxVsfaaGA/V1bNsA== @@ -1846,7 +1846,7 @@ tslib "^2.1.0" undici "6.19.7" -"@firebase/util@1.10.0", "@firebase/util@1.x": +"@firebase/util@1.10.0": version "1.10.0" resolved "https://registry.npmjs.org/@firebase/util/-/util-1.10.0.tgz" integrity sha512-xKtx4A668icQqoANRxyDLBLz51TAbDP9KRfpbKGxiCAW346d0BeJe5vN6/hKxxmWwnZ0mautyv39JxviwwQMOQ== @@ -2356,7 +2356,7 @@ resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.14.tgz" integrity sha512-sbjXW+BBSvmzn61XyTMun899E7nGPTXwqD9drm1jBUAvWEhJpPFIRxwQQiATWZnd9rvdxtnhhdsDxEGWI0jxqA== -"@mui/icons-material@^5.0.4", "@mui/icons-material@^5.14.19": +"@mui/icons-material@^5.14.19": version "5.16.14" resolved "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.14.tgz" integrity sha512-heL4S+EawrP61xMXBm59QH6HODsu0gxtZi5JtnXF2r+rghzyU/3Uftlt1ij8rmJh+cFdKTQug1L9KkZB5JgpMQ== @@ -2376,7 +2376,7 @@ clsx "^2.1.0" prop-types "^15.8.1" -"@mui/material@^5.0.0", "@mui/material@^5.12.1", "@mui/material@^5.2.6", "@mui/material@^5.8.6", "@mui/material@>=5.15.0": +"@mui/material@^5.12.1": version "5.16.14" resolved "https://registry.npmjs.org/@mui/material/-/material-5.16.14.tgz" integrity sha512-eSXQVCMKU2xc7EcTxe/X/rC9QsV2jUe8eLM3MUCPYbo6V52eCE436akRIvELq/AqZpxx2bwkq7HC0cRhLB+yaw== @@ -2413,7 +2413,7 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.0.6", "@mui/system@^5.16.12", "@mui/system@^5.16.14", "@mui/system@^5.8.0": +"@mui/system@^5.16.12", "@mui/system@^5.16.14": version "5.16.14" resolved "https://registry.npmjs.org/@mui/system/-/system-5.16.14.tgz" integrity sha512-KBxMwCb8mSIABnKvoGbvM33XHyT+sN0BzEBG+rsSc0lLQGzs7127KWkCA6/H8h6LZ00XpBEME5MAj8mZLiQ1tw== @@ -2922,16 +2922,6 @@ "@svgr/babel-plugin-transform-react-native-svg" "^7.0.0" "@svgr/babel-plugin-transform-svg-component" "^7.0.0" -"@svgr/core@*", "@svgr/core@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/@svgr/core/-/core-7.0.0.tgz" - integrity sha512-ztAoxkaKhRVloa3XydohgQQCb0/8x9T63yXovpmHzKMkHO6pkjdsIAWKOS4bE95P/2quVh1NtjSKlMRNzSBffw== - dependencies: - "@babel/core" "^7.21.3" - "@svgr/babel-preset" "^7.0.0" - camelcase "^6.2.0" - cosmiconfig "^8.1.3" - "@svgr/core@^5.5.0": version "5.5.0" resolved "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz" @@ -2941,6 +2931,16 @@ camelcase "^6.2.0" cosmiconfig "^7.0.0" +"@svgr/core@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/@svgr/core/-/core-7.0.0.tgz" + integrity sha512-ztAoxkaKhRVloa3XydohgQQCb0/8x9T63yXovpmHzKMkHO6pkjdsIAWKOS4bE95P/2quVh1NtjSKlMRNzSBffw== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "^7.0.0" + camelcase "^6.2.0" + cosmiconfig "^8.1.3" + "@svgr/hast-util-to-babel-ast@^5.5.0": version "5.5.0" resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz" @@ -3044,7 +3044,7 @@ resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.9": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.1.19" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== @@ -3164,7 +3164,7 @@ dependencies: "@types/node" "*" -"@types/hoist-non-react-statics@^3.3.1", "@types/hoist-non-react-statics@>= 3.3.1", "@types/hoist-non-react-statics@3": +"@types/hoist-non-react-statics@^3.3.1", "@types/hoist-non-react-statics@3": version "3.3.1" resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz" integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== @@ -3230,7 +3230,7 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@>= 12", "@types/node@>=12.12.47", "@types/node@>=13.7.0": +"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": version "22.13.5" resolved "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz" integrity sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg== @@ -3272,7 +3272,7 @@ resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== -"@types/react@*", "@types/react@^16.8 || ^17.0 || ^18.0", "@types/react@^17.0.0 || ^18.0.0", "@types/react@^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react@>= 16", "@types/react@16 || 17 || 18": +"@types/react@*", "@types/react@16 || 17 || 18": version "18.3.18" resolved "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz" integrity sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ== @@ -3369,7 +3369,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.0.0 || ^5.0.0", "@typescript-eslint/eslint-plugin@^5.5.0": +"@typescript-eslint/eslint-plugin@^5.5.0": version "5.62.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== @@ -3392,7 +3392,7 @@ dependencies: "@typescript-eslint/utils" "5.62.0" -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.5.0": +"@typescript-eslint/parser@^5.5.0": version "5.62.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== @@ -3627,16 +3627,16 @@ acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.14.0, acorn@^8.2.4, acorn@^8.8.2, acorn@^8.9.0: - version "8.14.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== - acorn@^7.1.1: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.14.0, acorn@^8.2.4, acorn@^8.8.2, acorn@^8.9.0: + version "8.14.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + address@^1.0.1, address@^1.1.2: version "1.2.2" resolved "https://registry.npmjs.org/address/-/address-1.2.2.tgz" @@ -3681,7 +3681,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: +ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3701,7 +3701,7 @@ ajv@^8.0.0: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" -ajv@^8.6.0, ajv@>=8: +ajv@^8.6.0: version "8.17.1" resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -3711,7 +3711,7 @@ ajv@^8.6.0, ajv@>=8: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" -ajv@^8.8.2, ajv@^8.9.0: +ajv@^8.9.0: version "8.17.1" resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -4396,7 +4396,7 @@ browserify-sign@^4.2.3: readable-stream "^2.3.8" safe-buffer "^5.2.1" -browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.4, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.25.0, "browserslist@>= 4", "browserslist@>= 4.21.0", browserslist@>=4: +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.4, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.25.0: version "4.25.1" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz" integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw== @@ -5175,7 +5175,7 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^3.0.10, csstype@^3.0.2, csstype@^3.1.3: +csstype@^3.0.2, csstype@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== @@ -5221,14 +5221,14 @@ data-view-byte-offset@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" -"date-fns@^2.25.0 || ^3.2.0", date-fns@^2.28.0, date-fns@^2.30.0, "date-fns@>= 2.x": +date-fns@^2.30.0: version "2.30.0" resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz" integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== dependencies: "@babel/runtime" "^7.21.0" -dayjs@^1.10.7, dayjs@^1.11.10, dayjs@^1.11.11, "dayjs@>= 1.x": +dayjs@^1.11.10, dayjs@^1.11.11: version "1.11.13" resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz" integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== @@ -6042,7 +6042,7 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "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@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.5.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.1.0, eslint@^8.3.0, eslint@^8.38.0, "eslint@>= 6", eslint@>=7.0.0, eslint@>=7.28.0: +eslint@^8.3.0, eslint@^8.38.0: version "8.57.1" resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz" integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== @@ -7752,7 +7752,7 @@ jest-resolve-dependencies@^27.5.1: jest-regex-util "^27.5.1" jest-snapshot "^27.5.1" -jest-resolve@*, jest-resolve@^27.4.2, jest-resolve@^27.5.1: +jest-resolve@^27.4.2, jest-resolve@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== @@ -7962,7 +7962,7 @@ jest-worker@^28.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -"jest@^27.0.0 || ^28.0.0", jest@^27.4.3: +jest@^27.4.3: version "27.5.1" resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== @@ -8206,7 +8206,7 @@ launch-editor@^2.6.0: picocolors "^1.0.0" shell-quote "^1.8.1" -leaflet@^1.9.0, leaflet@^1.9.4: +leaflet@^1.9.4: version "1.9.4" resolved "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz" integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA== @@ -9645,15 +9645,6 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.1.4, postcss@^8.2, postcss@^8.2.14, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.3, postcss@^8.3.5, postcss@^8.4, postcss@^8.4.21, postcss@^8.4.33, postcss@^8.4.4, postcss@^8.4.47, postcss@^8.4.6, "postcss@>= 8", postcss@>=8, postcss@>=8.0.9: - version "8.5.3" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz" - integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== - dependencies: - nanoid "^3.3.8" - picocolors "^1.1.1" - source-map-js "^1.2.1" - postcss@^7.0.35: version "7.0.39" resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" @@ -9662,6 +9653,15 @@ postcss@^7.0.35: picocolors "^0.2.1" source-map "^0.6.1" +postcss@^8.3.5, postcss@^8.4.33, postcss@^8.4.4, postcss@^8.4.47: + version "8.5.3" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz" + integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== + dependencies: + nanoid "^3.3.8" + picocolors "^1.1.1" + source-map-js "^1.2.1" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -9679,7 +9679,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.8.7, prettier@>=2.0.0: +prettier@^2.8.7: version "2.8.8" resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== @@ -10299,7 +10299,7 @@ react-dnd@^16.0.1: fast-deep-equal "^3.1.3" hoist-non-react-statics "^3.3.2" -react-dom@*, "react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8 || ^17 || ^18 || ^19", "react-dom@^16.8 || ^17.0 || ^18.0", "react-dom@^17.0.0 || ^18.0.0", "react-dom@^17.0.0 || ^18.0.0 || ^19.0.0", react-dom@^17.0.2, react-dom@^18.0.0, react-dom@^18.2.0, "react-dom@>= 0.14.0", react-dom@>=16.0.0, react-dom@>=16.11.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.0, react-dom@>=16.9.0, "react-dom@16.2.0 - 18": +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== @@ -10395,7 +10395,7 @@ react-loading-icons@^1.1.0: resolved "https://registry.npmjs.org/react-loading-icons/-/react-loading-icons-1.1.0.tgz" integrity sha512-Y9eZ6HAufmUd8DIQd6rFrx5Bt/oDlTM9Nsjvf8YpajTa3dI8cLNU8jUN5z7KTANU+Yd6/KJuBjxVlrU2dMw33g== -"react-redux@^7.2.1 || ^8.0.2", react-redux@^8.0.5: +react-redux@^8.0.5: version "8.1.3" resolved "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz" integrity sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw== @@ -10407,7 +10407,7 @@ react-loading-icons@^1.1.0: react-is "^18.0.0" use-sync-external-store "^1.0.0" -react-refresh@^0.11.0, "react-refresh@>=0.10.0 <1.0.0": +react-refresh@^0.11.0: version "0.11.0" resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== @@ -10427,7 +10427,7 @@ react-router@^6.10.0, react-router@6.29.0: dependencies: "@remix-run/router" "1.22.0" -react-scripts@^5.0.1, react-scripts@>=2.1.3: +react-scripts@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz" integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== @@ -10502,7 +10502,7 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -react@*, "react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.6.0 || 17 || 18", "react@^16.8 || ^17 || ^18 || ^19", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.9.0 || ^17.0.0 || ^18", "react@^17.0.0 || ^18.0.0", "react@^17.0.0 || ^18.0.0 || ^19.0.0", react@^17.0.2, react@^18.0.0, react@^18.2.0, react@^18.3.1, "react@>= 0.14.0", "react@>= 16", "react@>= 16.14", react@>=16.0.0, react@>=16.11.0, react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=16.9.0, "react@16.2.0 - 18": +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== @@ -10571,7 +10571,7 @@ redux-thunk@^2.4.2: resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz" integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== -redux@^4, "redux@^4 || ^5.0.0-beta.0", redux@^4.2.0, redux@^4.2.1: +redux@^4.2.0, redux@^4.2.1: version "4.2.1" resolved "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz" integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== @@ -10792,7 +10792,7 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1: +rollup@^2.43.1: version "2.79.2" resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz" integrity sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ== @@ -11554,7 +11554,7 @@ stylis-plugin-rtl@^2.1.1: dependencies: cssjanus "^2.0.1" -stylis@^4.3.4, stylis@4.x: +stylis@^4.3.4: version "4.3.6" resolved "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz" integrity sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ== @@ -11930,7 +11930,7 @@ type-fest@^0.20.2: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.21.3, "type-fest@>=0.17.0 <4.0.0": +type-fest@^0.21.3: version "0.21.3" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== @@ -12000,11 +12000,6 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -"typescript@^3.2.1 || ^4", "typescript@^4.7 || 5", "typescript@>= 2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", typescript@>=4.9.5: - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - ua-parser-js@^1.0.33: version "1.0.40" resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz" @@ -12245,7 +12240,7 @@ webpack-dev-middleware@^5.3.4: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.6.0, "webpack-dev-server@3.x || 4.x": +webpack-dev-server@^4.6.0: version "4.15.2" resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz" integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== @@ -12310,7 +12305,7 @@ webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^4.4.0 || ^5.9.0", "webpack@^4.44.2 || ^5.47.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.64.4, "webpack@>= 4", webpack@>=2, "webpack@>=4.43.0 <6.0.0": +webpack@^5.64.4: version "5.98.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz" integrity sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==