From 9ab01d2655869e05fd164ef3607f751124f1a264 Mon Sep 17 00:00:00 2001 From: Syasya Date: Tue, 12 Aug 2025 15:49:20 +0800 Subject: [PATCH 01/12] new layout test --- app/(admin)/adminDashboard/page.tsx | 72 +++++++++++--- app/utils/api.ts | 26 +++++ components/dashboards/EnergyLineChart.tsx | 29 ++++-- components/dashboards/KPIStatus.tsx | 112 ++++++++++------------ components/dashboards/MonthlyBarChart.tsx | 24 +++-- components/dashboards/kpibottom.tsx | 54 +++++++++++ components/dashboards/kpitop.tsx | 74 ++++++++++++++ 7 files changed, 299 insertions(+), 92 deletions(-) create mode 100644 components/dashboards/kpibottom.tsx create mode 100644 components/dashboards/kpitop.tsx diff --git a/app/(admin)/adminDashboard/page.tsx b/app/(admin)/adminDashboard/page.tsx index e0c3ab7..6c577e9 100644 --- a/app/(admin)/adminDashboard/page.tsx +++ b/app/(admin)/adminDashboard/page.tsx @@ -10,6 +10,8 @@ import html2canvas from 'html2canvas'; import jsPDF from 'jspdf'; import dynamic from 'next/dynamic'; import { fetchPowerTimeseries } from '@/app/utils/api'; +import KpiTop from '@/components/dashboards/kpitop'; +import KpiBottom from '@/components/dashboards/kpibottom'; const EnergyLineChart = dynamic(() => import('@/components/dashboards/EnergyLineChart'), { ssr: false, @@ -19,6 +21,16 @@ const MonthlyBarChart = dynamic(() => import('@/components/dashboards/MonthlyBar ssr: false, }); +type MonthlyKPI = { + site: string; month: string; + yield_kwh: number | null; consumption_kwh: number | null; grid_draw_kwh: number | null; + efficiency: number | null; peak_demand_kw: number | null; + avg_power_factor: number | null; load_factor: number | null; + error?: string; +}; + +const API = process.env.NEXT_PUBLIC_API_URL ?? 'http://localhost:8000'; + import { SiteName, SiteDetails, mockSiteData } from '@/types/SiteData'; const AdminDashboard = () => { @@ -34,6 +46,8 @@ const AdminDashboard = () => { const siteParam = searchParams?.get('site'); const validSiteNames: SiteName[] = ['Site A', 'Site B', 'Site C']; + const [kpi, setKpi] = useState(null); + const [selectedSite, setSelectedSite] = useState(() => { if (siteParam && validSiteNames.includes(siteParam as SiteName)) { return siteParam as SiteName; @@ -94,6 +108,23 @@ const AdminDashboard = () => { fetchData(); }, [selectedSite]); +// fetch KPI monthly (uses your FastAPI) + useEffect(() => { + const siteId = siteIdMap[selectedSite]; + const url = `${API}/kpi/monthly?site=${encodeURIComponent(siteId)}&month=${currentMonth}`; + fetch(url).then(r => r.json()).then(setKpi).catch(console.error); + }, [selectedSite]); + + // derived values with safe fallbacks + const yieldKwh = kpi?.yield_kwh ?? 0; + const consumptionKwh = kpi?.consumption_kwh ?? 0; + const gridDrawKwh = kpi?.grid_draw_kwh ?? Math.max(0, consumptionKwh - yieldKwh); + + const efficiencyPct = (kpi?.efficiency ?? 0) * 100; + const powerFactor = kpi?.avg_power_factor ?? 0; + const loadFactor = (kpi?.load_factor ?? 0); + + // ...your existing code above return() // Update query string when site is changed manually const handleSiteChange = (newSite: SiteName) => { setSelectedSite(newSite); @@ -169,7 +200,7 @@ const AdminDashboard = () => {

Admin Dashboard

-
+
{ lastSyncTimestamp={currentSiteDetails.lastSyncTimestamp} />
- -
- -
- -
-
- - + {/* TOP 3 CARDS */} +
+
-
+ +
+ +
+ {/* BOTTOM 3 PANELS */} +
-
- + } + right={ +
+
+ {(kpi?.peak_demand_kw ?? 0).toFixed(2)} kW +
+
+ } + />
+ ) : ( + + )} +
+ + {/* Modal */} + {showModal && ( +
+
+

Enter Device Info

+ + setDeviceId(e.target.value)} + /> + + + +
+ +
- - {/* Site ID */} -
-

Site ID:

-

{siteId}

-
- - {/* Location */} -
-

Location:

-

{location}

-
- - {/* Inverter Provider */} -
-

Inverter Provider:

-

{inverterProvider}

-
- - {/* Emergency Contact */} -
-

Emergency Contact:

-

{emergencyContact}

-
- - {/* Last Sync */} -
-

Last Sync:

-

{lastSyncTimestamp}

-
- - {/* Start Logging Button */} -
- {devicesAtSite.length > 0 ? ( - - ) : ( - - )} -
- - - {/* Modal */} - {showModal && ( -
-
-

Enter Device Info

- - setDeviceId(e.target.value)} - /> - - - -
- - -
-
-
- )} +
- ); + )} +
+ ); }; export default SiteStatus; + -- 2.47.2 From 0467034acb263825de55b6fb487fca009b35b4c1 Mon Sep 17 00:00:00 2001 From: Syasya Date: Fri, 15 Aug 2025 09:19:49 +0800 Subject: [PATCH 05/12] new layout --- app/(admin)/adminDashboard/page.tsx | 283 +++++++++++++++++------ components/dashboards/LoggingControl.tsx | 223 ++++++++++++++++++ components/dashboards/SiteStatus.tsx | 61 ----- {app => public}/icon.png | Bin 4 files changed, 430 insertions(+), 137 deletions(-) create mode 100644 components/dashboards/LoggingControl.tsx rename {app => public}/icon.png (100%) diff --git a/app/(admin)/adminDashboard/page.tsx b/app/(admin)/adminDashboard/page.tsx index 2f6fb88..bc97fce 100644 --- a/app/(admin)/adminDashboard/page.tsx +++ b/app/(admin)/adminDashboard/page.tsx @@ -13,7 +13,7 @@ import KpiTop from '@/components/dashboards/kpitop'; import KpiBottom from '@/components/dashboards/kpibottom'; import { formatAddress } from '@/app/utils/formatAddress'; import { formatCrmTimestamp } from '@/app/utils/datetime'; - +import LoggingControlCard from '@/components/dashboards/LoggingControl'; const EnergyLineChart = dynamic(() => import('@/components/dashboards/EnergyLineChart'), { ssr: false }); const MonthlyBarChart = dynamic(() => import('@/components/dashboards/MonthlyBarChart'), { ssr: false }); @@ -42,15 +42,31 @@ type CrmProject = { const API = process.env.NEXT_PUBLIC_API_URL ?? 'http://localhost:8000'; +// Adjust this to your FastAPI route +const START_LOGGING_ENDPOINT = (siteId: string) => + `${API}/logging/start?site=${encodeURIComponent(siteId)}`; + +// helper to build ISO strings with +08:00 +const withTZ = (d: Date) => { + const yyyyMMdd = d.toISOString().split('T')[0]; + return { + start: `${yyyyMMdd}T00:00:00+08:00`, + end: `${yyyyMMdd}T23:59:59+08:00`, + }; +}; + const AdminDashboard = () => { const router = useRouter(); const pathname = usePathname(); const searchParams = useSearchParams(); - // --- NEW: load CRM projects dynamically --- + // --- load CRM projects dynamically --- const [sites, setSites] = useState([]); const [sitesLoading, setSitesLoading] = useState(true); const [sitesError, setSitesError] = useState(null); + // near other refs + const loggingRef = useRef(null); + useEffect(() => { setSitesLoading(true); @@ -82,43 +98,78 @@ const AdminDashboard = () => { // Current selected CRM project const selectedProject: CrmProject | null = useMemo( - () => sites.find(s => s.name === selectedSiteId) ?? null, - [sites, selectedSiteId] + () => sites.find(s => s.name === selectedSiteId) ?? null, + [sites, selectedSiteId] ); - // --- FIX: declare currentMonth BEFORE it’s used --- + // declare currentMonth BEFORE it’s used const currentMonth = useMemo(() => new Date().toISOString().slice(0, 7), []); - // --- Time-series state (unchanged) --- + // --- Time-series state --- const [timeSeriesData, setTimeSeriesData] = useState<{ consumption: { time: string; value: number }[]; generation: { time: string; value: number }[]; }>({ consumption: [], generation: [] }); - // Fetch today’s timeseries for selected siteId (from CRM) + // data-availability flags + const [hasAnyData, setHasAnyData] = useState(false); // historical window + const [hasTodayData, setHasTodayData] = useState(false); + const [isLogging, setIsLogging] = useState(false); + const [startError, setStartError] = useState(null); + + // Fetch today’s timeseries for selected siteId useEffect(() => { if (!selectedSiteId) return; - const fetchData = async () => { - const today = new Date(); - const yyyyMMdd = today.toISOString().split('T')[0]; - const start = `${yyyyMMdd}T00:00:00+08:00`; - const end = `${yyyyMMdd}T23:59:59+08:00`; + const fetchToday = async () => { + const { start, end } = withTZ(new Date()); try { const raw = await fetchPowerTimeseries(selectedSiteId, start, end); const consumption = raw.consumption.map((d: any) => ({ time: d.time, value: d.value })); const generation = raw.generation.map((d: any) => ({ time: d.time, value: d.value })); setTimeSeriesData({ consumption, generation }); + + const anyToday = (consumption?.length ?? 0) > 0 || (generation?.length ?? 0) > 0; + setHasTodayData(anyToday); } catch (error) { console.error('Failed to fetch power time series:', error); + setHasTodayData(false); } }; - fetchData(); + fetchToday(); }, [selectedSiteId]); - // --- KPI monthly (uses your FastAPI) --- + // Check historical data (last 30 days) → controls empty state + useEffect(() => { + if (!selectedSiteId) return; + + const fetchHistorical = async () => { + try { + const endDate = new Date(); + const startDate = new Date(); + startDate.setDate(endDate.getDate() - 30); + + const startISO = `${startDate.toISOString().split('T')[0]}T00:00:00+08:00`; + const endISO = `${endDate.toISOString().split('T')[0]}T23:59:59+08:00`; + + const raw = await fetchPowerTimeseries(selectedSiteId, startISO, endISO); + const anyHistorical = + (raw?.consumption?.length ?? 0) > 0 || + (raw?.generation?.length ?? 0) > 0; + + setHasAnyData(anyHistorical); + } catch (e) { + console.error('Failed to check historical data:', e); + setHasAnyData(false); + } + }; + + fetchHistorical(); + }, [selectedSiteId]); + + // --- KPI monthly --- const [kpi, setKpi] = useState(null); useEffect(() => { @@ -135,35 +186,40 @@ const AdminDashboard = () => { const powerFactor = kpi?.avg_power_factor ?? 0; const loadFactor = (kpi?.load_factor ?? 0); - // Update URL when site is changed manually (now expects a siteId/Project.name) + // Update URL when site is changed manually (expects a siteId/Project.name) const handleSiteChange = (newSiteId: string) => { setSelectedSiteId(newSiteId); const newUrl = `${pathname}?site=${encodeURIComponent(newSiteId)}`; router.push(newUrl); + // reset flags when switching + setHasAnyData(false); + setHasTodayData(false); + setIsLogging(false); + setStartError(null); }; const locationFormatted = useMemo(() => { - const raw = selectedProject?.custom_address ?? ''; - if (!raw) return 'N/A'; - return formatAddress(raw).multiLine; // pretty, multi-line version -}, [selectedProject?.custom_address]); + const raw = selectedProject?.custom_address ?? ''; + if (!raw) return 'N/A'; + return formatAddress(raw).multiLine; + }, [selectedProject?.custom_address]); -const lastSyncFormatted = useMemo( - () => formatCrmTimestamp(selectedProject?.modified, { includeSeconds: true }), - [selectedProject?.modified] -); + const lastSyncFormatted = useMemo( + () => formatCrmTimestamp(selectedProject?.modified, { includeSeconds: true }), + [selectedProject?.modified] + ); // Adapt CRM project -> SiteStatus props -const currentSiteDetails = { - location: locationFormatted, // <- formatted! - inverterProvider: selectedProject?.project_type || 'N/A', - emergencyContact: - selectedProject?.custom_mobile_phone_no || - selectedProject?.custom_email || - selectedProject?.customer || - 'N/A', - lastSyncTimestamp: lastSyncFormatted || 'N/A', -}; + const currentSiteDetails = { + location: locationFormatted, + inverterProvider: selectedProject?.project_type || 'N/A', + emergencyContact: + selectedProject?.custom_mobile_phone_no || + selectedProject?.custom_email || + selectedProject?.customer || + 'N/A', + lastSyncTimestamp: lastSyncFormatted || 'N/A', + }; const energyChartRef = useRef(null); const monthlyChartRef = useRef(null); @@ -201,6 +257,49 @@ const currentSiteDetails = { doc.save('dashboard_charts.pdf'); }; + // Start logging then poll for data until it shows up + const startLogging = async () => { + if (!selectedSiteId) return; + setIsLogging(true); + setStartError(null); + + try { + const resp = await fetch(START_LOGGING_ENDPOINT(selectedSiteId), { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }); + + if (!resp.ok) { + const text = await resp.text(); + throw new Error(text || `Failed with status ${resp.status}`); + } + + // Poll for data for up to ~45s (15 tries x 3s) + for (let i = 0; i < 15; i++) { + const today = new Date(); + const { start, end } = withTZ(today); + + try { + const raw = await fetchPowerTimeseries(selectedSiteId, start, end); + const consumption = raw.consumption ?? []; + const generation = raw.generation ?? []; + if ((consumption.length ?? 0) > 0 || (generation.length ?? 0) > 0) { + setHasAnyData(true); // site now has data + setHasTodayData(true); // and today has data too + break; + } + } catch { + // ignore and keep polling + } + await new Promise(r => setTimeout(r, 3000)); + } + } catch (e: any) { + setStartError(e?.message ?? 'Failed to start logging'); + setIsLogging(false); + } + }; + + // ---------- RENDER ---------- if (sitesLoading) { return ( @@ -225,79 +324,111 @@ const currentSiteDetails = { // Build selector options from CRM const siteOptions = sites.map(s => ({ - label: s.project_name || s.name, // nice display - value: s.name, // siteId used everywhere + label: s.project_name || s.name, + value: s.name, })); return ( -
+

Admin Dashboard

-
-
- {/* UPDATE SiteSelector to accept these props */} + {/* Selector + status */} +
+
- {/* UPDATE SiteStatus to accept siteId & dynamic fields */} + +
- {/* TOP 3 CARDS */} -
- + No data yet. + Enter the meter number and click Start to begin streaming. + + + {startError &&
{startError}
} +
+ )} + +
+
-
- -
- - {/* BOTTOM 3 PANELS */} - - -
- } - right={ -
-
- {(kpi?.peak_demand_kw ?? 0).toFixed(2)} kW + {/* Render the rest only if there is *any* data */} + {hasAnyData && ( + <> + {/* Tiny banner if today is empty but historical exists */} + {!hasTodayData && ( +
+ No data yet today — charts may be blank until new points arrive.
-
- } - /> + )} + + + {/* TOP 3 CARDS */} +
+ +
+ +
+ +
+ + {/* BOTTOM 3 PANELS */} + + +
+ } + right={ +
+
+ {(kpi?.peak_demand_kw ?? 0).toFixed(2)} kW +
+
+ } + /> + +
+ +
+ + )} + -
- -
); }; export default AdminDashboard; - - - diff --git a/components/dashboards/LoggingControl.tsx b/components/dashboards/LoggingControl.tsx new file mode 100644 index 0000000..1303678 --- /dev/null +++ b/components/dashboards/LoggingControl.tsx @@ -0,0 +1,223 @@ +'use client'; + +import React, { useEffect, useMemo, useState } from 'react'; +import axios from 'axios'; + +type FnType = 'grid' | 'solar'; + +interface LoggingControlCardProps { + siteId: string; + projectLabel?: string; // nice display (e.g., CRM project_name) + className?: string; +} + +const API_URL = process.env.NEXT_PUBLIC_API_URL ?? 'http://localhost:8000'; + +type FnState = { + serial: string; + isLogging: boolean; + isBusy: boolean; // to block double clicks while calling API + error?: string | null; +}; + +const emptyFnState: FnState = { serial: '', isLogging: false, isBusy: false, error: null }; + +const storageKey = (siteId: string) => `logging_control_${siteId}`; + +export default function LoggingControlCard({ + siteId, + projectLabel, + className = '', +}: LoggingControlCardProps) { + const [grid, setGrid] = useState(emptyFnState); + const [solar, setSolar] = useState(emptyFnState); + + // Load persisted state (if any) + useEffect(() => { + try { + const raw = localStorage.getItem(storageKey(siteId)); + if (raw) { + const parsed = JSON.parse(raw); + setGrid({ ...emptyFnState, ...(parsed.grid ?? {}) }); + setSolar({ ...emptyFnState, ...(parsed.solar ?? {}) }); + } else { + setGrid(emptyFnState); + setSolar(emptyFnState); + } + } catch { + setGrid(emptyFnState); + setSolar(emptyFnState); + } + }, [siteId]); + + // Persist on any change + useEffect(() => { + const data = { grid, solar }; + try { + localStorage.setItem(storageKey(siteId), JSON.stringify(data)); + } catch { + // ignore storage errors + } + }, [siteId, grid, solar]); + + const title = useMemo( + () => `Logging Control${projectLabel ? ` — ${projectLabel}` : ''}`, + [projectLabel] + ); + + const topicsFor = (fn: FnType, serial: string) => { + return [`ADW300/${siteId}/${serial}/${fn}`]; + }; + + const start = async (fn: FnType) => { + const state = fn === 'grid' ? grid : solar; + const setState = fn === 'grid' ? setGrid : setSolar; + + if (!state.serial.trim()) { + setState((s) => ({ ...s, error: 'Please enter a meter serial number.' })); + return; + } + + setState((s) => ({ ...s, isBusy: true, error: null })); + + try { + const topics = topicsFor(fn, state.serial.trim()); + const res = await axios.post(`${API_URL}/start-logging`, { topics }); + console.log('Start logging:', res.data); + setState((s) => ({ ...s, isLogging: true, isBusy: false })); + } catch (e: any) { + console.error('Failed to start logging', e); + setState((s) => ({ + ...s, + isBusy: false, + error: e?.response?.data?.detail || e?.message || 'Failed to start logging', + })); + } + }; + + const stop = async (fn: FnType) => { + const state = fn === 'grid' ? grid : solar; + const setState = fn === 'grid' ? setGrid : setSolar; + + if (!state.isLogging) return; + + const confirmed = window.confirm( + `Stop logging for ${fn.toUpperCase()} meter "${state.serial}" at site ${siteId}?` + ); + if (!confirmed) return; + + setState((s) => ({ ...s, isBusy: true, error: null })); + + try { + const topics = topicsFor(fn, state.serial.trim()); + const res = await axios.post(`${API_URL}/stop-logging`, { topics }); + console.log('Stop logging:', res.data); + setState((s) => ({ ...s, isLogging: false, isBusy: false })); + } catch (e: any) { + console.error('Failed to stop logging', e); + setState((s) => ({ + ...s, + isBusy: false, + error: e?.response?.data?.detail || e?.message || 'Failed to stop logging', + })); + } + }; + + // Responsive utility classes + const field = + 'w-full px-3 py-2 sm:py-2.5 border rounded-md text-sm sm:text-base placeholder:text-gray-400 dark:border-rtgray-700 dark:bg-rtgray-700 dark:text-white'; + + const label = + 'text-gray-600 dark:text-white/85 font-medium text-sm sm:text-base mb-1 flex items-center justify-between mr-2.5'; + + const section = ( + fn: FnType, + labelText: string, + state: FnState, + setState: React.Dispatch> + ) => ( +
+
+ {labelText} + {state.isLogging && ( + + Logging + + )} +
+ + {/* Input + Button: stack on mobile, row on ≥sm */} +
+ setState((s) => ({ ...s, serial: e.target.value }))} + disabled={state.isLogging || state.isBusy} + aria-label={`${labelText} serial number`} + /> + + {!state.isLogging ? ( + + ) : ( + + )} +
+ + {!!state.error &&
{state.error}
} +
+ ); + + return ( +
+

+ {title} +

+ + {section('grid', 'Grid Meter', grid, setGrid)} +
+ {section('solar', 'Solar Meter', solar, setSolar)} + +
+ • Inputs lock while logging is active. Stop to edit the serial. +
+ • Topics follow{' '} + + ADW300/{'{'}siteId{'}'}/{'{'}serial{'}'}/(grid|solar) + + . +
+
+ ); +} + diff --git a/components/dashboards/SiteStatus.tsx b/components/dashboards/SiteStatus.tsx index 50aa9df..5c1ecf3 100644 --- a/components/dashboards/SiteStatus.tsx +++ b/components/dashboards/SiteStatus.tsx @@ -144,67 +144,6 @@ const SiteStatus = ({

Last Sync:

{lastSyncTimestamp}

- - {/* Start/Stop */} -
- {devicesAtSite.length > 0 ? ( - - ) : ( - - )} -
- - {/* Modal */} - {showModal && ( -
-
-

Enter Device Info

- - setDeviceId(e.target.value)} - /> - - - -
- - -
-
-
- )}
); }; diff --git a/app/icon.png b/public/icon.png similarity index 100% rename from app/icon.png rename to public/icon.png -- 2.47.2 From 44bb94ded851f7eed2dbf2d6bd63e3e1e8bd9b05 Mon Sep 17 00:00:00 2001 From: Syasya Date: Fri, 15 Aug 2025 09:20:13 +0800 Subject: [PATCH 06/12] sites to fetch from ERP --- app/(admin)/sites/page.tsx | 221 +++++++++++++++++++++++------ components/dashboards/SiteCard.tsx | 199 ++++++++++++++++++-------- 2 files changed, 322 insertions(+), 98 deletions(-) diff --git a/app/(admin)/sites/page.tsx b/app/(admin)/sites/page.tsx index 2f6d3de..03752fa 100644 --- a/app/(admin)/sites/page.tsx +++ b/app/(admin)/sites/page.tsx @@ -1,46 +1,187 @@ 'use client'; -import React from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import DashboardLayout from '../adminDashboard/dashlayout'; -import SiteCard from '@/components/dashboards/SiteCard'; // Import the new SiteCard component -import { mockSiteData, SiteName } from '@/types/SiteData'; // Import your mock data and SiteName type +import SiteCard from '@/components/dashboards/SiteCard'; -const SitesPage = () => { - // Helper function to determine status (can be externalized if used elsewhere) - const getSiteStatus = (siteName: SiteName): string => { - const statusMap: Record = { - 'Site A': 'Active', - 'Site B': 'Inactive', - 'Site C': 'Faulty', - }; - return statusMap[siteName]; - }; - - return ( - -
-

All Sites Overview

- -
- {/* Iterate over the keys of mockSiteData (which are your SiteNames) */} - {Object.keys(mockSiteData).map((siteNameKey) => { - const siteName = siteNameKey as SiteName; // Cast to SiteName type - const siteDetails = mockSiteData[siteName]; - const siteStatus = getSiteStatus(siteName); - - return ( - - ); - })} -
-
-
- ); +type CrmProject = { + name: string; // e.g. PROJ-0008 (siteId) + project_name: string; + status?: string | null; + modified?: string | null; + customer?: string | null; + project_type?: string | null; + custom_address?: string | null; + custom_email?: string | null; + custom_mobile_phone_no?: string | null; }; -export default SitesPage; \ No newline at end of file +const API = process.env.NEXT_PUBLIC_API_URL ?? 'http://localhost:8000'; + +const SitesPage = () => { + const [projects, setProjects] = useState([]); + const [loading, setLoading] = useState(true); + const [err, setErr] = useState(null); + const [q, setQ] = useState(''); // search filter + + // pagination + const [page, setPage] = useState(1); + const [pageSize, setPageSize] = useState(6); // tweak as you like + + useEffect(() => { + let cancelled = false; + const run = async () => { + setLoading(true); + setErr(null); + try { + const res = await fetch(`${API}/crm/projects?limit=0`); + if (!res.ok) throw new Error(await res.text()); + const json = await res.json(); + const data: CrmProject[] = json?.data ?? []; + if (!cancelled) setProjects(data); + } catch (e: any) { + if (!cancelled) setErr(e?.message ?? 'Failed to load CRM projects'); + } finally { + if (!cancelled) setLoading(false); + } + }; + run(); + return () => { cancelled = true; }; + }, []); + + // Reset to first page whenever search or pageSize changes + useEffect(() => { + setPage(1); + }, [q, pageSize]); + + const filtered = useMemo(() => { + if (!q.trim()) return projects; + const needle = q.toLowerCase(); + return projects.filter(p => + (p.project_name || '').toLowerCase().includes(needle) || + (p.name || '').toLowerCase().includes(needle) || + (p.customer || '').toLowerCase().includes(needle) + ); + }, [projects, q]); + + const total = filtered.length; + const totalPages = Math.max(1, Math.ceil(total / pageSize)); + const safePage = Math.min(page, totalPages); + const startIdx = (safePage - 1) * pageSize; + const endIdx = Math.min(startIdx + pageSize, total); + const pageItems = filtered.slice(startIdx, endIdx); + + const goPrev = () => setPage(p => Math.max(1, p - 1)); + const goNext = () => setPage(p => Math.min(totalPages, p + 1)); + + return ( + +
+
+

All Sites Overview

+ +
+ setQ(e.target.value)} + placeholder="Search by name / ID / customer" + className="w-64 max-w-full px-3 py-2 rounded-md border dark:border-gray-700 bg-white dark:bg-gray-900 dark:text-white" + /> + +
+
+ + {loading && ( +
Loading CRM projects…
+ )} + + {err && ( +
Error: {err}
+ )} + + {!loading && !err && total === 0 && ( +
No sites found.
+ )} + + {!loading && !err && total > 0 && ( + <> + {/* Pagination header */} +
+
+ Showing {startIdx + 1}{endIdx} of {total} +
+
+ + + Page {safePage} / {totalPages} + + +
+
+ + {/* Cards */} +
+ {pageItems.map(p => ( + + ))} +
+ + {/* Pagination footer mirrors header for convenience */} +
+
+ Showing {startIdx + 1}{endIdx} of {total} +
+
+ + + Page {safePage} / {totalPages} + + +
+
+ + )} +
+
+ ); +}; + +export default SitesPage; + diff --git a/components/dashboards/SiteCard.tsx b/components/dashboards/SiteCard.tsx index f38ec36..6bc894b 100644 --- a/components/dashboards/SiteCard.tsx +++ b/components/dashboards/SiteCard.tsx @@ -1,63 +1,146 @@ // components/dashboards/SiteCard.tsx -import React from 'react'; -import Link from 'next/link'; // Import Link from Next.js -import { SiteName, SiteDetails } from '@/types/SiteData'; // Adjust path as necessary +'use client'; -interface SiteCardProps { - siteName: SiteName; - details: SiteDetails; - status: string; -} +import React, { useEffect, useMemo, useState } from 'react'; +import Link from 'next/link'; +import { formatAddress } from '@/app/utils/formatAddress'; +import { formatCrmTimestamp } from '@/app/utils/datetime'; -const SiteCard: React.FC = ({ siteName, details, status }) => { - const statusColorClass = - status === 'Active' ? 'text-green-500' : - status === 'Inactive' ? 'text-orange-500' : - 'text-red-500'; - - return ( -
-

- {siteName} -

- -
-

Status:

-

{status}

-
- -
-

Location:

-

{details.location}

-
- -
-

Inverter Provider:

-

{details.inverterProvider}

-
- -
-

Emergency Contact:

-

{details.emergencyContact}

-
- -
-

Last Sync:

-

{details.lastSyncTimestamp}

-
- - {/* New: View Dashboard Button */} - - View Dashboard - -
- ); +type CrmProject = { + name: string; // e.g. PROJ-0008 (siteId) + project_name: string; + status?: string; + percent_complete?: number | null; + owner?: string | null; + modified?: string | null; + customer?: string | null; + project_type?: string | null; + custom_address?: string | null; + custom_email?: string | null; + custom_mobile_phone_no?: string | null; }; -export default SiteCard; \ No newline at end of file +interface SiteCardProps { + siteId: string; // CRM Project "name" (canonical id) + className?: string; // optional styling hook + fallbackStatus?: string; // optional backup status if CRM is missing it +} + +const API = process.env.NEXT_PUBLIC_API_URL ?? 'http://localhost:8000'; + +const SiteCard: React.FC = ({ siteId, className = '', fallbackStatus }) => { + const [project, setProject] = useState(null); + const [loading, setLoading] = useState(true); + const [err, setErr] = useState(null); + + useEffect(() => { + let cancelled = false; + + const fetchProject = async () => { + setLoading(true); + setErr(null); + try { + // ---- Try a single-project endpoint first (best) ---- + // e.g. GET /crm/projects/PROJ-0008 + const single = await fetch(`${API}/crm/projects/${encodeURIComponent(siteId)}`); + if (single.ok) { + const pj = await single.json(); + if (!cancelled) setProject(pj?.data ?? pj ?? null); + } else { + // ---- Fallback: fetch all and find by name (works with your existing API) ---- + const list = await fetch(`${API}/crm/projects?limit=0`); + if (!list.ok) throw new Error(await list.text()); + const json = await list.json(); + const found = (json?.data ?? []).find((p: CrmProject) => p.name === siteId) ?? null; + if (!cancelled) setProject(found); + } + } catch (e: any) { + if (!cancelled) setErr(e?.message ?? 'Failed to load CRM project'); + } finally { + if (!cancelled) setLoading(false); + } + }; + + fetchProject(); + return () => { cancelled = true; }; + }, [siteId]); + + const status = project?.status || fallbackStatus || 'Unknown'; + const statusColorClass = + status === 'Active' ? 'text-green-500' : + status === 'Inactive' ? 'text-orange-500' : + 'text-red-500'; + + const niceAddress = useMemo(() => { + if (!project?.custom_address) return 'N/A'; + return formatAddress(project.custom_address).multiLine; + }, [project?.custom_address]); + + const lastSync = useMemo(() => { + return formatCrmTimestamp(project?.modified, { includeSeconds: true }) || 'N/A'; + }, [project?.modified]); + + const inverterProvider = project?.project_type || 'N/A'; + const emergencyContact = + project?.custom_mobile_phone_no || + project?.custom_email || + project?.customer || + 'N/A'; + + return ( +
+

+ {project?.project_name || siteId} +

+ + {loading ? ( +
+
+
+
+
+
+ ) : err ? ( +
Failed to load CRM: {err}
+ ) : !project ? ( +
No CRM project found for {siteId}.
+ ) : ( + <> +
+

Status:

+

{status}

+
+ +
+

Location:

+

{niceAddress}

+
+ +
+

Inverter Provider:

+

{inverterProvider}

+
+ +
+

Emergency Contact:

+

{emergencyContact}

+
+ +
+

Last Sync:

+

{lastSync}

+
+ + )} + + + View Dashboard + +
+ ); +}; + +export default SiteCard; -- 2.47.2 From 837aee67fcf3de16abf8c3ef4893e83ac691caa0 Mon Sep 17 00:00:00 2001 From: Syasya Date: Fri, 15 Aug 2025 10:43:33 +0800 Subject: [PATCH 07/12] login and register flow --- .../auth/components-auth-login-form.tsx | 126 ++++++----- .../auth/components-auth-register-form.tsx | 197 +++++++++++------- pages/api/login.ts | 32 ++- pages/api/register.ts | 33 ++- 4 files changed, 247 insertions(+), 141 deletions(-) diff --git a/components/auth/components-auth-login-form.tsx b/components/auth/components-auth-login-form.tsx index 0013f4e..4ba2449 100644 --- a/components/auth/components-auth-login-form.tsx +++ b/components/auth/components-auth-login-form.tsx @@ -2,67 +2,83 @@ import IconLockDots from '@/components/icon/icon-lock-dots'; import IconMail from '@/components/icon/icon-mail'; import { useRouter } from 'next/navigation'; -import { useState } from "react"; -import axios from "axios"; +import { useState } from 'react'; +import axios from 'axios'; import toast from 'react-hot-toast'; const ComponentsAuthLoginForm = () => { - const [email, setEmail] = useState("") - const [password, setPassword] = useState("") - const [loading, setLoading] = useState(false) - const router = useRouter() + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [loading, setLoading] = useState(false); + const router = useRouter(); - const submitForm = async (e: React.FormEvent) => { - e.preventDefault() - - setLoading(true) - try { - const res = await axios.post(`${process.env.NEXT_PUBLIC_API_BASE_URL}/api/login`, { - email, - password, - }) - - localStorage.setItem("token", res.data.token) - - toast.success("Login successful!") - router.push("/") - } catch (err: any) { - console.error("Login error:", err) - toast.error(err.response?.data?.error || "Invalid credentials") - } finally { - setLoading(false) - } + const submitForm = async (e: React.FormEvent) => { + e.preventDefault(); + setLoading(true); + try { + const res = await axios.post('/api/login', { email, password }); + toast.success(res.data?.message || 'Login successful!'); + router.push('/adminDashboard'); + // token cookie is already set by the server: + } catch (err: any) { + console.error('Login error:', err); + const msg = + err?.response?.data?.message || + err?.message || + 'Invalid credentials'; + toast.error(msg); + } finally { + setLoading(false); } + }; - return ( -
-
- -
- setEmail(e.target.value)} placeholder="Enter Email" className="form-input ps-10 placeholder:text-white-dark" /> - - - -
-
-
- -
- setPassword(e.target.value)} required placeholder="Enter Password" className="form-input ps-10 placeholder:text-white-dark" /> - - - -
-
- -
- ); + return ( +
+
+ +
+ setEmail(e.target.value)} + placeholder="Enter Email" + className="form-input ps-10 placeholder:text-white-dark" + required + /> + + + +
+
+
+ +
+ setPassword(e.target.value)} + required + placeholder="Enter Password" + className="form-input ps-10 placeholder:text-white-dark" + minLength={8} + /> + + + +
+
+ +
+ ); }; export default ComponentsAuthLoginForm; + diff --git a/components/auth/components-auth-register-form.tsx b/components/auth/components-auth-register-form.tsx index f5c2313..c48cfce 100644 --- a/components/auth/components-auth-register-form.tsx +++ b/components/auth/components-auth-register-form.tsx @@ -1,74 +1,131 @@ -'use client'; -import IconLockDots from '@/components/icon/icon-lock-dots'; -import IconMail from '@/components/icon/icon-mail'; -import IconUser from '@/components/icon/icon-user'; -import axios from 'axios'; -import { useRouter } from 'next/navigation'; -import { useState } from "react"; -import React from 'react'; -import toast from 'react-hot-toast'; +// components/auth/components-auth-register-form.tsx +"use client"; -const ComponentsAuthRegisterForm = () => { - const [email, setEmail] = useState("") - const [password, setPassword] = useState("") - const [loading, setLoading] = useState(false) - const router = useRouter() +import * as React from "react"; +import { useRouter } from "next/navigation"; - const submitForm = async(e: any) => { - e.preventDefault() - - setLoading(true) - try { - const res = await axios.post(`${process.env.NEXT_PUBLIC_API_BASE_URL}/api/register`, { - email, - password, - }) - - localStorage.setItem("token", res.data.token) - - toast.success("Register successful!") - router.push("/") - } catch (err: any) { - console.error("Register error:", err) - toast.error(err.response?.data?.error || "Something went wrong") - } finally { - setLoading(false) - } - }; - return ( -
- {/*
- -
- - - - -
-
*/} -
- -
- setEmail(e.target.value)} placeholder="Enter Email" className="form-input ps-10 placeholder:text-white-dark" /> - - - -
-
-
- -
- setPassword(e.target.value)} required placeholder="Enter Password" className="form-input ps-10 placeholder:text-white-dark" /> - - - -
-
- -
- ); +type Props = { + redirectTo?: string; // optional override }; -export default ComponentsAuthRegisterForm; +export default function ComponentsAuthRegisterForm({ redirectTo = "/dashboard" }: Props) { + const router = useRouter(); + const [email, setEmail] = React.useState(""); + const [password, setPassword] = React.useState(""); + const [confirm, setConfirm] = React.useState(""); + const [loading, setLoading] = React.useState(false); + const [error, setError] = React.useState(null); + + async function onSubmit(e: React.FormEvent) { + e.preventDefault(); + setError(null); + + if (!email.trim() || !password) { + setError("Please fill in all fields."); + return; + } + if (password.length < 8) { + setError("Password must be at least 8 characters."); + return; + } + if (password !== confirm) { + setError("Passwords do not match."); + return; + } + + try { + setLoading(true); + const res = await fetch("/api/register", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ email, password }), + }); + + const data = await res.json(); + + if (!res.ok) { + setError(data?.message || "Registration failed."); + return; + } + + // Cookie is set by API; just route away + router.replace(redirectTo); + } catch (err) { + setError("Network error. Please try again."); + } finally { + setLoading(false); + } + } + + return ( +
+
+ + setEmail(e.target.value)} + disabled={loading} + required + /> +
+ +
+ + setPassword(e.target.value)} + disabled={loading} + required + minLength={8} + /> +
+ +
+ + setConfirm(e.target.value)} + disabled={loading} + required + minLength={8} + /> +
+ + {error && ( +

+ {error} +

+ )} + + +
+ ); +} + diff --git a/pages/api/login.ts b/pages/api/login.ts index 2a5c6a6..8f3adff 100644 --- a/pages/api/login.ts +++ b/pages/api/login.ts @@ -1,15 +1,18 @@ -import { NextApiRequest, NextApiResponse } from "next"; +// pages/api/login.ts +import type { NextApiRequest, NextApiResponse } from "next"; import { PrismaClient } from "@prisma/client"; import bcrypt from "bcrypt"; import jwt from "jsonwebtoken"; -const prisma = new PrismaClient() +const prisma = new PrismaClient(); const SECRET_KEY = process.env.JWT_SECRET as string; export default async function handler(req: NextApiRequest, res: NextApiResponse) { - if (req.method !== "POST") return res.status(405).json({ message: "Method not allowed" }); + if (req.method !== "POST") return res.status(405).json({ message: "Method not allowed" }); - const { email, password } = req.body; + try { + const { email, password } = req.body as { email?: string; password?: string }; + if (!email || !password) return res.status(400).json({ message: "Email and password are required" }); const user = await prisma.user.findUnique({ where: { email } }); if (!user) return res.status(401).json({ message: "Invalid credentials" }); @@ -17,8 +20,23 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) return res.status(401).json({ message: "Invalid credentials" }); - const token = jwt.sign({ email: user.email }, SECRET_KEY, { expiresIn: "1d" }); + const token = jwt.sign({ sub: user.id, email: user.email }, SECRET_KEY, { expiresIn: "1d" }); - res.setHeader("Set-Cookie", `token=${token}; HttpOnly; Path=/; Secure`); - res.json({ token }); + const isProd = process.env.NODE_ENV === "production"; + const cookie = [ + `token=${token}`, + "HttpOnly", + "Path=/", + "SameSite=Strict", + `Max-Age=${60 * 60 * 24}`, // 1 day + isProd ? "Secure" : "", // only secure in prod + ].filter(Boolean).join("; "); + + res.setHeader("Set-Cookie", cookie); + return res.status(200).json({ message: "Login successful" }); + } catch (e) { + console.error(e); + return res.status(500).json({ message: "Something went wrong" }); + } } + diff --git a/pages/api/register.ts b/pages/api/register.ts index 3f66d80..0ab2b75 100644 --- a/pages/api/register.ts +++ b/pages/api/register.ts @@ -1,27 +1,42 @@ -import { NextApiRequest, NextApiResponse } from "next"; +// pages/api/register.ts +import type { NextApiRequest, NextApiResponse } from "next"; import { PrismaClient } from "@prisma/client"; import bcrypt from "bcrypt"; import jwt from "jsonwebtoken"; -const prisma = new PrismaClient() +const prisma = new PrismaClient(); const SECRET_KEY = process.env.JWT_SECRET as string; - export default async function handler(req: NextApiRequest, res: NextApiResponse) { - if (req.method !== "POST") return res.status(405).json({ message: "Method not allowed" }); + if (req.method !== "POST") return res.status(405).json({ message: "Method not allowed" }); - const { email, password } = req.body; + try { + const { email, password } = req.body as { email?: string; password?: string }; + + if (!email || !password) return res.status(400).json({ message: "Email and password are required" }); const existingUser = await prisma.user.findUnique({ where: { email } }); if (existingUser) return res.status(400).json({ message: "User already exists" }); const hashedPassword = await bcrypt.hash(password, 10); const user = await prisma.user.create({ - data: { email, password: hashedPassword }, + data: { email, password: hashedPassword }, + select: { id: true, email: true, createdAt: true }, // do NOT expose password }); - const token = jwt.sign({ email: user.email }, SECRET_KEY, { expiresIn: "1d" }); + const token = jwt.sign({ sub: user.id, email: user.email }, SECRET_KEY, { expiresIn: "1d" }); - res.setHeader("Set-Cookie", `token=${token}; HttpOnly; Path=/; Secure`); - res.status(201).json({ message: "User registered", user, token }); + // Set a secure, httpOnly cookie + const maxAge = 60 * 60 * 24; // 1 day + res.setHeader( + "Set-Cookie", + `token=${token}; HttpOnly; Path=/; Max-Age=${maxAge}; SameSite=Strict; Secure` + ); + + return res.status(201).json({ message: "User registered", user }); + } catch (err) { + console.error(err); + return res.status(500).json({ message: "Something went wrong" }); + } } + -- 2.47.2 From 0885771131da9f5811ef1292312cbc30c98422b8 Mon Sep 17 00:00:00 2001 From: Syasya Date: Mon, 18 Aug 2025 12:42:20 +0800 Subject: [PATCH 08/12] register/login cookie --- .../auth/components-auth-login-form.tsx | 1 + components/dropdown.tsx | 100 +- components/layouts/header.tsx | 390 +- package-lock.json | 5891 ++++++++++++++++- package.json | 2 + pages/api/auth/me.ts | 49 +- pages/api/login.ts | 2 +- pages/api/logout.ts | 20 + pages/api/register.ts | 2 +- styles/tailwind.css | 1 + 10 files changed, 6036 insertions(+), 422 deletions(-) create mode 100644 pages/api/logout.ts diff --git a/components/auth/components-auth-login-form.tsx b/components/auth/components-auth-login-form.tsx index 4ba2449..b478c44 100644 --- a/components/auth/components-auth-login-form.tsx +++ b/components/auth/components-auth-login-form.tsx @@ -19,6 +19,7 @@ const ComponentsAuthLoginForm = () => { const res = await axios.post('/api/login', { email, password }); toast.success(res.data?.message || 'Login successful!'); router.push('/adminDashboard'); + router.refresh(); // token cookie is already set by the server: } catch (err: any) { console.error('Login error:', err); diff --git a/components/dropdown.tsx b/components/dropdown.tsx index 30bb517..9f141d5 100644 --- a/components/dropdown.tsx +++ b/components/dropdown.tsx @@ -1,57 +1,73 @@ +// Dropdown.tsx 'use client'; import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react'; import { usePopper } from 'react-popper'; +import type { ReactNode } from 'react'; -const Dropdown = (props: any, forwardedRef: any) => { - const [visibility, setVisibility] = useState(false); +type DropdownProps = { + button?: ReactNode; // 👈 make optional + children: ReactNode; + btnClassName?: string; + placement?: any; + offset?: [number, number]; + panelClassName?: string; + closeOnItemClick?: boolean; +}; - const referenceRef = useRef(); - const popperRef = useRef(); +const Dropdown = (props: DropdownProps, forwardedRef: any) => { + const [visible, setVisible] = useState(false); + const referenceRef = useRef(null); + const popperRef = useRef(null); - const { styles, attributes } = usePopper(referenceRef.current, popperRef.current, { - placement: props.placement || 'bottom-end', - modifiers: [ - { - name: 'offset', - options: { - offset: props.offset || [0], - }, - }, - ], - }); + const { styles, attributes } = usePopper(referenceRef.current, popperRef.current, { + placement: props.placement || 'bottom-end', + modifiers: [{ name: 'offset', options: { offset: props.offset ?? [0, 8] } }], + }); - const handleDocumentClick = (event: any) => { - if (referenceRef.current.contains(event.target) || popperRef.current.contains(event.target)) { - return; - } - - setVisibility(false); + useEffect(() => { + const onDoc = (e: MouseEvent) => { + if (!referenceRef.current || !popperRef.current) return; + if (referenceRef.current.contains(e.target as Node)) return; + if (popperRef.current.contains(e.target as Node)) return; + setVisible(false); }; + document.addEventListener('mousedown', onDoc); + return () => document.removeEventListener('mousedown', onDoc); + }, []); - useEffect(() => { - document.addEventListener('mousedown', handleDocumentClick); - return () => { - document.removeEventListener('mousedown', handleDocumentClick); - }; - }, []); + useImperativeHandle(forwardedRef, () => ({ close: () => setVisible(false) })); - useImperativeHandle(forwardedRef, () => ({ - close() { - setVisibility(false); - }, - })); + const defaultButton = ( + + ); - return ( - <> - + return ( + <> + -
setVisibility(!visibility)}> - {visibility && props.children} -
- - ); +
+ {visible && ( +
+ {props.children} +
+ )} +
+ + ); }; export default forwardRef(Dropdown); + + diff --git a/components/layouts/header.tsx b/components/layouts/header.tsx index b0f2db0..2183ff1 100644 --- a/components/layouts/header.tsx +++ b/components/layouts/header.tsx @@ -6,251 +6,171 @@ import { IRootState } from '@/store'; import { toggleTheme, toggleSidebar, toggleRTL } from '@/store/themeConfigSlice'; import Dropdown from '@/components/dropdown'; import IconMenu from '@/components/icon/icon-menu'; -import IconCalendar from '@/components/icon/icon-calendar'; -import IconEdit from '@/components/icon/icon-edit'; -import IconChatNotification from '@/components/icon/icon-chat-notification'; -import IconSearch from '@/components/icon/icon-search'; -import IconXCircle from '@/components/icon/icon-x-circle'; import IconSun from '@/components/icon/icon-sun'; import IconMoon from '@/components/icon/icon-moon'; -import IconLaptop from '@/components/icon/icon-laptop'; -import IconMailDot from '@/components/icon/icon-mail-dot'; -import IconArrowLeft from '@/components/icon/icon-arrow-left'; -import IconInfoCircle from '@/components/icon/icon-info-circle'; -import IconBellBing from '@/components/icon/icon-bell-bing'; import IconUser from '@/components/icon/icon-user'; import IconMail from '@/components/icon/icon-mail'; import IconLockDots from '@/components/icon/icon-lock-dots'; import IconLogout from '@/components/icon/icon-logout'; -import IconMenuDashboard from '@/components/icon/menu/icon-menu-dashboard'; -import IconCaretDown from '@/components/icon/icon-caret-down'; -import IconMenuApps from '@/components/icon/menu/icon-menu-apps'; -import IconMenuComponents from '@/components/icon/menu/icon-menu-components'; -import IconMenuElements from '@/components/icon/menu/icon-menu-elements'; -import IconMenuDatatables from '@/components/icon/menu/icon-menu-datatables'; -import IconMenuForms from '@/components/icon/menu/icon-menu-forms'; -import IconMenuPages from '@/components/icon/menu/icon-menu-pages'; -import IconMenuMore from '@/components/icon/menu/icon-menu-more'; import { usePathname, useRouter } from 'next/navigation'; -import { getTranslation } from '@/i18n'; -const Header = () => { - const pathname = usePathname(); - const dispatch = useDispatch(); - const router = useRouter(); - const { t, i18n } = getTranslation(); +type UserData = { id: string; email: string; createdAt: string }; - useEffect(() => { - const selector = document.querySelector('ul.horizontal-menu a[href="' + window.location.pathname + '"]'); - if (selector) { - const all: any = document.querySelectorAll('ul.horizontal-menu .nav-link.active'); - for (let i = 0; i < all.length; i++) { - all[0]?.classList.remove('active'); - } +export default function Header() { + const pathname = usePathname(); + const dispatch = useDispatch(); + const router = useRouter(); + const themeConfig = useSelector((state: IRootState) => state.themeConfig); + const isRtl = themeConfig.rtlClass === 'rtl'; - let allLinks = document.querySelectorAll('ul.horizontal-menu a.active'); - for (let i = 0; i < allLinks.length; i++) { - const element = allLinks[i]; - element?.classList.remove('active'); - } - selector?.classList.add('active'); + const [user, setUser] = useState(null); + const [loadingUser, setLoadingUser] = useState(true); - const ul: any = selector.closest('ul.sub-menu'); - if (ul) { - let ele: any = ul.closest('li.menu').querySelectorAll('.nav-link'); - if (ele) { - ele = ele[0]; - setTimeout(() => { - ele?.classList.add('active'); - }); - } - } - } - }, [pathname]); - - const isRtl = useSelector((state: IRootState) => state.themeConfig.rtlClass) === 'rtl'; - - const themeConfig = useSelector((state: IRootState) => state.themeConfig); - const setLocale = (flag: string) => { - if (flag.toLowerCase() === 'ae') { - dispatch(toggleRTL('rtl')); - } else { - dispatch(toggleRTL('ltr')); - } - router.refresh(); - }; - - function createMarkup(messages: any) { - return { __html: messages }; - } - const [messages, setMessages] = useState([ - { - id: 1, - image: '', - title: 'Congratulations!', - message: 'Your OS has been updated.', - time: '1hr', - }, - { - id: 2, - image: '', - title: 'Did you know?', - message: 'You can switch between artboards.', - time: '2hr', - }, - { - id: 3, - image: ' ', - title: 'Something went wrong!', - message: 'Send Reposrt', - time: '2days', - }, - { - id: 4, - image: ' ', - title: 'Warning', - message: 'Your password strength is low.', - time: '5days', - }, - ]); - - const removeMessage = (value: number) => { - setMessages(messages.filter((user) => user.id !== value)); - }; - - const [notifications, setNotifications] = useState([ - { - id: 1, - profile: 'user-profile.jpeg', - message: 'John Doeinvite you to Prototyping', - time: '45 min ago', - }, - { - id: 2, - profile: 'profile-34.jpeg', - message: 'Adam Nolanmentioned you to UX Basics', - time: '9h Ago', - }, - { - id: 3, - profile: 'profile-16.jpeg', - message: 'Anna MorganUpload a file', - time: '9h Ago', - }, - ]); - - const removeNotification = (value: number) => { - setNotifications(notifications.filter((user) => user.id !== value)); - }; - - const [search, setSearch] = useState(false); - - return ( -
-
-
-
- - logo - Rooftop Energy - - -
- -
- - {/* ------------------- Start Theme Switch ------------------- */} -
- {themeConfig.theme === 'light' ? ( - - ) : ( - '' - )} - {themeConfig.theme === 'dark' && ( - - )} -
- {/* ------------------- End Theme Switch ------------------- */} - - -
- } - > -
    -
  • -
    - userProfile -
    -

    - John Doe - Pro -

    - -
    -
    -
  • -
  • - - - Profile - -
  • -
  • - - - Inbox - -
  • -
  • - - - Lock Screen - -
  • -
  • - - - Sign Out - -
  • -
-
-
-
-
- - -
-
+ // Highlight active menu (your original effect) + useEffect(() => { + const selector = document.querySelector( + 'ul.horizontal-menu a[href="' + window.location.pathname + '"]' ); -}; + if (selector) { + document + .querySelectorAll('ul.horizontal-menu .nav-link.active') + .forEach((el) => el.classList.remove('active')); + document + .querySelectorAll('ul.horizontal-menu a.active') + .forEach((el) => el.classList.remove('active')); + selector.classList.add('active'); + const ul: any = selector.closest('ul.sub-menu'); + if (ul) { + const ele: any = ul.closest('li.menu')?.querySelector('.nav-link'); + setTimeout(() => ele?.classList.add('active')); + } + } + }, [pathname]); -export default Header; + async function loadUser() { + try { + const res = await fetch('/api/auth/me', { + method: 'GET', + credentials: 'include', // send cookie + cache: 'no-store', // avoid stale cached responses + }); + if (!res.ok) throw new Error(); + const data = await res.json(); + setUser(data.user); + } catch { + setUser(null); + } finally { + setLoadingUser(false); + } +} + +useEffect(() => { + setLoadingUser(true); + loadUser(); + // eslint-disable-next-line react-hooks/exhaustive-deps +}, [pathname]); // re-fetch on route change (after login redirect) + + const handleLogout = async () => { + await fetch('/api/auth/logout', { method: 'POST' }); + setUser(null); + router.push('/login'); // go to login + }; + + return ( +
+
+
+ {/* Logo */} +
+ + logo + + Rooftop Energy + + + +
+ + {/* Right-side actions */} +
+ {/* Theme toggle */} + {themeConfig.theme === 'light' ? ( + + ) : ( + + )} + + {/* User dropdown */} +
+ {loadingUser ? ( +
+ ) : user ? ( + + +
+ } + > +
    {/* make sure this stays transparent */} +
  • +
    +

    {user.email}

    +
    +
  • +
  • + + Profile + +
  • +
  • + + Inbox + +
  • +
  • + + Lock Screen + +
  • +
  • + +
  • +
+ + ) : ( + + Sign In + + )} +
+
+
+
+
+ ); +} diff --git a/package-lock.json b/package-lock.json index a9ef5f7..dba53c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@emotion/react": "^11.10.6", "@headlessui/react": "^1.7.8", + "@heroui/react": "^2.8.2", "@prisma/client": "^6.8.2", "@reduxjs/toolkit": "^1.9.1", "@tippyjs/react": "^4.2.6", @@ -26,6 +27,7 @@ "date-fns": "^4.1.0", "eslint": "8.32.0", "eslint-config-next": "13.1.2", + "framer-motion": "^12.23.12", "he": "^1.2.0", "html2canvas": "^1.4.1", "i18next": "^22.4.10", @@ -67,7 +69,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, "engines": { "node": ">=10" }, @@ -390,6 +391,57 @@ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", "license": "MIT" }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.4.tgz", + "integrity": "sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==", + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "2.2.7", + "@formatjs/intl-localematcher": "0.6.1", + "decimal.js": "^10.4.3", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz", + "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.2.tgz", + "integrity": "sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==", + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/icu-skeleton-parser": "1.8.14", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.14.tgz", + "integrity": "sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==", + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.4", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.1.tgz", + "integrity": "sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/@headlessui/react": { "version": "1.7.8", "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.8.tgz", @@ -405,6 +457,1616 @@ "react-dom": "^16 || ^17 || ^18" } }, + "node_modules/@heroui/aria-utils": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/aria-utils/-/aria-utils-2.2.21.tgz", + "integrity": "sha512-6R01UEqgOOlD+MgizCQfsP2yK8e7RAHhWM/MtXHSCjWG7Ud+Ys1HlZPaH8+BB1P6UqtHZScZQevUFq975YJ57Q==", + "license": "MIT", + "dependencies": { + "@heroui/system": "2.4.20", + "@react-aria/utils": "3.30.0", + "@react-stately/collections": "3.12.6", + "@react-types/overlays": "3.9.0", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/dom-animation": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@heroui/dom-animation/-/dom-animation-2.1.10.tgz", + "integrity": "sha512-dt+0xdVPbORwNvFT5pnqV2ULLlSgOJeqlg/DMo97s9RWeD6rD4VedNY90c8C9meqWqGegQYBQ9ztsfX32mGEPA==", + "license": "MIT", + "peerDependencies": { + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1" + } + }, + "node_modules/@heroui/form": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/@heroui/form/-/form-2.1.24.tgz", + "integrity": "sha512-zA6eeRXz8DS0kb8VMsiuRQOs4mtVmKgalNZ91xJSqD68CmdE4WI5Ig3rxB9jdl/fd1VVkO853GPp5mzizmNjvA==", + "license": "MIT", + "dependencies": { + "@heroui/shared-utils": "2.1.10", + "@heroui/system": "2.4.20", + "@heroui/theme": "2.4.20", + "@react-stately/form": "3.2.0", + "@react-types/form": "3.7.14", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@heroui/form/node_modules/@heroui/theme": { + "version": "2.4.20", + "resolved": "https://registry.npmjs.org/@heroui/theme/-/theme-2.4.20.tgz", + "integrity": "sha512-wJdsz7XS9M7xbNd0d1EaaK5dCZIEOSI7eCr5A6f5aM48mtqLaXfsj3gYsfCy7GkQAvtKWuicwKe5D94Xoma6GA==", + "license": "MIT", + "dependencies": { + "@heroui/shared-utils": "2.1.10", + "clsx": "^1.2.1", + "color": "^4.2.3", + "color2k": "^2.0.3", + "deepmerge": "4.3.1", + "flat": "^5.0.2", + "tailwind-merge": "3.3.1", + "tailwind-variants": "2.0.1" + }, + "peerDependencies": { + "tailwindcss": ">=4.0.0" + } + }, + "node_modules/@heroui/form/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@heroui/form/node_modules/tailwindcss": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", + "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", + "license": "MIT", + "peer": true + }, + "node_modules/@heroui/framer-utils": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/@heroui/framer-utils/-/framer-utils-2.1.20.tgz", + "integrity": "sha512-DigZrwJp3+ay7rnjIW4ZGXen4QmxDgdvg6xvBK5T6H3JLN6NN+F7kknjK+kFh7tOb1NzuanguribvsufGqMe4w==", + "license": "MIT", + "dependencies": { + "@heroui/system": "2.4.20", + "@heroui/use-measure": "2.1.8" + }, + "peerDependencies": { + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@heroui/react/-/react-2.8.2.tgz", + "integrity": "sha512-Z0lG7N/jyCxRhh6CWb+WFEjbA6wyutYwAYyDAq5uOsGjRKUpAv5zm6ByNdS1YqrP4k8sp0g5HijXbLThQyR9BQ==", + "license": "MIT", + "dependencies": { + "@heroui/accordion": "2.2.21", + "@heroui/alert": "2.2.24", + "@heroui/autocomplete": "2.3.26", + "@heroui/avatar": "2.2.20", + "@heroui/badge": "2.2.15", + "@heroui/breadcrumbs": "2.2.20", + "@heroui/button": "2.2.24", + "@heroui/calendar": "2.2.24", + "@heroui/card": "2.2.23", + "@heroui/checkbox": "2.3.24", + "@heroui/chip": "2.2.20", + "@heroui/code": "2.2.18", + "@heroui/date-input": "2.3.24", + "@heroui/date-picker": "2.3.25", + "@heroui/divider": "2.2.17", + "@heroui/drawer": "2.2.21", + "@heroui/dropdown": "2.3.24", + "@heroui/form": "2.1.24", + "@heroui/framer-utils": "2.1.20", + "@heroui/image": "2.2.15", + "@heroui/input": "2.4.25", + "@heroui/input-otp": "2.1.24", + "@heroui/kbd": "2.2.19", + "@heroui/link": "2.2.21", + "@heroui/listbox": "2.3.23", + "@heroui/menu": "2.2.23", + "@heroui/modal": "2.2.21", + "@heroui/navbar": "2.2.22", + "@heroui/number-input": "2.0.15", + "@heroui/pagination": "2.2.22", + "@heroui/popover": "2.3.24", + "@heroui/progress": "2.2.20", + "@heroui/radio": "2.3.24", + "@heroui/ripple": "2.2.18", + "@heroui/scroll-shadow": "2.3.16", + "@heroui/select": "2.4.25", + "@heroui/skeleton": "2.2.15", + "@heroui/slider": "2.4.21", + "@heroui/snippet": "2.2.25", + "@heroui/spacer": "2.2.18", + "@heroui/spinner": "2.2.21", + "@heroui/switch": "2.2.22", + "@heroui/system": "2.4.20", + "@heroui/table": "2.2.24", + "@heroui/tabs": "2.2.21", + "@heroui/theme": "2.4.20", + "@heroui/toast": "2.0.14", + "@heroui/tooltip": "2.2.21", + "@heroui/user": "2.2.20", + "@react-aria/visually-hidden": "3.8.26" + }, + "peerDependencies": { + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react-rsc-utils": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@heroui/react-rsc-utils/-/react-rsc-utils-2.1.9.tgz", + "integrity": "sha512-e77OEjNCmQxE9/pnLDDb93qWkX58/CcgIqdNAczT/zUP+a48NxGq2A2WRimvc1uviwaNL2StriE2DmyZPyYW7Q==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react-utils": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@heroui/react-utils/-/react-utils-2.1.12.tgz", + "integrity": "sha512-D+EYFMtBuWGrtsw+CklgAHtQfT17wZcjmKIvUMGOjAFFSLHG9NJd7yOrsZGk90OuJVQ3O1Gj3MfchEmUXidxyw==", + "license": "MIT", + "dependencies": { + "@heroui/react-rsc-utils": "2.1.9", + "@heroui/shared-utils": "2.1.10" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/accordion": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/accordion/-/accordion-2.2.21.tgz", + "integrity": "sha512-B873BeTgzxsq9+85/d0BCKFus4llxI6OJBJt+dLXslYdijzfrRhhA7vWzvhOsV3kIHPcTrUpS4iUDO/UhR/EEA==", + "license": "MIT", + "dependencies": { + "@heroui/aria-utils": "2.2.21", + "@heroui/divider": "2.2.17", + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-accordion": "2.2.16", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-stately/tree": "3.9.1", + "@react-types/accordion": "3.0.0-alpha.26", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/alert": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/@heroui/alert/-/alert-2.2.24.tgz", + "integrity": "sha512-Yec/mykI3n14uJaCP4RTR6iXIa3cFsVF7dt51xFkb0X/h6fTIUiSwnH7hM7vacAHpq5letFcm5XNMj316R2PpA==", + "license": "MIT", + "dependencies": { + "@heroui/button": "2.2.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@react-stately/utils": "3.10.8" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.19", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/autocomplete": { + "version": "2.3.26", + "resolved": "https://registry.npmjs.org/@heroui/autocomplete/-/autocomplete-2.3.26.tgz", + "integrity": "sha512-njdBN9mIM3zUJ2EvSjBBdm8tjRgL5FFQrsgR/OWCdLGui1n1A7h/bF6o5AWZkcDDX5jP1hsGZDtQ+28frorjtw==", + "license": "MIT", + "dependencies": { + "@heroui/aria-utils": "2.2.21", + "@heroui/button": "2.2.24", + "@heroui/form": "2.1.24", + "@heroui/input": "2.4.25", + "@heroui/listbox": "2.3.23", + "@heroui/popover": "2.3.24", + "@heroui/react-utils": "2.1.12", + "@heroui/scroll-shadow": "2.3.16", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/combobox": "3.13.0", + "@react-aria/i18n": "3.12.11", + "@react-stately/combobox": "3.11.0", + "@react-types/combobox": "3.13.7", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/avatar": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/@heroui/avatar/-/avatar-2.2.20.tgz", + "integrity": "sha512-wqbgEQQwEyG42EtpiVdy75JsHiJspC9bBusZYB+LIzV3hMO7Gt70rD4W6TShO+L7VA/S1UfHqGL06oYUC7K7ew==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-image": "2.1.11", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/badge": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@heroui/badge/-/badge-2.2.15.tgz", + "integrity": "sha512-wdxMBH+FkfqPZrv2FP9aqenKG5EeOH2i9mSopMHP+o4ZaWW5lmKYqjN1lQ5DXCO4XaDtY4jOWEExp4UJ2e7rKg==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/breadcrumbs": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/@heroui/breadcrumbs/-/breadcrumbs-2.2.20.tgz", + "integrity": "sha512-lH3MykNKF91bbgXRamtKhfnkzmMyfbqErWgnRVVH4j0ae5I8lWuWcmrDlOIrfhzQf+6xv6Mt2uUE2074FOwYmw==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@react-aria/breadcrumbs": "3.5.27", + "@react-aria/focus": "3.21.0", + "@react-types/breadcrumbs": "3.7.15" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/button": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/@heroui/button/-/button-2.2.24.tgz", + "integrity": "sha512-PR4CZaDSSAGYPv7uUNRc9FAJkNtMgcNUdnD0qxQoJDQoB/C6LLLgROqc/iHaKX9aEH5JYIISbMxTIcJtY2Zk2A==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/ripple": "2.2.18", + "@heroui/shared-utils": "2.1.10", + "@heroui/spinner": "2.2.21", + "@heroui/use-aria-button": "2.2.18", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/calendar": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/@heroui/calendar/-/calendar-2.2.24.tgz", + "integrity": "sha512-zUJ/m8uAVEn53FcKN6B2a+BtjXAsSicu8M667aKyaGgVFwOTWgH5miFvD/xLyFu+gAF/LBrC6ysDQMdHdiKKBQ==", + "license": "MIT", + "dependencies": { + "@heroui/button": "2.2.24", + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-button": "2.2.18", + "@internationalized/date": "3.8.2", + "@react-aria/calendar": "3.9.0", + "@react-aria/focus": "3.21.0", + "@react-aria/i18n": "3.12.11", + "@react-aria/interactions": "3.25.4", + "@react-aria/visually-hidden": "3.8.26", + "@react-stately/calendar": "3.8.3", + "@react-stately/utils": "3.10.8", + "@react-types/button": "3.13.0", + "@react-types/calendar": "3.7.3", + "@react-types/shared": "3.31.0", + "scroll-into-view-if-needed": "3.0.10" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/card": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/@heroui/card/-/card-2.2.23.tgz", + "integrity": "sha512-oMmZNr2/mGp/S+Ct8iyzAp4H+tLuT3G0dgHyRie7txj8en79RAy+yRPBYdSt3OpIWM/Zv9un3Dnxgmi/UGCo+A==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/ripple": "2.2.18", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-button": "2.2.18", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/checkbox": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/@heroui/checkbox/-/checkbox-2.3.24.tgz", + "integrity": "sha512-H/bcpYGeWB9WFhkkOPojO4ONrz5GIMzfAMYdaKOUFtLVl7B9yVca7HaKdNryAFtNSBd/QQAm/an7gh/OFxIgew==", + "license": "MIT", + "dependencies": { + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-callback-ref": "2.1.8", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/checkbox": "3.16.0", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-stately/checkbox": "3.7.0", + "@react-stately/toggle": "3.9.0", + "@react-types/checkbox": "3.10.0", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/chip": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/@heroui/chip/-/chip-2.2.20.tgz", + "integrity": "sha512-BTYXeMcSeBPOZEFk4MDGTrcML/NLYmQn+xdlSdiv9b2dM/gEq1hpTizt+kpvNH7kF6BSUxM6zJearIGUZ7gf5w==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/code": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/@heroui/code/-/code-2.2.18.tgz", + "integrity": "sha512-e8+5LoJw6GQs9ASlAjdHG/Ksgiu9AyPfmf6ElP0VNXuRbXEtiOO5gXJxxh81bxz05HQaQyL/mQZKqnxf+Zb6bA==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/system-rsc": "2.3.17" + }, + "peerDependencies": { + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/date-input": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/@heroui/date-input/-/date-input-2.3.24.tgz", + "integrity": "sha512-K1OFu8vv3oEgQ9GV2ipB+tJOsU/0+DsKWDiKiAISMt4OXilybncm2SrR05M5D36BM0jm5gofnNN7geMYBbhngQ==", + "license": "MIT", + "dependencies": { + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@internationalized/date": "3.8.2", + "@react-aria/datepicker": "3.15.0", + "@react-aria/i18n": "3.12.11", + "@react-stately/datepicker": "3.15.0", + "@react-types/datepicker": "3.13.0", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/date-picker": { + "version": "2.3.25", + "resolved": "https://registry.npmjs.org/@heroui/date-picker/-/date-picker-2.3.25.tgz", + "integrity": "sha512-UHnn/RDHF4vVZcJ54U8hArknYcmEGyeNbhRNVtXKcRWQgrA7gi/S5ng9m8Wi/j+SbWK7KiPdVSwlk/1PQr5Vdw==", + "license": "MIT", + "dependencies": { + "@heroui/aria-utils": "2.2.21", + "@heroui/button": "2.2.24", + "@heroui/calendar": "2.2.24", + "@heroui/date-input": "2.3.24", + "@heroui/form": "2.1.24", + "@heroui/popover": "2.3.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@internationalized/date": "3.8.2", + "@react-aria/datepicker": "3.15.0", + "@react-aria/i18n": "3.12.11", + "@react-stately/datepicker": "3.15.0", + "@react-stately/utils": "3.10.8", + "@react-types/datepicker": "3.13.0", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/divider": { + "version": "2.2.17", + "resolved": "https://registry.npmjs.org/@heroui/divider/-/divider-2.2.17.tgz", + "integrity": "sha512-/6u3mo3TLGOsxYftuHUamfgDYZARsk7esKSxwEeSJ1ufIuo/+Z+yPpaTfe3WUvha0VuwTfyLN99+puqdoTU3zQ==", + "license": "MIT", + "dependencies": { + "@heroui/react-rsc-utils": "2.1.9", + "@heroui/system-rsc": "2.3.17", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/drawer": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/drawer/-/drawer-2.2.21.tgz", + "integrity": "sha512-pYFWOyIqX1gmMOsFxEfajWFjX32O1jDvei7Q9eHs4AVVw7DaeWtQUYovM/6p8yRp//X/bxNQpUhMvEFaIc/8yQ==", + "license": "MIT", + "dependencies": { + "@heroui/framer-utils": "2.1.20", + "@heroui/modal": "2.2.21", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/dropdown": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/@heroui/dropdown/-/dropdown-2.3.24.tgz", + "integrity": "sha512-xqvfCViiFW1jOqtRHvMT2mUe7FjTHPJswcyYL80ECRbToS5r9wYvljBgewzesm98l3d15ELGYr4dsqufqNJ9Cg==", + "license": "MIT", + "dependencies": { + "@heroui/aria-utils": "2.2.21", + "@heroui/menu": "2.2.23", + "@heroui/popover": "2.3.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@react-aria/focus": "3.21.0", + "@react-aria/menu": "3.19.0", + "@react-stately/menu": "3.9.6", + "@react-types/menu": "3.10.3" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/image": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@heroui/image/-/image-2.2.15.tgz", + "integrity": "sha512-7/DIVZJh2CIZuzoRW9/XVLRyLTWsqNFQgEknEAjGudAUxlcu1dJ8ZuFBVC55SfPIrXE7WuGoiG1Q0B1iwW65IA==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-image": "2.1.11" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/input": { + "version": "2.4.25", + "resolved": "https://registry.npmjs.org/@heroui/input/-/input-2.4.25.tgz", + "integrity": "sha512-k5qYabB2wBmRQvrbGb9gk/KjK97H11rzQyvGsJXdoRbRMxoDB2sczpG08IqY1ecHXQT5bHqJ3Qgh6q1ZN+MYxg==", + "license": "MIT", + "dependencies": { + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/textfield": "3.18.0", + "@react-stately/utils": "3.10.8", + "@react-types/shared": "3.31.0", + "@react-types/textfield": "3.12.4", + "react-textarea-autosize": "^8.5.3" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.19", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/input-otp": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/@heroui/input-otp/-/input-otp-2.1.24.tgz", + "integrity": "sha512-t8zT8mRt/pLR4u1Qw/eyVLCSSvgYehVVXbPor++SVtWAtNMpKp5GuY3CmKsxujZ2BJU8f2itVgHo0UryEXKdRg==", + "license": "MIT", + "dependencies": { + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-form-reset": "2.0.1", + "@react-aria/focus": "3.21.0", + "@react-aria/form": "3.1.0", + "@react-stately/form": "3.2.0", + "@react-stately/utils": "3.10.8", + "@react-types/textfield": "3.12.4", + "input-otp": "1.4.1" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/kbd": { + "version": "2.2.19", + "resolved": "https://registry.npmjs.org/@heroui/kbd/-/kbd-2.2.19.tgz", + "integrity": "sha512-PP8fMPRVMGqJU3T5ufyjPUrguBxNstdBLIqiwk4G6TXBTrTkfMxTYVNG+gvsB6tjzmVjPsHpv2IvCjG4arLojw==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/system-rsc": "2.3.17" + }, + "peerDependencies": { + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/link": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/link/-/link-2.2.21.tgz", + "integrity": "sha512-s2jUESfwx+dYvKjM/ct1XAl/hJcEdSykmOt/X9L5YSaGqhhaFzk1QvlUcz0Byu+WAN0OjxRZxAEbEV642IjNDw==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-link": "2.2.19", + "@react-aria/focus": "3.21.0", + "@react-types/link": "3.6.3" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/listbox": { + "version": "2.3.23", + "resolved": "https://registry.npmjs.org/@heroui/listbox/-/listbox-2.3.23.tgz", + "integrity": "sha512-8lZupiqN6J7mNR9gbpz8kDRIdInUXrXc+anInxSDGbL7z+PYgnJ+dqice2yJyRZy/8eT5ZpTdfdV/aw9DluNyA==", + "license": "MIT", + "dependencies": { + "@heroui/aria-utils": "2.2.21", + "@heroui/divider": "2.2.17", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-is-mobile": "2.2.12", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/listbox": "3.14.7", + "@react-stately/list": "3.12.4", + "@react-types/shared": "3.31.0", + "@tanstack/react-virtual": "3.11.3" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/menu": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/@heroui/menu/-/menu-2.2.23.tgz", + "integrity": "sha512-Q2X+7dGxiHmTDnlboOi757biHkbci4zpukMDIi7i2UzHdw1SraH/A2K7bUdGMP+7+KxwSDmj19e0/ZHV/TWtaQ==", + "license": "MIT", + "dependencies": { + "@heroui/aria-utils": "2.2.21", + "@heroui/divider": "2.2.17", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-is-mobile": "2.2.12", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/menu": "3.19.0", + "@react-stately/tree": "3.9.1", + "@react-types/menu": "3.10.3", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/modal": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/modal/-/modal-2.2.21.tgz", + "integrity": "sha512-VZDwDS+UnYrpCYvqkGTIlm9ADy7s8vvQo1ueLts7WCSYpMxWu6YDnJpkHnth2AyhEzdXGIskbMm96TZW5jwdAQ==", + "license": "MIT", + "dependencies": { + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-button": "2.2.18", + "@heroui/use-aria-modal-overlay": "2.2.17", + "@heroui/use-disclosure": "2.2.15", + "@heroui/use-draggable": "2.1.16", + "@heroui/use-viewport-size": "2.0.1", + "@react-aria/dialog": "3.5.28", + "@react-aria/focus": "3.21.0", + "@react-aria/overlays": "3.28.0", + "@react-stately/overlays": "3.6.18" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/navbar": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/@heroui/navbar/-/navbar-2.2.22.tgz", + "integrity": "sha512-EMeg18Y3RWQBf0EfSi9pYfCzMva60d0bD1JgZE6IkSjrHJp+iOu9d9y32MlSsUX0sUvjeowYuYeVwg80d9vJqA==", + "license": "MIT", + "dependencies": { + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-resize": "2.1.8", + "@heroui/use-scroll-position": "2.1.8", + "@react-aria/button": "3.14.0", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/overlays": "3.28.0", + "@react-stately/toggle": "3.9.0", + "@react-stately/utils": "3.10.8" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/number-input": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@heroui/number-input/-/number-input-2.0.15.tgz", + "integrity": "sha512-GSyHAxbVVfdrmcHzNoJlS4+rWTlRPugT0yHDDI8Yg+JjJ05PTPxEVeNrKnx7dwu3bs2yEreDhBDd5wt/IUZ0kQ==", + "license": "MIT", + "dependencies": { + "@heroui/button": "2.2.24", + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/focus": "3.21.0", + "@react-aria/i18n": "3.12.11", + "@react-aria/interactions": "3.25.4", + "@react-aria/numberfield": "3.12.0", + "@react-stately/numberfield": "3.10.0", + "@react-types/button": "3.13.0", + "@react-types/numberfield": "3.8.13", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.19", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/pagination": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/@heroui/pagination/-/pagination-2.2.22.tgz", + "integrity": "sha512-HKv4bBSIh+AFkr+mLOL+Qhdt6blL0AtMrAY/WXXTr7yMOKKZsGDBuTgANTgp2yw8z52gX9hm0xs0kZs/73noHA==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-intersection-observer": "2.2.14", + "@heroui/use-pagination": "2.2.16", + "@react-aria/focus": "3.21.0", + "@react-aria/i18n": "3.12.11", + "@react-aria/interactions": "3.25.4", + "@react-aria/utils": "3.30.0", + "scroll-into-view-if-needed": "3.0.10" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/popover": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/@heroui/popover/-/popover-2.3.24.tgz", + "integrity": "sha512-ZIVGgqg2RAeRisMNhtJEfOk+yvitk0t7RzcQxd6Has/XkNPXStWEmpjW9wI5P9/RPj76ix4fS7ZArQefX+VHUg==", + "license": "MIT", + "dependencies": { + "@heroui/aria-utils": "2.2.21", + "@heroui/button": "2.2.24", + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-button": "2.2.18", + "@heroui/use-aria-overlay": "2.0.2", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/dialog": "3.5.28", + "@react-aria/focus": "3.21.0", + "@react-aria/overlays": "3.28.0", + "@react-stately/overlays": "3.6.18", + "@react-types/overlays": "3.9.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/progress": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/@heroui/progress/-/progress-2.2.20.tgz", + "integrity": "sha512-TMnMh/TPGDPr2c91tcD5JyWRph74xENLcaV/jIihh9UZpKKLrzoU1rTCjKbqaK7Dz9y5fcgM8vVAZmf7SK3mWA==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-is-mounted": "2.1.8", + "@react-aria/progress": "3.4.25", + "@react-types/progress": "3.5.14" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/radio": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/@heroui/radio/-/radio-2.3.24.tgz", + "integrity": "sha512-IQ1cwsIAff1JvlpqK5El/b2z6JTDqWK8XiTkElvEy4QkY29uIINkYy6kXqbKyZx14pKN0ILou6Z/iR8QUq304g==", + "license": "MIT", + "dependencies": { + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/radio": "3.12.0", + "@react-aria/visually-hidden": "3.8.26", + "@react-stately/radio": "3.11.0", + "@react-types/radio": "3.9.0", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/ripple": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/@heroui/ripple/-/ripple-2.2.18.tgz", + "integrity": "sha512-EAZrF6hLJTBiv1sF6R3Wfj/pAIO2yIdVNT2vzaNEXEInrB/fFJlnxfka4p89JjuPl3tiC9jAfavv+zK9YhyBag==", + "license": "MIT", + "dependencies": { + "@heroui/dom-animation": "2.1.10", + "@heroui/shared-utils": "2.1.10" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/scroll-shadow": { + "version": "2.3.16", + "resolved": "https://registry.npmjs.org/@heroui/scroll-shadow/-/scroll-shadow-2.3.16.tgz", + "integrity": "sha512-T1zTUjSOpmefMTacFQJFrgssY2BBUO+ZoGQnCiybY+XSZDiuMDmOEjNxC71VUuaHXOzYvhLwmzJY4ZnaUOTlXw==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-data-scroll-overflow": "2.2.11" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/select": { + "version": "2.4.25", + "resolved": "https://registry.npmjs.org/@heroui/select/-/select-2.4.25.tgz", + "integrity": "sha512-vJoIcRsuh340jvG0JI3NkkvG7iHfflyuxf3hJ4UFAiz+oXxjL1TASToHsIlSiwYZtv1Ihdy89b8Jjfrpa0n89g==", + "license": "MIT", + "dependencies": { + "@heroui/aria-utils": "2.2.21", + "@heroui/form": "2.1.24", + "@heroui/listbox": "2.3.23", + "@heroui/popover": "2.3.24", + "@heroui/react-utils": "2.1.12", + "@heroui/scroll-shadow": "2.3.16", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/spinner": "2.2.21", + "@heroui/use-aria-button": "2.2.18", + "@heroui/use-aria-multiselect": "2.4.17", + "@heroui/use-form-reset": "2.0.1", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/focus": "3.21.0", + "@react-aria/form": "3.1.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/overlays": "3.28.0", + "@react-aria/visually-hidden": "3.8.26", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/skeleton": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@heroui/skeleton/-/skeleton-2.2.15.tgz", + "integrity": "sha512-Y0nRETaOuF5a1VQy6jPczEM4+MQ9dIJVUSDv2WwJeFBnSs47aNKjOj0ooHaECreynOcKcSqC6hdzKCnN2upKrw==", + "license": "MIT", + "dependencies": { + "@heroui/shared-utils": "2.1.10" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/slider": { + "version": "2.4.21", + "resolved": "https://registry.npmjs.org/@heroui/slider/-/slider-2.4.21.tgz", + "integrity": "sha512-vinWQq8h5f5V5kiuyNmSAIiPbByj8NQz2n6saYxP3R1++n2ywGE/dDWofZV10mfR9XiC8fLtdTxAs/u717E7Mw==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/tooltip": "2.2.21", + "@react-aria/focus": "3.21.0", + "@react-aria/i18n": "3.12.11", + "@react-aria/interactions": "3.25.4", + "@react-aria/slider": "3.8.0", + "@react-aria/visually-hidden": "3.8.26", + "@react-stately/slider": "3.7.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.19", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/snippet": { + "version": "2.2.25", + "resolved": "https://registry.npmjs.org/@heroui/snippet/-/snippet-2.2.25.tgz", + "integrity": "sha512-o1qSv6Vlzm4MDxlGcWBovNqDDmbIv50tFgdWtqLbo2rXfO6OuqLxP2IBKC0fyT8r7zXB3lYrG+3BP7Ok/5zcbw==", + "license": "MIT", + "dependencies": { + "@heroui/button": "2.2.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/tooltip": "2.2.21", + "@heroui/use-clipboard": "2.1.9", + "@react-aria/focus": "3.21.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/spacer": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/@heroui/spacer/-/spacer-2.2.18.tgz", + "integrity": "sha512-EHUIyWt2w0viR7oSqhbZPP4fHuILOdcq7ejAhid7rqhsJSjfixQQ/V4OY7D8vpzi7KmlyrkfpkjAZqAApiEbuA==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/system-rsc": "2.3.17" + }, + "peerDependencies": { + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/spinner": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/spinner/-/spinner-2.2.21.tgz", + "integrity": "sha512-8rBUwVcVESlHfguRXkgC4p7UEymAAUL/E+nOCfqOHqr308bKhVrS2lSjfeRMBGEJqWLf3m5AMhRfwpRbcSVHWg==", + "license": "MIT", + "dependencies": { + "@heroui/shared-utils": "2.1.10", + "@heroui/system": "2.4.20", + "@heroui/system-rsc": "2.3.17" + }, + "peerDependencies": { + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/switch": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/@heroui/switch/-/switch-2.2.22.tgz", + "integrity": "sha512-EwWEKCzHqZT7oj8iYudDdVsZtoCZRCTGQyS5PutETUXvgOAj3fXFWegrLAPPaIeZggguvS3nIVjgaKUnPS2/Fw==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/switch": "3.7.6", + "@react-aria/visually-hidden": "3.8.26", + "@react-stately/toggle": "3.9.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/system-rsc": { + "version": "2.3.17", + "resolved": "https://registry.npmjs.org/@heroui/system-rsc/-/system-rsc-2.3.17.tgz", + "integrity": "sha512-XtQJpLN8HkLYJsvfyBWA/RE8w3PJzEjItwGZ0NACCKRiwkQL205WXJNlkzXsO2/+Y7fEKXkqTMNpQYEhnUlEpw==", + "license": "MIT", + "dependencies": { + "@react-types/shared": "3.31.0", + "clsx": "^1.2.1" + }, + "peerDependencies": { + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/table": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/@heroui/table/-/table-2.2.24.tgz", + "integrity": "sha512-R3jsgmqGqVAI5rxy0MbcL2lOZwJSbaHSDBEPtDj1UCrPlQC7O+VhKMC9D3I0MaX+bCVDfm0wMYmu5mNjmXGXnQ==", + "license": "MIT", + "dependencies": { + "@heroui/checkbox": "2.3.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/spacer": "2.2.18", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/table": "3.17.6", + "@react-aria/visually-hidden": "3.8.26", + "@react-stately/table": "3.14.4", + "@react-stately/virtualizer": "4.4.2", + "@react-types/grid": "3.3.4", + "@react-types/table": "3.13.2", + "@tanstack/react-virtual": "3.11.3" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/tabs": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/tabs/-/tabs-2.2.21.tgz", + "integrity": "sha512-vZAmK7d5i9FE9n78jgJWI6jSHofam4CQSD6ejoefuSWPQZ1nJSgkZrMkTKQuXlvjK+zYy5yvkdj1B8PKq1XaIA==", + "license": "MIT", + "dependencies": { + "@heroui/aria-utils": "2.2.21", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-is-mounted": "2.1.8", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/tabs": "3.10.6", + "@react-stately/tabs": "3.8.4", + "@react-types/shared": "3.31.0", + "scroll-into-view-if-needed": "3.0.10" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/theme": { + "version": "2.4.20", + "resolved": "https://registry.npmjs.org/@heroui/theme/-/theme-2.4.20.tgz", + "integrity": "sha512-wJdsz7XS9M7xbNd0d1EaaK5dCZIEOSI7eCr5A6f5aM48mtqLaXfsj3gYsfCy7GkQAvtKWuicwKe5D94Xoma6GA==", + "license": "MIT", + "dependencies": { + "@heroui/shared-utils": "2.1.10", + "clsx": "^1.2.1", + "color": "^4.2.3", + "color2k": "^2.0.3", + "deepmerge": "4.3.1", + "flat": "^5.0.2", + "tailwind-merge": "3.3.1", + "tailwind-variants": "2.0.1" + }, + "peerDependencies": { + "tailwindcss": ">=4.0.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/toast": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@heroui/toast/-/toast-2.0.14.tgz", + "integrity": "sha512-rYOIl+Nj9EfpBEbZ0fpRiZvKYMQrOntscvIQhQgxvCr3j/5AydKbkA2s+yncHxLj/eDoYaaCCZncbj/Q72ndkA==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/spinner": "2.2.21", + "@heroui/use-is-mobile": "2.2.12", + "@react-aria/interactions": "3.25.4", + "@react-aria/toast": "3.0.6", + "@react-stately/toast": "3.1.2" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/tooltip": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/tooltip/-/tooltip-2.2.21.tgz", + "integrity": "sha512-ob3XeFir06zeeV6Lq6yCmagSNzwMpEQfsNXP0hisPNamCrJXH2OmrGU01nOmBBMLusBmhQ43Cc3OPDCAyKxUfA==", + "license": "MIT", + "dependencies": { + "@heroui/aria-utils": "2.2.21", + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-overlay": "2.0.2", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/overlays": "3.28.0", + "@react-aria/tooltip": "3.8.6", + "@react-stately/tooltip": "3.5.6", + "@react-types/overlays": "3.9.0", + "@react-types/tooltip": "3.4.19" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/@heroui/user": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/@heroui/user/-/user-2.2.20.tgz", + "integrity": "sha512-KnqFtiZR18nlpSEJzA6/aGhNMnuWjQx6L7JbF8kAA2CdhHEBABRIsqKN1qBRon7awMilzBOvlHe6yuk1sEqJHg==", + "license": "MIT", + "dependencies": { + "@heroui/avatar": "2.2.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@react-aria/focus": "3.21.0" + }, + "peerDependencies": { + "@heroui/system": ">=2.4.18", + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/react/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@heroui/react/node_modules/tailwindcss": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", + "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", + "license": "MIT", + "peer": true + }, + "node_modules/@heroui/shared-icons": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@heroui/shared-icons/-/shared-icons-2.1.10.tgz", + "integrity": "sha512-ePo60GjEpM0SEyZBGOeySsLueNDCqLsVL79Fq+5BphzlrBAcaKY7kUp74964ImtkXvknTxAWzuuTr3kCRqj6jg==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/shared-utils": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@heroui/shared-utils/-/shared-utils-2.1.10.tgz", + "integrity": "sha512-w6pSRZZBNDG5/aFueSDUWqOIzqUjKojukg7FxTnVeUX+vIlnYV2Wfv+W+C4l+OV7o0t8emeoe5tXZh8QcLEZEQ==", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/@heroui/system": { + "version": "2.4.20", + "resolved": "https://registry.npmjs.org/@heroui/system/-/system-2.4.20.tgz", + "integrity": "sha512-bLl86ghOjsk8JLarLfL8wkuiNySJS1PHtd0mpGbAjVRQZYp4wH27R7hYBV55dre8Zw+nIRq58PgILdos7F+e0w==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/system-rsc": "2.3.17", + "@react-aria/i18n": "3.12.11", + "@react-aria/overlays": "3.28.0", + "@react-aria/utils": "3.30.0" + }, + "peerDependencies": { + "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1", + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/system/node_modules/@heroui/system-rsc": { + "version": "2.3.17", + "resolved": "https://registry.npmjs.org/@heroui/system-rsc/-/system-rsc-2.3.17.tgz", + "integrity": "sha512-XtQJpLN8HkLYJsvfyBWA/RE8w3PJzEjItwGZ0NACCKRiwkQL205WXJNlkzXsO2/+Y7fEKXkqTMNpQYEhnUlEpw==", + "license": "MIT", + "dependencies": { + "@react-types/shared": "3.31.0", + "clsx": "^1.2.1" + }, + "peerDependencies": { + "@heroui/theme": ">=2.4.17", + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/system/node_modules/@heroui/theme": { + "version": "2.4.20", + "resolved": "https://registry.npmjs.org/@heroui/theme/-/theme-2.4.20.tgz", + "integrity": "sha512-wJdsz7XS9M7xbNd0d1EaaK5dCZIEOSI7eCr5A6f5aM48mtqLaXfsj3gYsfCy7GkQAvtKWuicwKe5D94Xoma6GA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@heroui/shared-utils": "2.1.10", + "clsx": "^1.2.1", + "color": "^4.2.3", + "color2k": "^2.0.3", + "deepmerge": "4.3.1", + "flat": "^5.0.2", + "tailwind-merge": "3.3.1", + "tailwind-variants": "2.0.1" + }, + "peerDependencies": { + "tailwindcss": ">=4.0.0" + } + }, + "node_modules/@heroui/system/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@heroui/system/node_modules/tailwindcss": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", + "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", + "license": "MIT", + "peer": true + }, + "node_modules/@heroui/use-aria-accordion": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-accordion/-/use-aria-accordion-2.2.16.tgz", + "integrity": "sha512-+1YGkxh8dlfHgGfwPc8M1f3hox0dLH6jDxc2cX6HupzZDsIcqerVBo0vppl3t+3DXSyia0BGROa5kuJJOoCUcA==", + "license": "MIT", + "dependencies": { + "@react-aria/button": "3.14.0", + "@react-aria/focus": "3.21.0", + "@react-aria/selection": "3.25.0", + "@react-stately/tree": "3.9.1", + "@react-types/accordion": "3.0.0-alpha.26", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-aria-button": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-button/-/use-aria-button-2.2.18.tgz", + "integrity": "sha512-z2Z2WQSRYG8k23tEzD/+4PueY3Tuk14Ovt74pqW9+zRKffloPEqmj3txGq9Ja5lUQpz22TWR0dtvbxwITJHf6Q==", + "license": "MIT", + "dependencies": { + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/utils": "3.30.0", + "@react-types/button": "3.13.0", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-aria-link": { + "version": "2.2.19", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-link/-/use-aria-link-2.2.19.tgz", + "integrity": "sha512-833sZSPMq/sBX14MR7yG2xEmGCbeSm/Bx8/TO6usNB37f2xf179xl6GslDMRVxpAjBcgRI9MtP2qBM1ngJbhmw==", + "license": "MIT", + "dependencies": { + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/utils": "3.30.0", + "@react-types/link": "3.6.3", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-aria-modal-overlay": { + "version": "2.2.17", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-modal-overlay/-/use-aria-modal-overlay-2.2.17.tgz", + "integrity": "sha512-exLtnPX31BUJ7Iq6IH7d/Z8MfoCm9GpQ03B332KBLRbHMM+pye3P1h74lNtdQzIf0OHFSMstJ4gLSs4jx3t6KQ==", + "license": "MIT", + "dependencies": { + "@heroui/use-aria-overlay": "2.0.2", + "@react-aria/overlays": "3.28.0", + "@react-aria/utils": "3.30.0", + "@react-stately/overlays": "3.6.18" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-aria-multiselect": { + "version": "2.4.17", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-multiselect/-/use-aria-multiselect-2.4.17.tgz", + "integrity": "sha512-gU6et+auSJV28umz1YJnxjavuMpOvpfym9IhNe59za/Y/mNIwdHJwcEwbL5qc2eK0AFKYuhqMYsv2iaPs4qcMg==", + "license": "MIT", + "dependencies": { + "@react-aria/i18n": "3.12.11", + "@react-aria/interactions": "3.25.4", + "@react-aria/label": "3.7.20", + "@react-aria/listbox": "3.14.7", + "@react-aria/menu": "3.19.0", + "@react-aria/selection": "3.25.0", + "@react-aria/utils": "3.30.0", + "@react-stately/form": "3.2.0", + "@react-stately/list": "3.12.4", + "@react-stately/menu": "3.9.6", + "@react-types/button": "3.13.0", + "@react-types/overlays": "3.9.0", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0", + "react-dom": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-aria-overlay": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-overlay/-/use-aria-overlay-2.0.2.tgz", + "integrity": "sha512-pujpue203ii/FukApYGfkeTrT1i80t77SUPR7u1er3dkRCUruksvr1AiPQlsUec1UkIpe/jkXpG3Yb+DldsjRg==", + "license": "MIT", + "dependencies": { + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/overlays": "3.28.0", + "@react-types/shared": "3.31.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@heroui/use-callback-ref": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-callback-ref/-/use-callback-ref-2.1.8.tgz", + "integrity": "sha512-D1JDo9YyFAprYpLID97xxQvf86NvyWLay30BeVVZT9kWmar6O9MbCRc7ACi7Ngko60beonj6+amTWkTm7QuY/Q==", + "license": "MIT", + "dependencies": { + "@heroui/use-safe-layout-effect": "2.1.8" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-clipboard": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@heroui/use-clipboard/-/use-clipboard-2.1.9.tgz", + "integrity": "sha512-lkBq5RpXHiPvk1BXKJG8gMM0f7jRMIGnxAXDjAUzZyXKBuWLoM+XlaUWmZHtmkkjVFMX1L4vzA+vxi9rZbenEQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-data-scroll-overflow": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/@heroui/use-data-scroll-overflow/-/use-data-scroll-overflow-2.2.11.tgz", + "integrity": "sha512-5H7Q31Ub+O7GygbuaNFrItB4VVLGg2wjr4lXD2o414TgfnaSNPNc0Fb6E6A6m0/f6u7fpf98YURoDx+LFkkroA==", + "license": "MIT", + "dependencies": { + "@heroui/shared-utils": "2.1.10" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-disclosure": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@heroui/use-disclosure/-/use-disclosure-2.2.15.tgz", + "integrity": "sha512-a29HObRfjb6pQ7lvv/WZbvXhGv4BLI4fDrEnVnybfFdC3pCmwyoZxOuqraiDT8IXvVFIiuIcX6719ezruo64kQ==", + "license": "MIT", + "dependencies": { + "@heroui/use-callback-ref": "2.1.8", + "@react-aria/utils": "3.30.0", + "@react-stately/utils": "3.10.8" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-draggable": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@heroui/use-draggable/-/use-draggable-2.1.16.tgz", + "integrity": "sha512-IcpdnMLmcIDeo7EG41VHSE2jBbYP5dEyNThFirReNh8fMZ6rW2hAd0lf0M0/R5kgTSKUxdNhecY6csDedP+8gA==", + "license": "MIT", + "dependencies": { + "@react-aria/interactions": "3.25.4" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-form-reset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@heroui/use-form-reset/-/use-form-reset-2.0.1.tgz", + "integrity": "sha512-6slKWiLtVfgZnVeHVkM9eXgjwI07u0CUaLt2kQpfKPqTSTGfbHgCYJFduijtThhTdKBhdH6HCmzTcnbVlAxBXw==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-image": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@heroui/use-image/-/use-image-2.1.11.tgz", + "integrity": "sha512-zG3MsPvTSqW69hSDIxHsNJPJfkLoZA54x0AkwOTiqiFh5Z+3ZaQvMTn31vbuMIKmHRpHkkZOTc85cqpAB1Ct4w==", + "license": "MIT", + "dependencies": { + "@heroui/react-utils": "2.1.12", + "@heroui/use-safe-layout-effect": "2.1.8" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-intersection-observer": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/@heroui/use-intersection-observer/-/use-intersection-observer-2.2.14.tgz", + "integrity": "sha512-qYJeMk4cTsF+xIckRctazCgWQ4BVOpJu+bhhkB1NrN+MItx19Lcb7ksOqMdN5AiSf85HzDcAEPIQ9w9RBlt5sg==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-is-mobile": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@heroui/use-is-mobile/-/use-is-mobile-2.2.12.tgz", + "integrity": "sha512-2UKa4v1xbvFwerWKoMTrg4q9ZfP9MVIVfCl1a7JuKQlXq3jcyV6z1as5bZ41pCsTOT+wUVOFnlr6rzzQwT9ZOA==", + "license": "MIT", + "dependencies": { + "@react-aria/ssr": "3.9.10" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-is-mounted": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-is-mounted/-/use-is-mounted-2.1.8.tgz", + "integrity": "sha512-DO/Th1vD4Uy8KGhd17oGlNA4wtdg91dzga+VMpmt94gSZe1WjsangFwoUBxF2uhlzwensCX9voye3kerP/lskg==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-measure": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-measure/-/use-measure-2.1.8.tgz", + "integrity": "sha512-GjT9tIgluqYMZWfAX6+FFdRQBqyHeuqUMGzAXMTH9kBXHU0U5C5XU2c8WFORkNDoZIg1h13h1QdV+Vy4LE1dEA==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-pagination": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@heroui/use-pagination/-/use-pagination-2.2.16.tgz", + "integrity": "sha512-EF0MyFRBglTPhcxBlyt+omdgBjLn7mKzQOJuNs1KaBQJBEoe+XPV0eVBleXu32UTz5Q89SsMYGMNbOgpxeU8SA==", + "license": "MIT", + "dependencies": { + "@heroui/shared-utils": "2.1.10", + "@react-aria/i18n": "3.12.11" + }, + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-resize": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-resize/-/use-resize-2.1.8.tgz", + "integrity": "sha512-htF3DND5GmrSiMGnzRbISeKcH+BqhQ/NcsP9sBTIl7ewvFaWiDhEDiUHdJxflmJGd/c5qZq2nYQM/uluaqIkKA==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-safe-layout-effect": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-safe-layout-effect/-/use-safe-layout-effect-2.1.8.tgz", + "integrity": "sha512-wbnZxVWCYqk10XRMu0veSOiVsEnLcmGUmJiapqgaz0fF8XcpSScmqjTSoWjHIEWaHjQZ6xr+oscD761D6QJN+Q==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-scroll-position": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-scroll-position/-/use-scroll-position-2.1.8.tgz", + "integrity": "sha512-NxanHKObxVfWaPpNRyBR8v7RfokxrzcHyTyQfbgQgAGYGHTMaOGkJGqF8kBzInc3zJi+F0zbX7Nb0QjUgsLNUQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, + "node_modules/@heroui/use-viewport-size": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@heroui/use-viewport-size/-/use-viewport-size-2.0.1.tgz", + "integrity": "sha512-blv8BEB/QdLePLWODPRzRS2eELJ2eyHbdOIADbL0KcfLzOUEg9EiuVk90hcSUDAFqYiJ3YZ5Z0up8sdPcR8Y7g==", + "license": "MIT", + "peerDependencies": { + "react": ">=18 || >=19.0.0-rc.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -435,11 +2097,47 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, + "node_modules/@internationalized/date": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.2.tgz", + "integrity": "sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/message": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.8.tgz", + "integrity": "sha512-Rwk3j/TlYZhn3HQ6PyXUV0XP9Uv42jqZGNegt0BXlxjE6G3+LwHjbQZAGHhCnCPdaA6Tvd3ma/7QzLlLkJxAWA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "intl-messageformat": "^10.1.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.4.tgz", + "integrity": "sha512-P+/h+RDaiX8EGt3shB9AYM1+QgkvHmJ5rKi4/59k4sg9g58k9rqsRW0WxRO7jCoHyvVbFRRFKmVTdFYdehrxHg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/string": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.7.tgz", + "integrity": "sha512-D4OHBjrinH+PFZPvfCXvG28n2LSykWcJ7GIioQL+ok0LON15SdfoUssoHzzOUmVZLbRoREsQXVzA6r8JKsbP6A==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -448,7 +2146,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -456,14 +2153,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -724,6 +2419,1386 @@ } } }, + "node_modules/@react-aria/breadcrumbs": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.27.tgz", + "integrity": "sha512-fuXD9nvBaBVZO0Z6EntBlxQD621/2Ldcxz76jFjc4V/jNOq/6BIVQRtpnAYYrSTiW3ZV2IoAyxRWNxQU22hOow==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/link": "^3.8.4", + "@react-aria/utils": "^3.30.0", + "@react-types/breadcrumbs": "^3.7.15", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/button": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.14.0.tgz", + "integrity": "sha512-we6z+2GpZO8lGD6EPmYH2S87kLCpU14D2E3tD2vES+SS2sZM2qcm2dUGpeo4+gZqBToLWKEBAGCSlkWEtgS19A==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/toolbar": "3.0.0-beta.19", + "@react-aria/utils": "^3.30.0", + "@react-stately/toggle": "^3.9.0", + "@react-types/button": "^3.13.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/calendar": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.9.0.tgz", + "integrity": "sha512-YxHLqL/LZrgwYGKzlQ96Fgt6gC+Q1L8k56sD51jJAtiD+YtT/pKJfK1zjZ3rtHtPTDYzosJ8vFgOmZNpnKQpXQ==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.8.2", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/live-announcer": "^3.4.4", + "@react-aria/utils": "^3.30.0", + "@react-stately/calendar": "^3.8.3", + "@react-types/button": "^3.13.0", + "@react-types/calendar": "^3.7.3", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/checkbox": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.16.0.tgz", + "integrity": "sha512-XPaMz1/iVBG6EbJOPYlNtvr+q4f0axJeoIvyzWW3ciIdDSX/3jYuFg/sv/b3OQQl389cbQ/WUBQyWre/uXWVEg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/form": "^3.1.0", + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/toggle": "^3.12.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/checkbox": "^3.7.0", + "@react-stately/form": "^3.2.0", + "@react-stately/toggle": "^3.9.0", + "@react-types/checkbox": "^3.10.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/combobox": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.13.0.tgz", + "integrity": "sha512-eBa8aWcL3Ar/BvgSaqYDmNQP70LPZ7us2myM31QQt2YDRptqGHd44wzXCts9SaDVIeMVy+AEY2NkuxrVE6yNrw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/listbox": "^3.14.7", + "@react-aria/live-announcer": "^3.4.4", + "@react-aria/menu": "^3.19.0", + "@react-aria/overlays": "^3.28.0", + "@react-aria/selection": "^3.25.0", + "@react-aria/textfield": "^3.18.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/collections": "^3.12.6", + "@react-stately/combobox": "^3.11.0", + "@react-stately/form": "^3.2.0", + "@react-types/button": "^3.13.0", + "@react-types/combobox": "^3.13.7", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/datepicker": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.15.0.tgz", + "integrity": "sha512-AONeLj7sMKz4JmzCu4bhsqwcNFXCSWoaBhi4wOJO9+WYmxudn5mSI9ez8NMCVn+s5kcYpyvzrrAFf/DvQ4UDgw==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.8.2", + "@internationalized/number": "^3.6.4", + "@internationalized/string": "^3.2.7", + "@react-aria/focus": "^3.21.0", + "@react-aria/form": "^3.1.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/spinbutton": "^3.6.17", + "@react-aria/utils": "^3.30.0", + "@react-stately/datepicker": "^3.15.0", + "@react-stately/form": "^3.2.0", + "@react-types/button": "^3.13.0", + "@react-types/calendar": "^3.7.3", + "@react-types/datepicker": "^3.13.0", + "@react-types/dialog": "^3.5.20", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/dialog": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.28.tgz", + "integrity": "sha512-S9dgdFBQc9LbhyBiHwGPSATwtvsIl6h+UnxDJ4oKBSse+wxdAyshbZv2tyO5RFbe3k73SAgU7yKocfg7YyRM0A==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/overlays": "^3.28.0", + "@react-aria/utils": "^3.30.0", + "@react-types/dialog": "^3.5.20", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/focus": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.0.tgz", + "integrity": "sha512-7NEGtTPsBy52EZ/ToVKCu0HSelE3kq9qeis+2eEq90XSuJOMaDHUQrA7RC2Y89tlEwQB31bud/kKRi9Qme1dkA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/form": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.1.0.tgz", + "integrity": "sha512-aDAOZafrn0V8e09mDAtCvc+JnpnkFM9X8cbI5+fdXsXAA+JxO+3uRRfnJHBlIL0iLc4C4OVWxBxWToV95pg1KA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-stately/form": "^3.2.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/grid": { + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.14.3.tgz", + "integrity": "sha512-O4Ius5tJqKcMGfQT6IXD4MnEOeq6f/59nKmfCLTXMREFac/oxafqanUx3zrEVYbaqLOjEmONcd8S61ptQM6aPg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/live-announcer": "^3.4.4", + "@react-aria/selection": "^3.25.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/collections": "^3.12.6", + "@react-stately/grid": "^3.11.4", + "@react-stately/selection": "^3.20.4", + "@react-types/checkbox": "^3.10.0", + "@react-types/grid": "^3.3.4", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/i18n": { + "version": "3.12.11", + "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.12.11.tgz", + "integrity": "sha512-1mxUinHbGJ6nJ/uSl62dl48vdZfWTBZePNF/wWQy98gR0qNFXLeusd7CsEmJT1971CR5i/WNYUo1ezNlIJnu6A==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.8.2", + "@internationalized/message": "^3.1.8", + "@internationalized/number": "^3.6.4", + "@internationalized/string": "^3.2.7", + "@react-aria/ssr": "^3.9.10", + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.25.4", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.25.4.tgz", + "integrity": "sha512-HBQMxgUPHrW8V63u9uGgBymkMfj6vdWbB0GgUJY49K9mBKMsypcHeWkWM6+bF7kxRO728/IK8bWDV6whDbqjHg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.10", + "@react-aria/utils": "^3.30.0", + "@react-stately/flags": "^3.1.2", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/label": { + "version": "3.7.20", + "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.20.tgz", + "integrity": "sha512-Hw7OsC2GBnjptyW1lC1+SNoSIZA0eIh02QnNDr1XX2S+BPfn958NxoI7sJIstO/TUpQVNqdjEN/NI6+cyuJE6g==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/landmark": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@react-aria/landmark/-/landmark-3.0.5.tgz", + "integrity": "sha512-klUgRGQyTv5qWFQ0EMMLBOLa87qSTGjWoiMvytL9EgJCACkn/OzNMPbqVSkMADvadDyWCMWFYWvfweLxl3T5yw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/link": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.8.4.tgz", + "integrity": "sha512-7cPRGIo7x6ZZv1dhp2xGjqLR1snazSQgl7tThrBDL5E8f6Yr7SVpxOOK5/EBmfpFkhkmmXEO/Fgo/GPJdc6Vmw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-types/link": "^3.6.3", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/listbox": { + "version": "3.14.7", + "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.14.7.tgz", + "integrity": "sha512-U5a+AIDblaeQTIA1MDFUaYIKoPwPNAuY7SwkuA5Z7ClDOeQJkiyExmAoKcUXwUkrLULQcbOPKr401q38IL3T7Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/selection": "^3.25.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/collections": "^3.12.6", + "@react-stately/list": "^3.12.4", + "@react-types/listbox": "^3.7.2", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/live-announcer": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.4.4.tgz", + "integrity": "sha512-PTTBIjNRnrdJOIRTDGNifY2d//kA7GUAwRFJNOEwSNG4FW+Bq9awqLiflw0JkpyB0VNIwou6lqKPHZVLsGWOXA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-aria/menu": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.19.0.tgz", + "integrity": "sha512-VLUGbZedKJvK2OFWEpa86GPIaj9QcWox/R9JXmNk6nyrAz/V46OBQENdliV26PEdBZgzrVxGvmkjaH7ZsN/32Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/overlays": "^3.28.0", + "@react-aria/selection": "^3.25.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/collections": "^3.12.6", + "@react-stately/menu": "^3.9.6", + "@react-stately/selection": "^3.20.4", + "@react-stately/tree": "^3.9.1", + "@react-types/button": "^3.13.0", + "@react-types/menu": "^3.10.3", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/numberfield": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.12.0.tgz", + "integrity": "sha512-JkgkjYsZ9lN5m3//X3buOKVrA/QJEeeXJ+5T5r6AmF29YdIhD1Plf5AEOWoRpZWQ25chH7FI/Orsf4h3/SLOpg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/spinbutton": "^3.6.17", + "@react-aria/textfield": "^3.18.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/form": "^3.2.0", + "@react-stately/numberfield": "^3.10.0", + "@react-types/button": "^3.13.0", + "@react-types/numberfield": "^3.8.13", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/overlays": { + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.28.0.tgz", + "integrity": "sha512-qaHahAXTmxXULgg2/UfWEIwfgdKsn27XYryXAWWDu2CAZTcbI+5mGwYrQZSDWraM6v5PUUepzOVvm7hjTqiMFw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/ssr": "^3.9.10", + "@react-aria/utils": "^3.30.0", + "@react-aria/visually-hidden": "^3.8.26", + "@react-stately/overlays": "^3.6.18", + "@react-types/button": "^3.13.0", + "@react-types/overlays": "^3.9.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/progress": { + "version": "3.4.25", + "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.25.tgz", + "integrity": "sha512-KD9Gow+Ip6ZCBdsarR+Hby3c4d99I6L95Ruf7tbCh4ut9i9Dbr+x99OwhpAbT0g549cOyeIqxutPkT+JuzrRuA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/label": "^3.7.20", + "@react-aria/utils": "^3.30.0", + "@react-types/progress": "^3.5.14", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/radio": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.12.0.tgz", + "integrity": "sha512-//0zZUuHtbm6uZR9+sNRNzVcQpjJKjZj57bDD0lMNj3NZp/Tkw+zXIFy6j1adv3JMe6iYkzEgaB7YRDD1Fe/ZA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.21.0", + "@react-aria/form": "^3.1.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/utils": "^3.30.0", + "@react-stately/radio": "^3.11.0", + "@react-types/radio": "^3.9.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/selection": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.25.0.tgz", + "integrity": "sha512-Q3U0Ya0PTP/TR0a2g+7YEbFVLphiWthmEkHyvOx9HsKSjE8w9wXY3C14DZWKskB/BBrXKJuOWxBDa0xhC83S+A==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-stately/selection": "^3.20.4", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/slider": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.8.0.tgz", + "integrity": "sha512-D7Sa7q21cV3gBid7frjoYw6924qYqNdJn2oai1BEemHSuwQatRlm1o2j+fnPTy9sYZfNOqXYnv5YjEn0o1T+Gw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/utils": "^3.30.0", + "@react-stately/slider": "^3.7.0", + "@react-types/shared": "^3.31.0", + "@react-types/slider": "^3.8.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/spinbutton": { + "version": "3.6.17", + "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.17.tgz", + "integrity": "sha512-gdGc3kkqpvFUd9XsrhPwQHMrG2TY0LVuGGgjvaZwF/ONm9FMz393ogCM0P484HsjU50hClO+yiRRgNjdwDIzPQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/live-announcer": "^3.4.4", + "@react-aria/utils": "^3.30.0", + "@react-types/button": "^3.13.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/switch": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.7.6.tgz", + "integrity": "sha512-C+Od8hZNZCf3thgtZnZKzHl5b/63Q9xf+Pw6ugLA1qaKazwp46x1EwUVVqVhfAeVhmag++eHs8Lol5ZwQEinjQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/toggle": "^3.12.0", + "@react-stately/toggle": "^3.9.0", + "@react-types/shared": "^3.31.0", + "@react-types/switch": "^3.5.13", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/table": { + "version": "3.17.6", + "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.17.6.tgz", + "integrity": "sha512-PSEaeKOIazVEaykeTLudPbDLytJgOPLZJalS/xXY0/KL+Gi0Olchmz4tvS0WBe87ChmlVi6GQqU+stk23aZVWg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.21.0", + "@react-aria/grid": "^3.14.3", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/live-announcer": "^3.4.4", + "@react-aria/utils": "^3.30.0", + "@react-aria/visually-hidden": "^3.8.26", + "@react-stately/collections": "^3.12.6", + "@react-stately/flags": "^3.1.2", + "@react-stately/table": "^3.14.4", + "@react-types/checkbox": "^3.10.0", + "@react-types/grid": "^3.3.4", + "@react-types/shared": "^3.31.0", + "@react-types/table": "^3.13.2", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/tabs": { + "version": "3.10.6", + "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.10.6.tgz", + "integrity": "sha512-L8MaE7+bu6ByDOUxNPpMMYxdHULhKUfBoXdsSsXqb1z3QxdFW2zovfag0dvpyVWB6ALghX2T0PlTUNqaKA5tGw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/selection": "^3.25.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/tabs": "^3.8.4", + "@react-types/shared": "^3.31.0", + "@react-types/tabs": "^3.3.17", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/textfield": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.18.0.tgz", + "integrity": "sha512-kCwbyDHi2tRaD/OjagA3m3q2mMZUPeXY7hRqhDxpl2MwyIdd+/PQOJLM8tZr5+m2zvBx+ffOcjZMGTMwMtoV5w==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/form": "^3.1.0", + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/utils": "^3.30.0", + "@react-stately/form": "^3.2.0", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@react-types/textfield": "^3.12.4", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/toast": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@react-aria/toast/-/toast-3.0.6.tgz", + "integrity": "sha512-PoCLWoZzdHIMYY0zIU3WYsHAHPS52sN1gzGRJ+cr5zogU8wwg8lwFZCvs/yql0IhQLsO930zcCXWeL/NsCMrlA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/landmark": "^3.0.5", + "@react-aria/utils": "^3.30.0", + "@react-stately/toast": "^3.1.2", + "@react-types/button": "^3.13.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/toggle": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.12.0.tgz", + "integrity": "sha512-JfcrF8xUEa2CbbUXp+WQiTBVwSM/dm21v5kueQlksvLfXG6DGE8/zjM6tJFErrFypAasc1JXyrI4dspLOWCfRA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-stately/toggle": "^3.9.0", + "@react-types/checkbox": "^3.10.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/toolbar": { + "version": "3.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.19.tgz", + "integrity": "sha512-G4sgtOUTUUJHznXlpKcY64SxD2gKOqIQXZXjWTVcY/Q5hAjl8gbTt5XIED22GmeIgd/tVl6+lddGj6ESze4vSg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/tooltip": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.8.6.tgz", + "integrity": "sha512-lW/PegiswGLlCP0CM4FH2kbIrEe4Li2SoklzIRh4nXZtiLIexswoE5/5af7PMtoMAl31or6fHZleVLzZD4VcfA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-stately/tooltip": "^3.5.6", + "@react-types/shared": "^3.31.0", + "@react-types/tooltip": "^3.4.19", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.30.0.tgz", + "integrity": "sha512-ydA6y5G1+gbem3Va2nczj/0G0W7/jUVo/cbN10WA5IizzWIwMP5qhFr7macgbKfHMkZ+YZC3oXnt2NNre5odKw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.10", + "@react-stately/flags": "^3.1.2", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/visually-hidden": { + "version": "3.8.26", + "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.26.tgz", + "integrity": "sha512-Lz36lTVaQbv5Kn74sPv0l9SnLQ5XHKCoq2zilP14Eb4QixDIqR7Ovj43m+6wi9pynf29jtOb/8D/9jrTjbmmgw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/calendar": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.8.3.tgz", + "integrity": "sha512-HTWD6ZKQcXDlvj6glEEG0oi2Tpkaw19y5rK526s04zJs894wFqM9PK0WHthEYqjCeQJ5B/OkyG19XX4lENxnZw==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.8.2", + "@react-stately/utils": "^3.10.8", + "@react-types/calendar": "^3.7.3", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/checkbox": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.7.0.tgz", + "integrity": "sha512-opViVhNvxFVHjXhM4nA/E03uvbLazsIKloXX9JtyBCZAQRUag17dpmkekfIkHvP4o7z7AWFoibD8JBFV1IrMcQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/form": "^3.2.0", + "@react-stately/utils": "^3.10.8", + "@react-types/checkbox": "^3.10.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/collections": { + "version": "3.12.6", + "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.12.6.tgz", + "integrity": "sha512-S158RKWGZSodbJXKZDdcnrLzFxzFmyRWDNakQd1nBGhSrW2JV8lDn9ku5Og7TrjoEpkz//B2oId648YT792ilw==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/combobox": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.11.0.tgz", + "integrity": "sha512-W9COXdSOC+uqCZrRHJI0K7emlPb/Tx4A89JHWBcFmiAk+hs1Cnlyjw3aaqEiT8A8/HxDNMO9QcfisWC1iNyE9A==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.6", + "@react-stately/form": "^3.2.0", + "@react-stately/list": "^3.12.4", + "@react-stately/overlays": "^3.6.18", + "@react-stately/select": "^3.7.0", + "@react-stately/utils": "^3.10.8", + "@react-types/combobox": "^3.13.7", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/datepicker": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.15.0.tgz", + "integrity": "sha512-OuBx+h802CoANy6KNR6XuZCndiyRf9vpB32CYZX86nqWy21GSTeT73G41ze5cAH88A/6zmtpYK24nTlk8bdfWA==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.8.2", + "@internationalized/string": "^3.2.7", + "@react-stately/form": "^3.2.0", + "@react-stately/overlays": "^3.6.18", + "@react-stately/utils": "^3.10.8", + "@react-types/datepicker": "^3.13.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/flags": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.2.tgz", + "integrity": "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-stately/form": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.2.0.tgz", + "integrity": "sha512-PfefxvT7/BIhAGpD4oQpdcxnL8cfN0ZTQxQq+Wmb9z3YzK1oM8GFxb8eGdDRG71JeF8WUNMAQVZFhgl00Z/YKg==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/grid": { + "version": "3.11.4", + "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.11.4.tgz", + "integrity": "sha512-oaXFSk2eM0PJ0GVniGA0ZlTpAA0AL0O4MQ7V3cHqZAQbwSO0n2pT31GM0bSVnYP/qTF5lQHo3ECmRQCz0fVyMw==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.6", + "@react-stately/selection": "^3.20.4", + "@react-types/grid": "^3.3.4", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/list": { + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.12.4.tgz", + "integrity": "sha512-r7vMM//tpmagyNlRzl2NFPPtx+az5R9pM6q7aI4aBf6/zpZt2eX2UW5gaDTGlkQng7r6OGyAgJD52jmGcCJk7Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.6", + "@react-stately/selection": "^3.20.4", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/menu": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.9.6.tgz", + "integrity": "sha512-2rVtgeVAiyr7qL8BhmCK/4el49rna/5kADRH5NfPdpXw8ZzaiiHq2RtX443Txj7pUU82CJWQn+CRobq7k6ZTEw==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/overlays": "^3.6.18", + "@react-types/menu": "^3.10.3", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/numberfield": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.10.0.tgz", + "integrity": "sha512-6C8ML4/e2tcn01BRNfFLxetVaWwz0n0pVROnVpo8p761c6lmTqohqEMNcXCVNw9H0wsa1hug2a1S5PcN2OXgag==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/number": "^3.6.4", + "@react-stately/form": "^3.2.0", + "@react-stately/utils": "^3.10.8", + "@react-types/numberfield": "^3.8.13", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/overlays": { + "version": "3.6.18", + "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.18.tgz", + "integrity": "sha512-g8n2FtDCxIg2wQ09R7lrM2niuxMPCdP17bxsPV9hyYnN6m42aAKGOhzWrFOK+3phQKgk/E1JQZEvKw1cyyGo1A==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.8", + "@react-types/overlays": "^3.9.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/radio": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.11.0.tgz", + "integrity": "sha512-hsCmKb9e/ygmzBADFYIGpEQ43LrxjWnlKESgxphvlv0Klla4d6XLAYSFOTX1kcjSztpvVWrdl4cIfmKVF1pz2g==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/form": "^3.2.0", + "@react-stately/utils": "^3.10.8", + "@react-types/radio": "^3.9.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/select": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.7.0.tgz", + "integrity": "sha512-OWLOCKBEj8/XI+vzBSSHQAJu0Hf9Xl/flMhYh47f2b45bO++DRLcVsi8nycPNisudvK6xMQ8a/h4FwjePrCXfg==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/form": "^3.2.0", + "@react-stately/list": "^3.12.4", + "@react-stately/overlays": "^3.6.18", + "@react-types/select": "^3.10.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/selection": { + "version": "3.20.4", + "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.20.4.tgz", + "integrity": "sha512-Hxmc6NtECStYo+Z2uBRhQ80KPhbSF7xXv9eb4qN8dhyuSnsD6c0wc6oAJsv18dldcFz8VrD48aP/uff9mj0hxQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.6", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/slider": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.7.0.tgz", + "integrity": "sha512-quxqkyyxrxLELYEkPrIrucpVPdYDK8yyliv/vvNuHrjuLRIvx6UmssxqESp2EpZfwPYtEB29QXbAKT9+KuXoCQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@react-types/slider": "^3.8.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/table": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.14.4.tgz", + "integrity": "sha512-uhwk8z3DemozD+yHBjSa4WyxKczpDkxhJhW7ZVOY+1jNuTYxc9/JxzPsHICrlDVV8EPWwwyMUz8eO/8rKN7DbA==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.6", + "@react-stately/flags": "^3.1.2", + "@react-stately/grid": "^3.11.4", + "@react-stately/selection": "^3.20.4", + "@react-stately/utils": "^3.10.8", + "@react-types/grid": "^3.3.4", + "@react-types/shared": "^3.31.0", + "@react-types/table": "^3.13.2", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/tabs": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.8.4.tgz", + "integrity": "sha512-2Tr4yXkcNDLyyxrZr+c4FnAW/wkSim3UhDUWoOgTCy3mwlQzdh9r5qJrOZRghn1QvF7p8Ahp7O7qxwd2ZGJrvQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/list": "^3.12.4", + "@react-types/shared": "^3.31.0", + "@react-types/tabs": "^3.3.17", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/toast": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@react-stately/toast/-/toast-3.1.2.tgz", + "integrity": "sha512-HiInm7bck32khFBHZThTQaAF6e6/qm57F4mYRWdTq8IVeGDzpkbUYibnLxRhk0UZ5ybc6me+nqqPkG/lVmM42Q==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/toggle": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.9.0.tgz", + "integrity": "sha512-1URd97R5nbFF9Hc1nQBhvln55EnOkLNz6pjtXU7TCnV4tYVbe+tc++hgr5XRt6KAfmuXxVDujlzRc6QjfCn0cQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.8", + "@react-types/checkbox": "^3.10.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/tooltip": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.5.6.tgz", + "integrity": "sha512-BnOtE7726t1sCKPGbwzzEtEx40tjpbJvw5yqpoVnAV0OLfrXtLVYfd7tWRHmZOYmhELaUnY+gm3ZFYtwvnjs+A==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/overlays": "^3.6.18", + "@react-types/tooltip": "^3.4.19", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/tree": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.9.1.tgz", + "integrity": "sha512-dyoPIvPK/cs03Tg/MQSODi2kKYW1zaiOG9KC2P0c8b44mywU2ojBKzhSJky3dBkJ4VVGy7L+voBh50ELMjEa8Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.6", + "@react-stately/selection": "^3.20.4", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.10.8", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.8.tgz", + "integrity": "sha512-SN3/h7SzRsusVQjQ4v10LaVsDc81jyyR0DD5HnsQitm/I5WDpaSr2nRHtyloPFU48jlql1XX/S04T2DLQM7Y3g==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/virtualizer": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-4.4.2.tgz", + "integrity": "sha512-csU/Bbq1+JYCXlF3wKHa690EhV4/uuK5VwZZvi9jTMqjblDiNUwEmIcx78J8aoadjho5wgRw3ddE9NPDGcVElA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/accordion": { + "version": "3.0.0-alpha.26", + "resolved": "https://registry.npmjs.org/@react-types/accordion/-/accordion-3.0.0-alpha.26.tgz", + "integrity": "sha512-OXf/kXcD2vFlEnkcZy/GG+a/1xO9BN7Uh3/5/Ceuj9z2E/WwD55YwU3GFM5zzkZ4+DMkdowHnZX37XnmbyD3Mg==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.27.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/breadcrumbs": { + "version": "3.7.15", + "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.15.tgz", + "integrity": "sha512-0RsymrsOAsx443XRDJ1krK+Lusr4t0qqExmzFe7/XYXOn/RbGKjzSdezsoWfTy8Hjks0YbfQPVKnNxg9LKv4XA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/link": "^3.6.3", + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/button": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.13.0.tgz", + "integrity": "sha512-hwvcNnBjDeNvWheWfBhmkJSzC48ub5rZq0DnpemB3XKOvv5WcF9p6rrQZsQ3egNGkh0Z+bKfr2QfotgOkccHSw==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/calendar": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.7.3.tgz", + "integrity": "sha512-gofPgVpSawJ0iGO01SbVH46u3gdykHlGT5BfGU1cRnsOR2tJX38dekO/rnuGsMQYF0+kU6U9YVae+XoOFJNnWg==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.8.2", + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/checkbox": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.10.0.tgz", + "integrity": "sha512-DJ84ilBDvZddE/Sul97Otee4M6psrPRaJm2a1Bc7M3Y5UKo6d6RGXdcDarRRpbnS7BeAbVanKiMS2ygI9QHh9g==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/combobox": { + "version": "3.13.7", + "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.13.7.tgz", + "integrity": "sha512-R7MQ4Qm4fryo6FCg3Vo/l9wxkYVG05trsLbxzMvvxCMkpcoHUPhy8Ll33eXA3YP74Rs/IaM9d0d/amSUZ4M9wg==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/datepicker": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.13.0.tgz", + "integrity": "sha512-AG/iGcdQ5SVSjw8Ta7bCdGNkMda+e+Z7lOHxDawL44SII8LtZroBDlaCpb178Tvo17bBfJ6TvWXlvSpBY8GPRg==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.8.2", + "@react-types/calendar": "^3.7.3", + "@react-types/overlays": "^3.9.0", + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/dialog": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.20.tgz", + "integrity": "sha512-ebn8jW/xW/nmRATaWIPHVBIpIFWSaqjrAxa58f5TXer5FtCD9pUuzAQDmy/o22ucB0yvn6Kl+fjb3SMbMdALZQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/overlays": "^3.9.0", + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/form": { + "version": "3.7.14", + "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.14.tgz", + "integrity": "sha512-P+FXOQR/ISxLfBbCwgttcR1OZGqOknk7Ksgrxf7jpc4PuyUC048Jf+FcG+fARhoUeNEhv6kBXI5fpAB6xqnDhA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/grid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.3.4.tgz", + "integrity": "sha512-8XNn7Czhl+D1b2zRwdO8c3oBJmKgevT/viKJB4qBVFOhK0l/p3HYDZUMdeclvUfSt4wx4ASpI7MD3v1vmN54oA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/link": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.6.3.tgz", + "integrity": "sha512-XIYEl9ZPa5mLy8uGQabdhPaFVmnvxNSYF59t0vs/IV0yxeoPvrjKjRAbXS+WP9zYMXIkHYNYYucriCkqKhotJA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/listbox": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.7.2.tgz", + "integrity": "sha512-MRpBhApR1jJNASoVWsEvH5vf89TJw+l9Lt1ssawop0K2iYF5PmkthRdqcpYcTkFu5+f5QvFchVsNJ3TKD4cf2A==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/menu": { + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.10.3.tgz", + "integrity": "sha512-Vd3t7fEbIOiq7kBAHaihfYf+/3Fuh0yK2KNjJ70BPtlAhMRMDVG3m0PheSTm3FFfj+uAdQdfc2YKPnMBbWjDuQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/overlays": "^3.9.0", + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/numberfield": { + "version": "3.8.13", + "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.13.tgz", + "integrity": "sha512-zRSqInmxOTQJZt2fjAhuQK3Wa1vCOlKsRzUVvxTrE8gtQxlgFxirmobuUnjTEhwkFyb0bq8GvVfQV1E95Si2yw==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/overlays": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.9.0.tgz", + "integrity": "sha512-T2DqMcDN5p8vb4vu2igoLrAtuewaNImLS8jsK7th7OjwQZfIWJn5Y45jSxHtXJUddEg1LkUjXYPSXCMerMcULw==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/progress": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.14.tgz", + "integrity": "sha512-GeGrjOeHR/p5qQ1gGlN68jb+lL47kuddxMgdR1iEnAlYGY4OtJoEN/EM5W2ZxJRKPcJmzdcY/p/J0PXa8URbSg==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/radio": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.9.0.tgz", + "integrity": "sha512-phndlgqMF6/9bOOhO3le00eozNfDU1E7OHWV2cWWhGSMRFuRdf7/d+NjVtavCX75+GJ50MxvXk+KB0fjTuvKyg==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/select": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.10.0.tgz", + "integrity": "sha512-+xJwYWJoJTCGsaiPAqb6QB79ub1WKIHSmOS9lh/fPUXfUszVs05jhajaN9KjrKmnXds5uh4u6l1JH5J1l2K5pw==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.31.0.tgz", + "integrity": "sha512-ua5U6V66gDcbLZe4P2QeyNgPp4YWD1ymGA6j3n+s8CGExtrCPe64v+g4mvpT8Bnb985R96e4zFT61+m0YCwqMg==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/slider": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.8.0.tgz", + "integrity": "sha512-eN6Fd3YCPseGfvfOJDtn9Lh9CrAb8tF3cTAprEcpnGrsxmdW9JQpcuciYuLM871X5D2fYg4WaYMpZaiYssjxBQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/switch": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.13.tgz", + "integrity": "sha512-C2EhKBu7g7xhKboPPxhyKtROEti80Ck7TBnKclXt0D4LiwbzpR3qGfuzB+7YFItnhiauP7Uxe+bAfM5ojjtm9w==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/table": { + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.13.2.tgz", + "integrity": "sha512-3/BpFIWHXTcGgQEfip87gMNCWPtPNsc3gFkW4qtsevQ+V0577KyNyvQgvFrqMZKnvz3NWFKyshBb7PTevsus4Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/grid": "^3.3.4", + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/tabs": { + "version": "3.3.17", + "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.17.tgz", + "integrity": "sha512-cLcdxWNJe0Kf/pKuPQbEF9Fl+axiP4gB/WVjmAdhCgQ5LCJw2dGcy1LI1SXrlS3PVclbnujD1DJ8z1lIW4Tmww==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/textfield": { + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.12.4.tgz", + "integrity": "sha512-cOgzI1dT8X1JMNQ9u2UKoV2L28ROkbFEtzY9At0MqTZYYSxYp3Q7i+XRqIBehu8jOMuCtN9ed9EgwVSfkicyLQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/tooltip": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.19.tgz", + "integrity": "sha512-OR/pwZReWbCIxuHJYB1L4fTwliA+mzVvUJMWwXIRy6Eh5d07spS3FZEKFvOgjMxA1nyv5PLf8eyr5RuuP1GGAA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/overlays": "^3.9.0", + "@react-types/shared": "^3.31.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, "node_modules/@reduxjs/toolkit": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.1.tgz", @@ -838,6 +3913,33 @@ "tailwindcss": ">=3.0.0 || insiders" } }, + "node_modules/@tanstack/react-virtual": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.11.3.tgz", + "integrity": "sha512-vCU+OTylXN3hdC8RKg68tPlBPjjxtzon7Ys46MgrSLE+JhSjSTPvoQifV6DQJeJmA8Q3KT6CphJbejupx85vFw==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.11.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.3.tgz", + "integrity": "sha512-v2mrNSnMwnPJtcVqNvV0c5roGCBqeogN8jDtgtuHCphdwBasOZ17x8UV8qpHUh+u0MLfX43c0uUHKje0s+Zb0w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@tippyjs/react": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", @@ -1222,14 +4324,12 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1272,8 +4372,7 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", @@ -1503,7 +4602,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "engines": { "node": ">=8" } @@ -1625,7 +4723,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, "engines": { "node": ">= 6" } @@ -1713,7 +4810,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "funding": [ { "type": "individual", @@ -1740,7 +4836,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -1770,6 +4865,19 @@ "node": ">=6" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1786,6 +4894,16 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -1794,6 +4912,12 @@ "color-support": "bin.js" } }, + "node_modules/color2k": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", + "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==", + "license": "MIT" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1810,11 +4934,16 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, "engines": { "node": ">= 6" } }, + "node_modules/compute-scroll-into-view": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", + "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1899,7 +5028,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, "bin": { "cssesc": "bin/cssesc" }, @@ -2064,6 +5192,12 @@ } } }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, "node_modules/decimal.js-light": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", @@ -2102,6 +5236,15 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -2150,8 +5293,7 @@ "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "node_modules/dir-glob": { "version": "3.0.1", @@ -2167,8 +5309,7 @@ "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "node_modules/doctrine": { "version": "3.0.0", @@ -2960,6 +6101,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -3033,6 +6183,33 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.12.tgz", + "integrity": "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.12", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -3064,7 +6241,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -3551,6 +6727,16 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/input-otp": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.1.tgz", + "integrity": "sha512-+yvpmKYKHi9jIGngxagY9oWiiblPB7+nEO75F2l2o4vs+6vpPZZmUl4tBNYuTCvQjhvEIbdNeJu70bhfYP2nbw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/internal-slot": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", @@ -3573,6 +6759,18 @@ "node": ">=12" } }, + "node_modules/intl-messageformat": { + "version": "10.7.16", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.16.tgz", + "integrity": "sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==", + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/fast-memoize": "2.2.7", + "@formatjs/icu-messageformat-parser": "2.11.2", + "tslib": "^2.8.0" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -3621,7 +6819,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -3906,7 +7103,6 @@ "version": "1.21.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "dev": true, "bin": { "jiti": "bin/jiti.js" } @@ -4072,7 +7268,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, "engines": { "node": ">=10" } @@ -4316,6 +7511,21 @@ "node": ">=10" } }, + "node_modules/motion-dom": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.12.tgz", + "integrity": "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4325,7 +7535,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -4497,7 +7706,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -4535,7 +7743,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, "engines": { "node": ">= 6" } @@ -4810,7 +8017,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -4819,7 +8025,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, "engines": { "node": ">= 6" } @@ -4828,7 +8033,6 @@ "version": "8.4.35", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4856,7 +8060,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -4873,7 +8076,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "dependencies": { "camelcase-css": "^2.0.1" }, @@ -4892,7 +8094,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.11" }, @@ -4911,7 +8112,6 @@ "version": "6.0.13", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -4936,8 +8136,7 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -5236,6 +8435,23 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/react-textarea-autosize": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz", + "integrity": "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -5256,7 +8472,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, "dependencies": { "pify": "^2.3.0" } @@ -5278,7 +8493,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -5498,6 +8712,15 @@ "loose-envify": "^1.1.0" } }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.0.10.tgz", + "integrity": "sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, "node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -5554,6 +8777,21 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -5738,7 +8976,6 @@ "version": "3.32.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -5760,7 +8997,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -5774,7 +9010,6 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5843,11 +9078,39 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", "license": "MIT" }, + "node_modules/tailwind-merge": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", + "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwind-variants": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-2.0.1.tgz", + "integrity": "sha512-1wt8c4PWO3jbZcKGBrjIV8cehWarREw1C2os0k8Mcq0nof/CbafNhUUjb0LRWiiRfAvDK6v1deswtHLsygKglw==", + "license": "MIT", + "engines": { + "node": ">=16.x", + "pnpm": ">=7.x" + }, + "peerDependencies": { + "tailwind-merge": ">=3.0.0", + "tailwindcss": "*" + }, + "peerDependenciesMeta": { + "tailwind-merge": { + "optional": true + } + } + }, "node_modules/tailwindcss": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", - "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -5884,7 +9147,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, "dependencies": { "lilconfig": "^2.0.5", "yaml": "^2.1.1" @@ -5913,7 +9175,6 @@ "version": "6.0.13", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -5926,7 +9187,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, "engines": { "node": ">= 14" } @@ -5973,7 +9233,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "dependencies": { "any-promise": "^1.0.0" } @@ -5982,7 +9241,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -6045,8 +9303,7 @@ "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "node_modules/tsconfig-paths": { "version": "3.14.1", @@ -6060,9 +9317,10 @@ } }, "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", @@ -6199,12 +9457,58 @@ "punycode": "^2.1.0" } }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "node_modules/use-composed-ref": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", + "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", + "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", + "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", + "license": "MIT", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/util-deprecate": { @@ -6414,8 +9718,7 @@ "@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" }, "@babel/code-frame": { "version": "7.18.6", @@ -6668,6 +9971,52 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==" }, + "@formatjs/ecma402-abstract": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.4.tgz", + "integrity": "sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==", + "requires": { + "@formatjs/fast-memoize": "2.2.7", + "@formatjs/intl-localematcher": "0.6.1", + "decimal.js": "^10.4.3", + "tslib": "^2.8.0" + } + }, + "@formatjs/fast-memoize": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz", + "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==", + "requires": { + "tslib": "^2.8.0" + } + }, + "@formatjs/icu-messageformat-parser": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.2.tgz", + "integrity": "sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==", + "requires": { + "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/icu-skeleton-parser": "1.8.14", + "tslib": "^2.8.0" + } + }, + "@formatjs/icu-skeleton-parser": { + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.14.tgz", + "integrity": "sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==", + "requires": { + "@formatjs/ecma402-abstract": "2.3.4", + "tslib": "^2.8.0" + } + }, + "@formatjs/intl-localematcher": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.1.tgz", + "integrity": "sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==", + "requires": { + "tslib": "^2.8.0" + } + }, "@headlessui/react": { "version": "1.7.8", "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.8.tgz", @@ -6676,6 +10025,1132 @@ "client-only": "^0.0.1" } }, + "@heroui/aria-utils": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/aria-utils/-/aria-utils-2.2.21.tgz", + "integrity": "sha512-6R01UEqgOOlD+MgizCQfsP2yK8e7RAHhWM/MtXHSCjWG7Ud+Ys1HlZPaH8+BB1P6UqtHZScZQevUFq975YJ57Q==", + "requires": { + "@heroui/system": "2.4.20", + "@react-aria/utils": "3.30.0", + "@react-stately/collections": "3.12.6", + "@react-types/overlays": "3.9.0", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/dom-animation": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@heroui/dom-animation/-/dom-animation-2.1.10.tgz", + "integrity": "sha512-dt+0xdVPbORwNvFT5pnqV2ULLlSgOJeqlg/DMo97s9RWeD6rD4VedNY90c8C9meqWqGegQYBQ9ztsfX32mGEPA==", + "requires": {} + }, + "@heroui/form": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/@heroui/form/-/form-2.1.24.tgz", + "integrity": "sha512-zA6eeRXz8DS0kb8VMsiuRQOs4mtVmKgalNZ91xJSqD68CmdE4WI5Ig3rxB9jdl/fd1VVkO853GPp5mzizmNjvA==", + "requires": { + "@heroui/shared-utils": "2.1.10", + "@heroui/system": "2.4.20", + "@heroui/theme": "2.4.20", + "@react-stately/form": "3.2.0", + "@react-types/form": "3.7.14", + "@react-types/shared": "3.31.0" + }, + "dependencies": { + "@heroui/theme": { + "version": "2.4.20", + "resolved": "https://registry.npmjs.org/@heroui/theme/-/theme-2.4.20.tgz", + "integrity": "sha512-wJdsz7XS9M7xbNd0d1EaaK5dCZIEOSI7eCr5A6f5aM48mtqLaXfsj3gYsfCy7GkQAvtKWuicwKe5D94Xoma6GA==", + "requires": { + "@heroui/shared-utils": "2.1.10", + "clsx": "^1.2.1", + "color": "^4.2.3", + "color2k": "^2.0.3", + "deepmerge": "4.3.1", + "flat": "^5.0.2", + "tailwind-merge": "3.3.1", + "tailwind-variants": "2.0.1" + } + }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, + "tailwindcss": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", + "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", + "peer": true + } + } + }, + "@heroui/framer-utils": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/@heroui/framer-utils/-/framer-utils-2.1.20.tgz", + "integrity": "sha512-DigZrwJp3+ay7rnjIW4ZGXen4QmxDgdvg6xvBK5T6H3JLN6NN+F7kknjK+kFh7tOb1NzuanguribvsufGqMe4w==", + "requires": { + "@heroui/system": "2.4.20", + "@heroui/use-measure": "2.1.8" + } + }, + "@heroui/react": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@heroui/react/-/react-2.8.2.tgz", + "integrity": "sha512-Z0lG7N/jyCxRhh6CWb+WFEjbA6wyutYwAYyDAq5uOsGjRKUpAv5zm6ByNdS1YqrP4k8sp0g5HijXbLThQyR9BQ==", + "requires": { + "@heroui/accordion": "2.2.21", + "@heroui/alert": "2.2.24", + "@heroui/autocomplete": "2.3.26", + "@heroui/avatar": "2.2.20", + "@heroui/badge": "2.2.15", + "@heroui/breadcrumbs": "2.2.20", + "@heroui/button": "2.2.24", + "@heroui/calendar": "2.2.24", + "@heroui/card": "2.2.23", + "@heroui/checkbox": "2.3.24", + "@heroui/chip": "2.2.20", + "@heroui/code": "2.2.18", + "@heroui/date-input": "2.3.24", + "@heroui/date-picker": "2.3.25", + "@heroui/divider": "2.2.17", + "@heroui/drawer": "2.2.21", + "@heroui/dropdown": "2.3.24", + "@heroui/form": "2.1.24", + "@heroui/framer-utils": "2.1.20", + "@heroui/image": "2.2.15", + "@heroui/input": "2.4.25", + "@heroui/input-otp": "2.1.24", + "@heroui/kbd": "2.2.19", + "@heroui/link": "2.2.21", + "@heroui/listbox": "2.3.23", + "@heroui/menu": "2.2.23", + "@heroui/modal": "2.2.21", + "@heroui/navbar": "2.2.22", + "@heroui/number-input": "2.0.15", + "@heroui/pagination": "2.2.22", + "@heroui/popover": "2.3.24", + "@heroui/progress": "2.2.20", + "@heroui/radio": "2.3.24", + "@heroui/ripple": "2.2.18", + "@heroui/scroll-shadow": "2.3.16", + "@heroui/select": "2.4.25", + "@heroui/skeleton": "2.2.15", + "@heroui/slider": "2.4.21", + "@heroui/snippet": "2.2.25", + "@heroui/spacer": "2.2.18", + "@heroui/spinner": "2.2.21", + "@heroui/switch": "2.2.22", + "@heroui/system": "2.4.20", + "@heroui/table": "2.2.24", + "@heroui/tabs": "2.2.21", + "@heroui/theme": "2.4.20", + "@heroui/toast": "2.0.14", + "@heroui/tooltip": "2.2.21", + "@heroui/user": "2.2.20", + "@react-aria/visually-hidden": "3.8.26" + }, + "dependencies": { + "@heroui/accordion": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/accordion/-/accordion-2.2.21.tgz", + "integrity": "sha512-B873BeTgzxsq9+85/d0BCKFus4llxI6OJBJt+dLXslYdijzfrRhhA7vWzvhOsV3kIHPcTrUpS4iUDO/UhR/EEA==", + "requires": { + "@heroui/aria-utils": "2.2.21", + "@heroui/divider": "2.2.17", + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-accordion": "2.2.16", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-stately/tree": "3.9.1", + "@react-types/accordion": "3.0.0-alpha.26", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/alert": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/@heroui/alert/-/alert-2.2.24.tgz", + "integrity": "sha512-Yec/mykI3n14uJaCP4RTR6iXIa3cFsVF7dt51xFkb0X/h6fTIUiSwnH7hM7vacAHpq5letFcm5XNMj316R2PpA==", + "requires": { + "@heroui/button": "2.2.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@react-stately/utils": "3.10.8" + } + }, + "@heroui/autocomplete": { + "version": "2.3.26", + "resolved": "https://registry.npmjs.org/@heroui/autocomplete/-/autocomplete-2.3.26.tgz", + "integrity": "sha512-njdBN9mIM3zUJ2EvSjBBdm8tjRgL5FFQrsgR/OWCdLGui1n1A7h/bF6o5AWZkcDDX5jP1hsGZDtQ+28frorjtw==", + "requires": { + "@heroui/aria-utils": "2.2.21", + "@heroui/button": "2.2.24", + "@heroui/form": "2.1.24", + "@heroui/input": "2.4.25", + "@heroui/listbox": "2.3.23", + "@heroui/popover": "2.3.24", + "@heroui/react-utils": "2.1.12", + "@heroui/scroll-shadow": "2.3.16", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/combobox": "3.13.0", + "@react-aria/i18n": "3.12.11", + "@react-stately/combobox": "3.11.0", + "@react-types/combobox": "3.13.7", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/avatar": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/@heroui/avatar/-/avatar-2.2.20.tgz", + "integrity": "sha512-wqbgEQQwEyG42EtpiVdy75JsHiJspC9bBusZYB+LIzV3hMO7Gt70rD4W6TShO+L7VA/S1UfHqGL06oYUC7K7ew==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-image": "2.1.11", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4" + } + }, + "@heroui/badge": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@heroui/badge/-/badge-2.2.15.tgz", + "integrity": "sha512-wdxMBH+FkfqPZrv2FP9aqenKG5EeOH2i9mSopMHP+o4ZaWW5lmKYqjN1lQ5DXCO4XaDtY4jOWEExp4UJ2e7rKg==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10" + } + }, + "@heroui/breadcrumbs": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/@heroui/breadcrumbs/-/breadcrumbs-2.2.20.tgz", + "integrity": "sha512-lH3MykNKF91bbgXRamtKhfnkzmMyfbqErWgnRVVH4j0ae5I8lWuWcmrDlOIrfhzQf+6xv6Mt2uUE2074FOwYmw==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@react-aria/breadcrumbs": "3.5.27", + "@react-aria/focus": "3.21.0", + "@react-types/breadcrumbs": "3.7.15" + } + }, + "@heroui/button": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/@heroui/button/-/button-2.2.24.tgz", + "integrity": "sha512-PR4CZaDSSAGYPv7uUNRc9FAJkNtMgcNUdnD0qxQoJDQoB/C6LLLgROqc/iHaKX9aEH5JYIISbMxTIcJtY2Zk2A==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/ripple": "2.2.18", + "@heroui/shared-utils": "2.1.10", + "@heroui/spinner": "2.2.21", + "@heroui/use-aria-button": "2.2.18", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/calendar": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/@heroui/calendar/-/calendar-2.2.24.tgz", + "integrity": "sha512-zUJ/m8uAVEn53FcKN6B2a+BtjXAsSicu8M667aKyaGgVFwOTWgH5miFvD/xLyFu+gAF/LBrC6ysDQMdHdiKKBQ==", + "requires": { + "@heroui/button": "2.2.24", + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-button": "2.2.18", + "@internationalized/date": "3.8.2", + "@react-aria/calendar": "3.9.0", + "@react-aria/focus": "3.21.0", + "@react-aria/i18n": "3.12.11", + "@react-aria/interactions": "3.25.4", + "@react-aria/visually-hidden": "3.8.26", + "@react-stately/calendar": "3.8.3", + "@react-stately/utils": "3.10.8", + "@react-types/button": "3.13.0", + "@react-types/calendar": "3.7.3", + "@react-types/shared": "3.31.0", + "scroll-into-view-if-needed": "3.0.10" + } + }, + "@heroui/card": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/@heroui/card/-/card-2.2.23.tgz", + "integrity": "sha512-oMmZNr2/mGp/S+Ct8iyzAp4H+tLuT3G0dgHyRie7txj8en79RAy+yRPBYdSt3OpIWM/Zv9un3Dnxgmi/UGCo+A==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/ripple": "2.2.18", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-button": "2.2.18", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/checkbox": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/@heroui/checkbox/-/checkbox-2.3.24.tgz", + "integrity": "sha512-H/bcpYGeWB9WFhkkOPojO4ONrz5GIMzfAMYdaKOUFtLVl7B9yVca7HaKdNryAFtNSBd/QQAm/an7gh/OFxIgew==", + "requires": { + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-callback-ref": "2.1.8", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/checkbox": "3.16.0", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-stately/checkbox": "3.7.0", + "@react-stately/toggle": "3.9.0", + "@react-types/checkbox": "3.10.0", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/chip": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/@heroui/chip/-/chip-2.2.20.tgz", + "integrity": "sha512-BTYXeMcSeBPOZEFk4MDGTrcML/NLYmQn+xdlSdiv9b2dM/gEq1hpTizt+kpvNH7kF6BSUxM6zJearIGUZ7gf5w==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4" + } + }, + "@heroui/code": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/@heroui/code/-/code-2.2.18.tgz", + "integrity": "sha512-e8+5LoJw6GQs9ASlAjdHG/Ksgiu9AyPfmf6ElP0VNXuRbXEtiOO5gXJxxh81bxz05HQaQyL/mQZKqnxf+Zb6bA==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/system-rsc": "2.3.17" + } + }, + "@heroui/date-input": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/@heroui/date-input/-/date-input-2.3.24.tgz", + "integrity": "sha512-K1OFu8vv3oEgQ9GV2ipB+tJOsU/0+DsKWDiKiAISMt4OXilybncm2SrR05M5D36BM0jm5gofnNN7geMYBbhngQ==", + "requires": { + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@internationalized/date": "3.8.2", + "@react-aria/datepicker": "3.15.0", + "@react-aria/i18n": "3.12.11", + "@react-stately/datepicker": "3.15.0", + "@react-types/datepicker": "3.13.0", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/date-picker": { + "version": "2.3.25", + "resolved": "https://registry.npmjs.org/@heroui/date-picker/-/date-picker-2.3.25.tgz", + "integrity": "sha512-UHnn/RDHF4vVZcJ54U8hArknYcmEGyeNbhRNVtXKcRWQgrA7gi/S5ng9m8Wi/j+SbWK7KiPdVSwlk/1PQr5Vdw==", + "requires": { + "@heroui/aria-utils": "2.2.21", + "@heroui/button": "2.2.24", + "@heroui/calendar": "2.2.24", + "@heroui/date-input": "2.3.24", + "@heroui/form": "2.1.24", + "@heroui/popover": "2.3.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@internationalized/date": "3.8.2", + "@react-aria/datepicker": "3.15.0", + "@react-aria/i18n": "3.12.11", + "@react-stately/datepicker": "3.15.0", + "@react-stately/utils": "3.10.8", + "@react-types/datepicker": "3.13.0", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/divider": { + "version": "2.2.17", + "resolved": "https://registry.npmjs.org/@heroui/divider/-/divider-2.2.17.tgz", + "integrity": "sha512-/6u3mo3TLGOsxYftuHUamfgDYZARsk7esKSxwEeSJ1ufIuo/+Z+yPpaTfe3WUvha0VuwTfyLN99+puqdoTU3zQ==", + "requires": { + "@heroui/react-rsc-utils": "2.1.9", + "@heroui/system-rsc": "2.3.17", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/drawer": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/drawer/-/drawer-2.2.21.tgz", + "integrity": "sha512-pYFWOyIqX1gmMOsFxEfajWFjX32O1jDvei7Q9eHs4AVVw7DaeWtQUYovM/6p8yRp//X/bxNQpUhMvEFaIc/8yQ==", + "requires": { + "@heroui/framer-utils": "2.1.20", + "@heroui/modal": "2.2.21", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10" + } + }, + "@heroui/dropdown": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/@heroui/dropdown/-/dropdown-2.3.24.tgz", + "integrity": "sha512-xqvfCViiFW1jOqtRHvMT2mUe7FjTHPJswcyYL80ECRbToS5r9wYvljBgewzesm98l3d15ELGYr4dsqufqNJ9Cg==", + "requires": { + "@heroui/aria-utils": "2.2.21", + "@heroui/menu": "2.2.23", + "@heroui/popover": "2.3.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@react-aria/focus": "3.21.0", + "@react-aria/menu": "3.19.0", + "@react-stately/menu": "3.9.6", + "@react-types/menu": "3.10.3" + } + }, + "@heroui/image": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@heroui/image/-/image-2.2.15.tgz", + "integrity": "sha512-7/DIVZJh2CIZuzoRW9/XVLRyLTWsqNFQgEknEAjGudAUxlcu1dJ8ZuFBVC55SfPIrXE7WuGoiG1Q0B1iwW65IA==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-image": "2.1.11" + } + }, + "@heroui/input": { + "version": "2.4.25", + "resolved": "https://registry.npmjs.org/@heroui/input/-/input-2.4.25.tgz", + "integrity": "sha512-k5qYabB2wBmRQvrbGb9gk/KjK97H11rzQyvGsJXdoRbRMxoDB2sczpG08IqY1ecHXQT5bHqJ3Qgh6q1ZN+MYxg==", + "requires": { + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/textfield": "3.18.0", + "@react-stately/utils": "3.10.8", + "@react-types/shared": "3.31.0", + "@react-types/textfield": "3.12.4", + "react-textarea-autosize": "^8.5.3" + } + }, + "@heroui/input-otp": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/@heroui/input-otp/-/input-otp-2.1.24.tgz", + "integrity": "sha512-t8zT8mRt/pLR4u1Qw/eyVLCSSvgYehVVXbPor++SVtWAtNMpKp5GuY3CmKsxujZ2BJU8f2itVgHo0UryEXKdRg==", + "requires": { + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-form-reset": "2.0.1", + "@react-aria/focus": "3.21.0", + "@react-aria/form": "3.1.0", + "@react-stately/form": "3.2.0", + "@react-stately/utils": "3.10.8", + "@react-types/textfield": "3.12.4", + "input-otp": "1.4.1" + } + }, + "@heroui/kbd": { + "version": "2.2.19", + "resolved": "https://registry.npmjs.org/@heroui/kbd/-/kbd-2.2.19.tgz", + "integrity": "sha512-PP8fMPRVMGqJU3T5ufyjPUrguBxNstdBLIqiwk4G6TXBTrTkfMxTYVNG+gvsB6tjzmVjPsHpv2IvCjG4arLojw==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/system-rsc": "2.3.17" + } + }, + "@heroui/link": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/link/-/link-2.2.21.tgz", + "integrity": "sha512-s2jUESfwx+dYvKjM/ct1XAl/hJcEdSykmOt/X9L5YSaGqhhaFzk1QvlUcz0Byu+WAN0OjxRZxAEbEV642IjNDw==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-link": "2.2.19", + "@react-aria/focus": "3.21.0", + "@react-types/link": "3.6.3" + } + }, + "@heroui/listbox": { + "version": "2.3.23", + "resolved": "https://registry.npmjs.org/@heroui/listbox/-/listbox-2.3.23.tgz", + "integrity": "sha512-8lZupiqN6J7mNR9gbpz8kDRIdInUXrXc+anInxSDGbL7z+PYgnJ+dqice2yJyRZy/8eT5ZpTdfdV/aw9DluNyA==", + "requires": { + "@heroui/aria-utils": "2.2.21", + "@heroui/divider": "2.2.17", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-is-mobile": "2.2.12", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/listbox": "3.14.7", + "@react-stately/list": "3.12.4", + "@react-types/shared": "3.31.0", + "@tanstack/react-virtual": "3.11.3" + } + }, + "@heroui/menu": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/@heroui/menu/-/menu-2.2.23.tgz", + "integrity": "sha512-Q2X+7dGxiHmTDnlboOi757biHkbci4zpukMDIi7i2UzHdw1SraH/A2K7bUdGMP+7+KxwSDmj19e0/ZHV/TWtaQ==", + "requires": { + "@heroui/aria-utils": "2.2.21", + "@heroui/divider": "2.2.17", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-is-mobile": "2.2.12", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/menu": "3.19.0", + "@react-stately/tree": "3.9.1", + "@react-types/menu": "3.10.3", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/modal": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/modal/-/modal-2.2.21.tgz", + "integrity": "sha512-VZDwDS+UnYrpCYvqkGTIlm9ADy7s8vvQo1ueLts7WCSYpMxWu6YDnJpkHnth2AyhEzdXGIskbMm96TZW5jwdAQ==", + "requires": { + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-button": "2.2.18", + "@heroui/use-aria-modal-overlay": "2.2.17", + "@heroui/use-disclosure": "2.2.15", + "@heroui/use-draggable": "2.1.16", + "@heroui/use-viewport-size": "2.0.1", + "@react-aria/dialog": "3.5.28", + "@react-aria/focus": "3.21.0", + "@react-aria/overlays": "3.28.0", + "@react-stately/overlays": "3.6.18" + } + }, + "@heroui/navbar": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/@heroui/navbar/-/navbar-2.2.22.tgz", + "integrity": "sha512-EMeg18Y3RWQBf0EfSi9pYfCzMva60d0bD1JgZE6IkSjrHJp+iOu9d9y32MlSsUX0sUvjeowYuYeVwg80d9vJqA==", + "requires": { + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-resize": "2.1.8", + "@heroui/use-scroll-position": "2.1.8", + "@react-aria/button": "3.14.0", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/overlays": "3.28.0", + "@react-stately/toggle": "3.9.0", + "@react-stately/utils": "3.10.8" + } + }, + "@heroui/number-input": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@heroui/number-input/-/number-input-2.0.15.tgz", + "integrity": "sha512-GSyHAxbVVfdrmcHzNoJlS4+rWTlRPugT0yHDDI8Yg+JjJ05PTPxEVeNrKnx7dwu3bs2yEreDhBDd5wt/IUZ0kQ==", + "requires": { + "@heroui/button": "2.2.24", + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/focus": "3.21.0", + "@react-aria/i18n": "3.12.11", + "@react-aria/interactions": "3.25.4", + "@react-aria/numberfield": "3.12.0", + "@react-stately/numberfield": "3.10.0", + "@react-types/button": "3.13.0", + "@react-types/numberfield": "3.8.13", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/pagination": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/@heroui/pagination/-/pagination-2.2.22.tgz", + "integrity": "sha512-HKv4bBSIh+AFkr+mLOL+Qhdt6blL0AtMrAY/WXXTr7yMOKKZsGDBuTgANTgp2yw8z52gX9hm0xs0kZs/73noHA==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-intersection-observer": "2.2.14", + "@heroui/use-pagination": "2.2.16", + "@react-aria/focus": "3.21.0", + "@react-aria/i18n": "3.12.11", + "@react-aria/interactions": "3.25.4", + "@react-aria/utils": "3.30.0", + "scroll-into-view-if-needed": "3.0.10" + } + }, + "@heroui/popover": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/@heroui/popover/-/popover-2.3.24.tgz", + "integrity": "sha512-ZIVGgqg2RAeRisMNhtJEfOk+yvitk0t7RzcQxd6Has/XkNPXStWEmpjW9wI5P9/RPj76ix4fS7ZArQefX+VHUg==", + "requires": { + "@heroui/aria-utils": "2.2.21", + "@heroui/button": "2.2.24", + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-button": "2.2.18", + "@heroui/use-aria-overlay": "2.0.2", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/dialog": "3.5.28", + "@react-aria/focus": "3.21.0", + "@react-aria/overlays": "3.28.0", + "@react-stately/overlays": "3.6.18", + "@react-types/overlays": "3.9.0" + } + }, + "@heroui/progress": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/@heroui/progress/-/progress-2.2.20.tgz", + "integrity": "sha512-TMnMh/TPGDPr2c91tcD5JyWRph74xENLcaV/jIihh9UZpKKLrzoU1rTCjKbqaK7Dz9y5fcgM8vVAZmf7SK3mWA==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-is-mounted": "2.1.8", + "@react-aria/progress": "3.4.25", + "@react-types/progress": "3.5.14" + } + }, + "@heroui/radio": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/@heroui/radio/-/radio-2.3.24.tgz", + "integrity": "sha512-IQ1cwsIAff1JvlpqK5El/b2z6JTDqWK8XiTkElvEy4QkY29uIINkYy6kXqbKyZx14pKN0ILou6Z/iR8QUq304g==", + "requires": { + "@heroui/form": "2.1.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/radio": "3.12.0", + "@react-aria/visually-hidden": "3.8.26", + "@react-stately/radio": "3.11.0", + "@react-types/radio": "3.9.0", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/ripple": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/@heroui/ripple/-/ripple-2.2.18.tgz", + "integrity": "sha512-EAZrF6hLJTBiv1sF6R3Wfj/pAIO2yIdVNT2vzaNEXEInrB/fFJlnxfka4p89JjuPl3tiC9jAfavv+zK9YhyBag==", + "requires": { + "@heroui/dom-animation": "2.1.10", + "@heroui/shared-utils": "2.1.10" + } + }, + "@heroui/scroll-shadow": { + "version": "2.3.16", + "resolved": "https://registry.npmjs.org/@heroui/scroll-shadow/-/scroll-shadow-2.3.16.tgz", + "integrity": "sha512-T1zTUjSOpmefMTacFQJFrgssY2BBUO+ZoGQnCiybY+XSZDiuMDmOEjNxC71VUuaHXOzYvhLwmzJY4ZnaUOTlXw==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-data-scroll-overflow": "2.2.11" + } + }, + "@heroui/select": { + "version": "2.4.25", + "resolved": "https://registry.npmjs.org/@heroui/select/-/select-2.4.25.tgz", + "integrity": "sha512-vJoIcRsuh340jvG0JI3NkkvG7iHfflyuxf3hJ4UFAiz+oXxjL1TASToHsIlSiwYZtv1Ihdy89b8Jjfrpa0n89g==", + "requires": { + "@heroui/aria-utils": "2.2.21", + "@heroui/form": "2.1.24", + "@heroui/listbox": "2.3.23", + "@heroui/popover": "2.3.24", + "@heroui/react-utils": "2.1.12", + "@heroui/scroll-shadow": "2.3.16", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/spinner": "2.2.21", + "@heroui/use-aria-button": "2.2.18", + "@heroui/use-aria-multiselect": "2.4.17", + "@heroui/use-form-reset": "2.0.1", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/focus": "3.21.0", + "@react-aria/form": "3.1.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/overlays": "3.28.0", + "@react-aria/visually-hidden": "3.8.26", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/skeleton": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@heroui/skeleton/-/skeleton-2.2.15.tgz", + "integrity": "sha512-Y0nRETaOuF5a1VQy6jPczEM4+MQ9dIJVUSDv2WwJeFBnSs47aNKjOj0ooHaECreynOcKcSqC6hdzKCnN2upKrw==", + "requires": { + "@heroui/shared-utils": "2.1.10" + } + }, + "@heroui/slider": { + "version": "2.4.21", + "resolved": "https://registry.npmjs.org/@heroui/slider/-/slider-2.4.21.tgz", + "integrity": "sha512-vinWQq8h5f5V5kiuyNmSAIiPbByj8NQz2n6saYxP3R1++n2ywGE/dDWofZV10mfR9XiC8fLtdTxAs/u717E7Mw==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/tooltip": "2.2.21", + "@react-aria/focus": "3.21.0", + "@react-aria/i18n": "3.12.11", + "@react-aria/interactions": "3.25.4", + "@react-aria/slider": "3.8.0", + "@react-aria/visually-hidden": "3.8.26", + "@react-stately/slider": "3.7.0" + } + }, + "@heroui/snippet": { + "version": "2.2.25", + "resolved": "https://registry.npmjs.org/@heroui/snippet/-/snippet-2.2.25.tgz", + "integrity": "sha512-o1qSv6Vlzm4MDxlGcWBovNqDDmbIv50tFgdWtqLbo2rXfO6OuqLxP2IBKC0fyT8r7zXB3lYrG+3BP7Ok/5zcbw==", + "requires": { + "@heroui/button": "2.2.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/tooltip": "2.2.21", + "@heroui/use-clipboard": "2.1.9", + "@react-aria/focus": "3.21.0" + } + }, + "@heroui/spacer": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/@heroui/spacer/-/spacer-2.2.18.tgz", + "integrity": "sha512-EHUIyWt2w0viR7oSqhbZPP4fHuILOdcq7ejAhid7rqhsJSjfixQQ/V4OY7D8vpzi7KmlyrkfpkjAZqAApiEbuA==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/system-rsc": "2.3.17" + } + }, + "@heroui/spinner": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/spinner/-/spinner-2.2.21.tgz", + "integrity": "sha512-8rBUwVcVESlHfguRXkgC4p7UEymAAUL/E+nOCfqOHqr308bKhVrS2lSjfeRMBGEJqWLf3m5AMhRfwpRbcSVHWg==", + "requires": { + "@heroui/shared-utils": "2.1.10", + "@heroui/system": "2.4.20", + "@heroui/system-rsc": "2.3.17" + } + }, + "@heroui/switch": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/@heroui/switch/-/switch-2.2.22.tgz", + "integrity": "sha512-EwWEKCzHqZT7oj8iYudDdVsZtoCZRCTGQyS5PutETUXvgOAj3fXFWegrLAPPaIeZggguvS3nIVjgaKUnPS2/Fw==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/switch": "3.7.6", + "@react-aria/visually-hidden": "3.8.26", + "@react-stately/toggle": "3.9.0" + } + }, + "@heroui/system-rsc": { + "version": "2.3.17", + "resolved": "https://registry.npmjs.org/@heroui/system-rsc/-/system-rsc-2.3.17.tgz", + "integrity": "sha512-XtQJpLN8HkLYJsvfyBWA/RE8w3PJzEjItwGZ0NACCKRiwkQL205WXJNlkzXsO2/+Y7fEKXkqTMNpQYEhnUlEpw==", + "requires": { + "@react-types/shared": "3.31.0", + "clsx": "^1.2.1" + } + }, + "@heroui/table": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/@heroui/table/-/table-2.2.24.tgz", + "integrity": "sha512-R3jsgmqGqVAI5rxy0MbcL2lOZwJSbaHSDBEPtDj1UCrPlQC7O+VhKMC9D3I0MaX+bCVDfm0wMYmu5mNjmXGXnQ==", + "requires": { + "@heroui/checkbox": "2.3.24", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/spacer": "2.2.18", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/table": "3.17.6", + "@react-aria/visually-hidden": "3.8.26", + "@react-stately/table": "3.14.4", + "@react-stately/virtualizer": "4.4.2", + "@react-types/grid": "3.3.4", + "@react-types/table": "3.13.2", + "@tanstack/react-virtual": "3.11.3" + } + }, + "@heroui/tabs": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/tabs/-/tabs-2.2.21.tgz", + "integrity": "sha512-vZAmK7d5i9FE9n78jgJWI6jSHofam4CQSD6ejoefuSWPQZ1nJSgkZrMkTKQuXlvjK+zYy5yvkdj1B8PKq1XaIA==", + "requires": { + "@heroui/aria-utils": "2.2.21", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-is-mounted": "2.1.8", + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/tabs": "3.10.6", + "@react-stately/tabs": "3.8.4", + "@react-types/shared": "3.31.0", + "scroll-into-view-if-needed": "3.0.10" + } + }, + "@heroui/theme": { + "version": "2.4.20", + "resolved": "https://registry.npmjs.org/@heroui/theme/-/theme-2.4.20.tgz", + "integrity": "sha512-wJdsz7XS9M7xbNd0d1EaaK5dCZIEOSI7eCr5A6f5aM48mtqLaXfsj3gYsfCy7GkQAvtKWuicwKe5D94Xoma6GA==", + "requires": { + "@heroui/shared-utils": "2.1.10", + "clsx": "^1.2.1", + "color": "^4.2.3", + "color2k": "^2.0.3", + "deepmerge": "4.3.1", + "flat": "^5.0.2", + "tailwind-merge": "3.3.1", + "tailwind-variants": "2.0.1" + } + }, + "@heroui/toast": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@heroui/toast/-/toast-2.0.14.tgz", + "integrity": "sha512-rYOIl+Nj9EfpBEbZ0fpRiZvKYMQrOntscvIQhQgxvCr3j/5AydKbkA2s+yncHxLj/eDoYaaCCZncbj/Q72ndkA==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/shared-icons": "2.1.10", + "@heroui/shared-utils": "2.1.10", + "@heroui/spinner": "2.2.21", + "@heroui/use-is-mobile": "2.2.12", + "@react-aria/interactions": "3.25.4", + "@react-aria/toast": "3.0.6", + "@react-stately/toast": "3.1.2" + } + }, + "@heroui/tooltip": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/@heroui/tooltip/-/tooltip-2.2.21.tgz", + "integrity": "sha512-ob3XeFir06zeeV6Lq6yCmagSNzwMpEQfsNXP0hisPNamCrJXH2OmrGU01nOmBBMLusBmhQ43Cc3OPDCAyKxUfA==", + "requires": { + "@heroui/aria-utils": "2.2.21", + "@heroui/dom-animation": "2.1.10", + "@heroui/framer-utils": "2.1.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@heroui/use-aria-overlay": "2.0.2", + "@heroui/use-safe-layout-effect": "2.1.8", + "@react-aria/overlays": "3.28.0", + "@react-aria/tooltip": "3.8.6", + "@react-stately/tooltip": "3.5.6", + "@react-types/overlays": "3.9.0", + "@react-types/tooltip": "3.4.19" + } + }, + "@heroui/user": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/@heroui/user/-/user-2.2.20.tgz", + "integrity": "sha512-KnqFtiZR18nlpSEJzA6/aGhNMnuWjQx6L7JbF8kAA2CdhHEBABRIsqKN1qBRon7awMilzBOvlHe6yuk1sEqJHg==", + "requires": { + "@heroui/avatar": "2.2.20", + "@heroui/react-utils": "2.1.12", + "@heroui/shared-utils": "2.1.10", + "@react-aria/focus": "3.21.0" + } + }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, + "tailwindcss": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", + "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", + "peer": true + } + } + }, + "@heroui/react-rsc-utils": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@heroui/react-rsc-utils/-/react-rsc-utils-2.1.9.tgz", + "integrity": "sha512-e77OEjNCmQxE9/pnLDDb93qWkX58/CcgIqdNAczT/zUP+a48NxGq2A2WRimvc1uviwaNL2StriE2DmyZPyYW7Q==", + "requires": {} + }, + "@heroui/react-utils": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@heroui/react-utils/-/react-utils-2.1.12.tgz", + "integrity": "sha512-D+EYFMtBuWGrtsw+CklgAHtQfT17wZcjmKIvUMGOjAFFSLHG9NJd7yOrsZGk90OuJVQ3O1Gj3MfchEmUXidxyw==", + "requires": { + "@heroui/react-rsc-utils": "2.1.9", + "@heroui/shared-utils": "2.1.10" + } + }, + "@heroui/shared-icons": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@heroui/shared-icons/-/shared-icons-2.1.10.tgz", + "integrity": "sha512-ePo60GjEpM0SEyZBGOeySsLueNDCqLsVL79Fq+5BphzlrBAcaKY7kUp74964ImtkXvknTxAWzuuTr3kCRqj6jg==", + "requires": {} + }, + "@heroui/shared-utils": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@heroui/shared-utils/-/shared-utils-2.1.10.tgz", + "integrity": "sha512-w6pSRZZBNDG5/aFueSDUWqOIzqUjKojukg7FxTnVeUX+vIlnYV2Wfv+W+C4l+OV7o0t8emeoe5tXZh8QcLEZEQ==" + }, + "@heroui/system": { + "version": "2.4.20", + "resolved": "https://registry.npmjs.org/@heroui/system/-/system-2.4.20.tgz", + "integrity": "sha512-bLl86ghOjsk8JLarLfL8wkuiNySJS1PHtd0mpGbAjVRQZYp4wH27R7hYBV55dre8Zw+nIRq58PgILdos7F+e0w==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/system-rsc": "2.3.17", + "@react-aria/i18n": "3.12.11", + "@react-aria/overlays": "3.28.0", + "@react-aria/utils": "3.30.0" + }, + "dependencies": { + "@heroui/system-rsc": { + "version": "2.3.17", + "resolved": "https://registry.npmjs.org/@heroui/system-rsc/-/system-rsc-2.3.17.tgz", + "integrity": "sha512-XtQJpLN8HkLYJsvfyBWA/RE8w3PJzEjItwGZ0NACCKRiwkQL205WXJNlkzXsO2/+Y7fEKXkqTMNpQYEhnUlEpw==", + "requires": { + "@react-types/shared": "3.31.0", + "clsx": "^1.2.1" + } + }, + "@heroui/theme": { + "version": "2.4.20", + "resolved": "https://registry.npmjs.org/@heroui/theme/-/theme-2.4.20.tgz", + "integrity": "sha512-wJdsz7XS9M7xbNd0d1EaaK5dCZIEOSI7eCr5A6f5aM48mtqLaXfsj3gYsfCy7GkQAvtKWuicwKe5D94Xoma6GA==", + "peer": true, + "requires": { + "@heroui/shared-utils": "2.1.10", + "clsx": "^1.2.1", + "color": "^4.2.3", + "color2k": "^2.0.3", + "deepmerge": "4.3.1", + "flat": "^5.0.2", + "tailwind-merge": "3.3.1", + "tailwind-variants": "2.0.1" + } + }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, + "tailwindcss": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", + "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", + "peer": true + } + } + }, + "@heroui/use-aria-accordion": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-accordion/-/use-aria-accordion-2.2.16.tgz", + "integrity": "sha512-+1YGkxh8dlfHgGfwPc8M1f3hox0dLH6jDxc2cX6HupzZDsIcqerVBo0vppl3t+3DXSyia0BGROa5kuJJOoCUcA==", + "requires": { + "@react-aria/button": "3.14.0", + "@react-aria/focus": "3.21.0", + "@react-aria/selection": "3.25.0", + "@react-stately/tree": "3.9.1", + "@react-types/accordion": "3.0.0-alpha.26", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/use-aria-button": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-button/-/use-aria-button-2.2.18.tgz", + "integrity": "sha512-z2Z2WQSRYG8k23tEzD/+4PueY3Tuk14Ovt74pqW9+zRKffloPEqmj3txGq9Ja5lUQpz22TWR0dtvbxwITJHf6Q==", + "requires": { + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/utils": "3.30.0", + "@react-types/button": "3.13.0", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/use-aria-link": { + "version": "2.2.19", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-link/-/use-aria-link-2.2.19.tgz", + "integrity": "sha512-833sZSPMq/sBX14MR7yG2xEmGCbeSm/Bx8/TO6usNB37f2xf179xl6GslDMRVxpAjBcgRI9MtP2qBM1ngJbhmw==", + "requires": { + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/utils": "3.30.0", + "@react-types/link": "3.6.3", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/use-aria-modal-overlay": { + "version": "2.2.17", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-modal-overlay/-/use-aria-modal-overlay-2.2.17.tgz", + "integrity": "sha512-exLtnPX31BUJ7Iq6IH7d/Z8MfoCm9GpQ03B332KBLRbHMM+pye3P1h74lNtdQzIf0OHFSMstJ4gLSs4jx3t6KQ==", + "requires": { + "@heroui/use-aria-overlay": "2.0.2", + "@react-aria/overlays": "3.28.0", + "@react-aria/utils": "3.30.0", + "@react-stately/overlays": "3.6.18" + } + }, + "@heroui/use-aria-multiselect": { + "version": "2.4.17", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-multiselect/-/use-aria-multiselect-2.4.17.tgz", + "integrity": "sha512-gU6et+auSJV28umz1YJnxjavuMpOvpfym9IhNe59za/Y/mNIwdHJwcEwbL5qc2eK0AFKYuhqMYsv2iaPs4qcMg==", + "requires": { + "@react-aria/i18n": "3.12.11", + "@react-aria/interactions": "3.25.4", + "@react-aria/label": "3.7.20", + "@react-aria/listbox": "3.14.7", + "@react-aria/menu": "3.19.0", + "@react-aria/selection": "3.25.0", + "@react-aria/utils": "3.30.0", + "@react-stately/form": "3.2.0", + "@react-stately/list": "3.12.4", + "@react-stately/menu": "3.9.6", + "@react-types/button": "3.13.0", + "@react-types/overlays": "3.9.0", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/use-aria-overlay": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@heroui/use-aria-overlay/-/use-aria-overlay-2.0.2.tgz", + "integrity": "sha512-pujpue203ii/FukApYGfkeTrT1i80t77SUPR7u1er3dkRCUruksvr1AiPQlsUec1UkIpe/jkXpG3Yb+DldsjRg==", + "requires": { + "@react-aria/focus": "3.21.0", + "@react-aria/interactions": "3.25.4", + "@react-aria/overlays": "3.28.0", + "@react-types/shared": "3.31.0" + } + }, + "@heroui/use-callback-ref": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-callback-ref/-/use-callback-ref-2.1.8.tgz", + "integrity": "sha512-D1JDo9YyFAprYpLID97xxQvf86NvyWLay30BeVVZT9kWmar6O9MbCRc7ACi7Ngko60beonj6+amTWkTm7QuY/Q==", + "requires": { + "@heroui/use-safe-layout-effect": "2.1.8" + } + }, + "@heroui/use-clipboard": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@heroui/use-clipboard/-/use-clipboard-2.1.9.tgz", + "integrity": "sha512-lkBq5RpXHiPvk1BXKJG8gMM0f7jRMIGnxAXDjAUzZyXKBuWLoM+XlaUWmZHtmkkjVFMX1L4vzA+vxi9rZbenEQ==", + "requires": {} + }, + "@heroui/use-data-scroll-overflow": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/@heroui/use-data-scroll-overflow/-/use-data-scroll-overflow-2.2.11.tgz", + "integrity": "sha512-5H7Q31Ub+O7GygbuaNFrItB4VVLGg2wjr4lXD2o414TgfnaSNPNc0Fb6E6A6m0/f6u7fpf98YURoDx+LFkkroA==", + "requires": { + "@heroui/shared-utils": "2.1.10" + } + }, + "@heroui/use-disclosure": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@heroui/use-disclosure/-/use-disclosure-2.2.15.tgz", + "integrity": "sha512-a29HObRfjb6pQ7lvv/WZbvXhGv4BLI4fDrEnVnybfFdC3pCmwyoZxOuqraiDT8IXvVFIiuIcX6719ezruo64kQ==", + "requires": { + "@heroui/use-callback-ref": "2.1.8", + "@react-aria/utils": "3.30.0", + "@react-stately/utils": "3.10.8" + } + }, + "@heroui/use-draggable": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@heroui/use-draggable/-/use-draggable-2.1.16.tgz", + "integrity": "sha512-IcpdnMLmcIDeo7EG41VHSE2jBbYP5dEyNThFirReNh8fMZ6rW2hAd0lf0M0/R5kgTSKUxdNhecY6csDedP+8gA==", + "requires": { + "@react-aria/interactions": "3.25.4" + } + }, + "@heroui/use-form-reset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@heroui/use-form-reset/-/use-form-reset-2.0.1.tgz", + "integrity": "sha512-6slKWiLtVfgZnVeHVkM9eXgjwI07u0CUaLt2kQpfKPqTSTGfbHgCYJFduijtThhTdKBhdH6HCmzTcnbVlAxBXw==", + "requires": {} + }, + "@heroui/use-image": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@heroui/use-image/-/use-image-2.1.11.tgz", + "integrity": "sha512-zG3MsPvTSqW69hSDIxHsNJPJfkLoZA54x0AkwOTiqiFh5Z+3ZaQvMTn31vbuMIKmHRpHkkZOTc85cqpAB1Ct4w==", + "requires": { + "@heroui/react-utils": "2.1.12", + "@heroui/use-safe-layout-effect": "2.1.8" + } + }, + "@heroui/use-intersection-observer": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/@heroui/use-intersection-observer/-/use-intersection-observer-2.2.14.tgz", + "integrity": "sha512-qYJeMk4cTsF+xIckRctazCgWQ4BVOpJu+bhhkB1NrN+MItx19Lcb7ksOqMdN5AiSf85HzDcAEPIQ9w9RBlt5sg==", + "requires": {} + }, + "@heroui/use-is-mobile": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@heroui/use-is-mobile/-/use-is-mobile-2.2.12.tgz", + "integrity": "sha512-2UKa4v1xbvFwerWKoMTrg4q9ZfP9MVIVfCl1a7JuKQlXq3jcyV6z1as5bZ41pCsTOT+wUVOFnlr6rzzQwT9ZOA==", + "requires": { + "@react-aria/ssr": "3.9.10" + } + }, + "@heroui/use-is-mounted": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-is-mounted/-/use-is-mounted-2.1.8.tgz", + "integrity": "sha512-DO/Th1vD4Uy8KGhd17oGlNA4wtdg91dzga+VMpmt94gSZe1WjsangFwoUBxF2uhlzwensCX9voye3kerP/lskg==", + "requires": {} + }, + "@heroui/use-measure": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-measure/-/use-measure-2.1.8.tgz", + "integrity": "sha512-GjT9tIgluqYMZWfAX6+FFdRQBqyHeuqUMGzAXMTH9kBXHU0U5C5XU2c8WFORkNDoZIg1h13h1QdV+Vy4LE1dEA==", + "requires": {} + }, + "@heroui/use-pagination": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@heroui/use-pagination/-/use-pagination-2.2.16.tgz", + "integrity": "sha512-EF0MyFRBglTPhcxBlyt+omdgBjLn7mKzQOJuNs1KaBQJBEoe+XPV0eVBleXu32UTz5Q89SsMYGMNbOgpxeU8SA==", + "requires": { + "@heroui/shared-utils": "2.1.10", + "@react-aria/i18n": "3.12.11" + } + }, + "@heroui/use-resize": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-resize/-/use-resize-2.1.8.tgz", + "integrity": "sha512-htF3DND5GmrSiMGnzRbISeKcH+BqhQ/NcsP9sBTIl7ewvFaWiDhEDiUHdJxflmJGd/c5qZq2nYQM/uluaqIkKA==", + "requires": {} + }, + "@heroui/use-safe-layout-effect": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-safe-layout-effect/-/use-safe-layout-effect-2.1.8.tgz", + "integrity": "sha512-wbnZxVWCYqk10XRMu0veSOiVsEnLcmGUmJiapqgaz0fF8XcpSScmqjTSoWjHIEWaHjQZ6xr+oscD761D6QJN+Q==", + "requires": {} + }, + "@heroui/use-scroll-position": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@heroui/use-scroll-position/-/use-scroll-position-2.1.8.tgz", + "integrity": "sha512-NxanHKObxVfWaPpNRyBR8v7RfokxrzcHyTyQfbgQgAGYGHTMaOGkJGqF8kBzInc3zJi+F0zbX7Nb0QjUgsLNUQ==", + "requires": {} + }, + "@heroui/use-viewport-size": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@heroui/use-viewport-size/-/use-viewport-size-2.0.1.tgz", + "integrity": "sha512-blv8BEB/QdLePLWODPRzRS2eELJ2eyHbdOIADbL0KcfLzOUEg9EiuVk90hcSUDAFqYiJ3YZ5Z0up8sdPcR8Y7g==", + "requires": {} + }, "@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -6696,29 +11171,58 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, + "@internationalized/date": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.2.tgz", + "integrity": "sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==", + "requires": { + "@swc/helpers": "^0.5.0" + } + }, + "@internationalized/message": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.8.tgz", + "integrity": "sha512-Rwk3j/TlYZhn3HQ6PyXUV0XP9Uv42jqZGNegt0BXlxjE6G3+LwHjbQZAGHhCnCPdaA6Tvd3ma/7QzLlLkJxAWA==", + "requires": { + "@swc/helpers": "^0.5.0", + "intl-messageformat": "^10.1.0" + } + }, + "@internationalized/number": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.4.tgz", + "integrity": "sha512-P+/h+RDaiX8EGt3shB9AYM1+QgkvHmJ5rKi4/59k4sg9g58k9rqsRW0WxRO7jCoHyvVbFRRFKmVTdFYdehrxHg==", + "requires": { + "@swc/helpers": "^0.5.0" + } + }, + "@internationalized/string": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.7.tgz", + "integrity": "sha512-D4OHBjrinH+PFZPvfCXvG28n2LSykWcJ7GIioQL+ok0LON15SdfoUssoHzzOUmVZLbRoREsQXVzA6r8JKsbP6A==", + "requires": { + "@swc/helpers": "^0.5.0" + } + }, "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -6859,6 +11363,1015 @@ "integrity": "sha512-5II+vbyzv4si6Yunwgkj0qT/iY0zyspttoDrL3R4BYgLdp42/d2C8xdi9vqkrYtKt9H32oFIukvyw3Koz5JoDg==", "requires": {} }, + "@react-aria/breadcrumbs": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.27.tgz", + "integrity": "sha512-fuXD9nvBaBVZO0Z6EntBlxQD621/2Ldcxz76jFjc4V/jNOq/6BIVQRtpnAYYrSTiW3ZV2IoAyxRWNxQU22hOow==", + "requires": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/link": "^3.8.4", + "@react-aria/utils": "^3.30.0", + "@react-types/breadcrumbs": "^3.7.15", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/button": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.14.0.tgz", + "integrity": "sha512-we6z+2GpZO8lGD6EPmYH2S87kLCpU14D2E3tD2vES+SS2sZM2qcm2dUGpeo4+gZqBToLWKEBAGCSlkWEtgS19A==", + "requires": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/toolbar": "3.0.0-beta.19", + "@react-aria/utils": "^3.30.0", + "@react-stately/toggle": "^3.9.0", + "@react-types/button": "^3.13.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/calendar": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.9.0.tgz", + "integrity": "sha512-YxHLqL/LZrgwYGKzlQ96Fgt6gC+Q1L8k56sD51jJAtiD+YtT/pKJfK1zjZ3rtHtPTDYzosJ8vFgOmZNpnKQpXQ==", + "requires": { + "@internationalized/date": "^3.8.2", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/live-announcer": "^3.4.4", + "@react-aria/utils": "^3.30.0", + "@react-stately/calendar": "^3.8.3", + "@react-types/button": "^3.13.0", + "@react-types/calendar": "^3.7.3", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/checkbox": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.16.0.tgz", + "integrity": "sha512-XPaMz1/iVBG6EbJOPYlNtvr+q4f0axJeoIvyzWW3ciIdDSX/3jYuFg/sv/b3OQQl389cbQ/WUBQyWre/uXWVEg==", + "requires": { + "@react-aria/form": "^3.1.0", + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/toggle": "^3.12.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/checkbox": "^3.7.0", + "@react-stately/form": "^3.2.0", + "@react-stately/toggle": "^3.9.0", + "@react-types/checkbox": "^3.10.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/combobox": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.13.0.tgz", + "integrity": "sha512-eBa8aWcL3Ar/BvgSaqYDmNQP70LPZ7us2myM31QQt2YDRptqGHd44wzXCts9SaDVIeMVy+AEY2NkuxrVE6yNrw==", + "requires": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/listbox": "^3.14.7", + "@react-aria/live-announcer": "^3.4.4", + "@react-aria/menu": "^3.19.0", + "@react-aria/overlays": "^3.28.0", + "@react-aria/selection": "^3.25.0", + "@react-aria/textfield": "^3.18.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/collections": "^3.12.6", + "@react-stately/combobox": "^3.11.0", + "@react-stately/form": "^3.2.0", + "@react-types/button": "^3.13.0", + "@react-types/combobox": "^3.13.7", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/datepicker": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.15.0.tgz", + "integrity": "sha512-AONeLj7sMKz4JmzCu4bhsqwcNFXCSWoaBhi4wOJO9+WYmxudn5mSI9ez8NMCVn+s5kcYpyvzrrAFf/DvQ4UDgw==", + "requires": { + "@internationalized/date": "^3.8.2", + "@internationalized/number": "^3.6.4", + "@internationalized/string": "^3.2.7", + "@react-aria/focus": "^3.21.0", + "@react-aria/form": "^3.1.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/spinbutton": "^3.6.17", + "@react-aria/utils": "^3.30.0", + "@react-stately/datepicker": "^3.15.0", + "@react-stately/form": "^3.2.0", + "@react-types/button": "^3.13.0", + "@react-types/calendar": "^3.7.3", + "@react-types/datepicker": "^3.13.0", + "@react-types/dialog": "^3.5.20", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/dialog": { + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.28.tgz", + "integrity": "sha512-S9dgdFBQc9LbhyBiHwGPSATwtvsIl6h+UnxDJ4oKBSse+wxdAyshbZv2tyO5RFbe3k73SAgU7yKocfg7YyRM0A==", + "requires": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/overlays": "^3.28.0", + "@react-aria/utils": "^3.30.0", + "@react-types/dialog": "^3.5.20", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/focus": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.0.tgz", + "integrity": "sha512-7NEGtTPsBy52EZ/ToVKCu0HSelE3kq9qeis+2eEq90XSuJOMaDHUQrA7RC2Y89tlEwQB31bud/kKRi9Qme1dkA==", + "requires": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + } + }, + "@react-aria/form": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.1.0.tgz", + "integrity": "sha512-aDAOZafrn0V8e09mDAtCvc+JnpnkFM9X8cbI5+fdXsXAA+JxO+3uRRfnJHBlIL0iLc4C4OVWxBxWToV95pg1KA==", + "requires": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-stately/form": "^3.2.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/grid": { + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.14.3.tgz", + "integrity": "sha512-O4Ius5tJqKcMGfQT6IXD4MnEOeq6f/59nKmfCLTXMREFac/oxafqanUx3zrEVYbaqLOjEmONcd8S61ptQM6aPg==", + "requires": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/live-announcer": "^3.4.4", + "@react-aria/selection": "^3.25.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/collections": "^3.12.6", + "@react-stately/grid": "^3.11.4", + "@react-stately/selection": "^3.20.4", + "@react-types/checkbox": "^3.10.0", + "@react-types/grid": "^3.3.4", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/i18n": { + "version": "3.12.11", + "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.12.11.tgz", + "integrity": "sha512-1mxUinHbGJ6nJ/uSl62dl48vdZfWTBZePNF/wWQy98gR0qNFXLeusd7CsEmJT1971CR5i/WNYUo1ezNlIJnu6A==", + "requires": { + "@internationalized/date": "^3.8.2", + "@internationalized/message": "^3.1.8", + "@internationalized/number": "^3.6.4", + "@internationalized/string": "^3.2.7", + "@react-aria/ssr": "^3.9.10", + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/interactions": { + "version": "3.25.4", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.25.4.tgz", + "integrity": "sha512-HBQMxgUPHrW8V63u9uGgBymkMfj6vdWbB0GgUJY49K9mBKMsypcHeWkWM6+bF7kxRO728/IK8bWDV6whDbqjHg==", + "requires": { + "@react-aria/ssr": "^3.9.10", + "@react-aria/utils": "^3.30.0", + "@react-stately/flags": "^3.1.2", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/label": { + "version": "3.7.20", + "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.20.tgz", + "integrity": "sha512-Hw7OsC2GBnjptyW1lC1+SNoSIZA0eIh02QnNDr1XX2S+BPfn958NxoI7sJIstO/TUpQVNqdjEN/NI6+cyuJE6g==", + "requires": { + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/landmark": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@react-aria/landmark/-/landmark-3.0.5.tgz", + "integrity": "sha512-klUgRGQyTv5qWFQ0EMMLBOLa87qSTGjWoiMvytL9EgJCACkn/OzNMPbqVSkMADvadDyWCMWFYWvfweLxl3T5yw==", + "requires": { + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.4.0" + } + }, + "@react-aria/link": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.8.4.tgz", + "integrity": "sha512-7cPRGIo7x6ZZv1dhp2xGjqLR1snazSQgl7tThrBDL5E8f6Yr7SVpxOOK5/EBmfpFkhkmmXEO/Fgo/GPJdc6Vmw==", + "requires": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-types/link": "^3.6.3", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/listbox": { + "version": "3.14.7", + "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.14.7.tgz", + "integrity": "sha512-U5a+AIDblaeQTIA1MDFUaYIKoPwPNAuY7SwkuA5Z7ClDOeQJkiyExmAoKcUXwUkrLULQcbOPKr401q38IL3T7Q==", + "requires": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/selection": "^3.25.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/collections": "^3.12.6", + "@react-stately/list": "^3.12.4", + "@react-types/listbox": "^3.7.2", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/live-announcer": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.4.4.tgz", + "integrity": "sha512-PTTBIjNRnrdJOIRTDGNifY2d//kA7GUAwRFJNOEwSNG4FW+Bq9awqLiflw0JkpyB0VNIwou6lqKPHZVLsGWOXA==", + "requires": { + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/menu": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.19.0.tgz", + "integrity": "sha512-VLUGbZedKJvK2OFWEpa86GPIaj9QcWox/R9JXmNk6nyrAz/V46OBQENdliV26PEdBZgzrVxGvmkjaH7ZsN/32Q==", + "requires": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/overlays": "^3.28.0", + "@react-aria/selection": "^3.25.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/collections": "^3.12.6", + "@react-stately/menu": "^3.9.6", + "@react-stately/selection": "^3.20.4", + "@react-stately/tree": "^3.9.1", + "@react-types/button": "^3.13.0", + "@react-types/menu": "^3.10.3", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/numberfield": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.12.0.tgz", + "integrity": "sha512-JkgkjYsZ9lN5m3//X3buOKVrA/QJEeeXJ+5T5r6AmF29YdIhD1Plf5AEOWoRpZWQ25chH7FI/Orsf4h3/SLOpg==", + "requires": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/spinbutton": "^3.6.17", + "@react-aria/textfield": "^3.18.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/form": "^3.2.0", + "@react-stately/numberfield": "^3.10.0", + "@react-types/button": "^3.13.0", + "@react-types/numberfield": "^3.8.13", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/overlays": { + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.28.0.tgz", + "integrity": "sha512-qaHahAXTmxXULgg2/UfWEIwfgdKsn27XYryXAWWDu2CAZTcbI+5mGwYrQZSDWraM6v5PUUepzOVvm7hjTqiMFw==", + "requires": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/ssr": "^3.9.10", + "@react-aria/utils": "^3.30.0", + "@react-aria/visually-hidden": "^3.8.26", + "@react-stately/overlays": "^3.6.18", + "@react-types/button": "^3.13.0", + "@react-types/overlays": "^3.9.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/progress": { + "version": "3.4.25", + "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.25.tgz", + "integrity": "sha512-KD9Gow+Ip6ZCBdsarR+Hby3c4d99I6L95Ruf7tbCh4ut9i9Dbr+x99OwhpAbT0g549cOyeIqxutPkT+JuzrRuA==", + "requires": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/label": "^3.7.20", + "@react-aria/utils": "^3.30.0", + "@react-types/progress": "^3.5.14", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/radio": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.12.0.tgz", + "integrity": "sha512-//0zZUuHtbm6uZR9+sNRNzVcQpjJKjZj57bDD0lMNj3NZp/Tkw+zXIFy6j1adv3JMe6iYkzEgaB7YRDD1Fe/ZA==", + "requires": { + "@react-aria/focus": "^3.21.0", + "@react-aria/form": "^3.1.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/utils": "^3.30.0", + "@react-stately/radio": "^3.11.0", + "@react-types/radio": "^3.9.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/selection": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.25.0.tgz", + "integrity": "sha512-Q3U0Ya0PTP/TR0a2g+7YEbFVLphiWthmEkHyvOx9HsKSjE8w9wXY3C14DZWKskB/BBrXKJuOWxBDa0xhC83S+A==", + "requires": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-stately/selection": "^3.20.4", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/slider": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.8.0.tgz", + "integrity": "sha512-D7Sa7q21cV3gBid7frjoYw6924qYqNdJn2oai1BEemHSuwQatRlm1o2j+fnPTy9sYZfNOqXYnv5YjEn0o1T+Gw==", + "requires": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/utils": "^3.30.0", + "@react-stately/slider": "^3.7.0", + "@react-types/shared": "^3.31.0", + "@react-types/slider": "^3.8.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/spinbutton": { + "version": "3.6.17", + "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.17.tgz", + "integrity": "sha512-gdGc3kkqpvFUd9XsrhPwQHMrG2TY0LVuGGgjvaZwF/ONm9FMz393ogCM0P484HsjU50hClO+yiRRgNjdwDIzPQ==", + "requires": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/live-announcer": "^3.4.4", + "@react-aria/utils": "^3.30.0", + "@react-types/button": "^3.13.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/ssr": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", + "requires": { + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/switch": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.7.6.tgz", + "integrity": "sha512-C+Od8hZNZCf3thgtZnZKzHl5b/63Q9xf+Pw6ugLA1qaKazwp46x1EwUVVqVhfAeVhmag++eHs8Lol5ZwQEinjQ==", + "requires": { + "@react-aria/toggle": "^3.12.0", + "@react-stately/toggle": "^3.9.0", + "@react-types/shared": "^3.31.0", + "@react-types/switch": "^3.5.13", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/table": { + "version": "3.17.6", + "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.17.6.tgz", + "integrity": "sha512-PSEaeKOIazVEaykeTLudPbDLytJgOPLZJalS/xXY0/KL+Gi0Olchmz4tvS0WBe87ChmlVi6GQqU+stk23aZVWg==", + "requires": { + "@react-aria/focus": "^3.21.0", + "@react-aria/grid": "^3.14.3", + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/live-announcer": "^3.4.4", + "@react-aria/utils": "^3.30.0", + "@react-aria/visually-hidden": "^3.8.26", + "@react-stately/collections": "^3.12.6", + "@react-stately/flags": "^3.1.2", + "@react-stately/table": "^3.14.4", + "@react-types/checkbox": "^3.10.0", + "@react-types/grid": "^3.3.4", + "@react-types/shared": "^3.31.0", + "@react-types/table": "^3.13.2", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/tabs": { + "version": "3.10.6", + "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.10.6.tgz", + "integrity": "sha512-L8MaE7+bu6ByDOUxNPpMMYxdHULhKUfBoXdsSsXqb1z3QxdFW2zovfag0dvpyVWB6ALghX2T0PlTUNqaKA5tGw==", + "requires": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/selection": "^3.25.0", + "@react-aria/utils": "^3.30.0", + "@react-stately/tabs": "^3.8.4", + "@react-types/shared": "^3.31.0", + "@react-types/tabs": "^3.3.17", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/textfield": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.18.0.tgz", + "integrity": "sha512-kCwbyDHi2tRaD/OjagA3m3q2mMZUPeXY7hRqhDxpl2MwyIdd+/PQOJLM8tZr5+m2zvBx+ffOcjZMGTMwMtoV5w==", + "requires": { + "@react-aria/form": "^3.1.0", + "@react-aria/interactions": "^3.25.4", + "@react-aria/label": "^3.7.20", + "@react-aria/utils": "^3.30.0", + "@react-stately/form": "^3.2.0", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@react-types/textfield": "^3.12.4", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/toast": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@react-aria/toast/-/toast-3.0.6.tgz", + "integrity": "sha512-PoCLWoZzdHIMYY0zIU3WYsHAHPS52sN1gzGRJ+cr5zogU8wwg8lwFZCvs/yql0IhQLsO930zcCXWeL/NsCMrlA==", + "requires": { + "@react-aria/i18n": "^3.12.11", + "@react-aria/interactions": "^3.25.4", + "@react-aria/landmark": "^3.0.5", + "@react-aria/utils": "^3.30.0", + "@react-stately/toast": "^3.1.2", + "@react-types/button": "^3.13.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/toggle": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.12.0.tgz", + "integrity": "sha512-JfcrF8xUEa2CbbUXp+WQiTBVwSM/dm21v5kueQlksvLfXG6DGE8/zjM6tJFErrFypAasc1JXyrI4dspLOWCfRA==", + "requires": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-stately/toggle": "^3.9.0", + "@react-types/checkbox": "^3.10.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/toolbar": { + "version": "3.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.19.tgz", + "integrity": "sha512-G4sgtOUTUUJHznXlpKcY64SxD2gKOqIQXZXjWTVcY/Q5hAjl8gbTt5XIED22GmeIgd/tVl6+lddGj6ESze4vSg==", + "requires": { + "@react-aria/focus": "^3.21.0", + "@react-aria/i18n": "^3.12.11", + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/tooltip": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.8.6.tgz", + "integrity": "sha512-lW/PegiswGLlCP0CM4FH2kbIrEe4Li2SoklzIRh4nXZtiLIexswoE5/5af7PMtoMAl31or6fHZleVLzZD4VcfA==", + "requires": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-stately/tooltip": "^3.5.6", + "@react-types/shared": "^3.31.0", + "@react-types/tooltip": "^3.4.19", + "@swc/helpers": "^0.5.0" + } + }, + "@react-aria/utils": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.30.0.tgz", + "integrity": "sha512-ydA6y5G1+gbem3Va2nczj/0G0W7/jUVo/cbN10WA5IizzWIwMP5qhFr7macgbKfHMkZ+YZC3oXnt2NNre5odKw==", + "requires": { + "@react-aria/ssr": "^3.9.10", + "@react-stately/flags": "^3.1.2", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + } + }, + "@react-aria/visually-hidden": { + "version": "3.8.26", + "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.26.tgz", + "integrity": "sha512-Lz36lTVaQbv5Kn74sPv0l9SnLQ5XHKCoq2zilP14Eb4QixDIqR7Ovj43m+6wi9pynf29jtOb/8D/9jrTjbmmgw==", + "requires": { + "@react-aria/interactions": "^3.25.4", + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/calendar": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.8.3.tgz", + "integrity": "sha512-HTWD6ZKQcXDlvj6glEEG0oi2Tpkaw19y5rK526s04zJs894wFqM9PK0WHthEYqjCeQJ5B/OkyG19XX4lENxnZw==", + "requires": { + "@internationalized/date": "^3.8.2", + "@react-stately/utils": "^3.10.8", + "@react-types/calendar": "^3.7.3", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/checkbox": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.7.0.tgz", + "integrity": "sha512-opViVhNvxFVHjXhM4nA/E03uvbLazsIKloXX9JtyBCZAQRUag17dpmkekfIkHvP4o7z7AWFoibD8JBFV1IrMcQ==", + "requires": { + "@react-stately/form": "^3.2.0", + "@react-stately/utils": "^3.10.8", + "@react-types/checkbox": "^3.10.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/collections": { + "version": "3.12.6", + "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.12.6.tgz", + "integrity": "sha512-S158RKWGZSodbJXKZDdcnrLzFxzFmyRWDNakQd1nBGhSrW2JV8lDn9ku5Og7TrjoEpkz//B2oId648YT792ilw==", + "requires": { + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/combobox": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.11.0.tgz", + "integrity": "sha512-W9COXdSOC+uqCZrRHJI0K7emlPb/Tx4A89JHWBcFmiAk+hs1Cnlyjw3aaqEiT8A8/HxDNMO9QcfisWC1iNyE9A==", + "requires": { + "@react-stately/collections": "^3.12.6", + "@react-stately/form": "^3.2.0", + "@react-stately/list": "^3.12.4", + "@react-stately/overlays": "^3.6.18", + "@react-stately/select": "^3.7.0", + "@react-stately/utils": "^3.10.8", + "@react-types/combobox": "^3.13.7", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/datepicker": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.15.0.tgz", + "integrity": "sha512-OuBx+h802CoANy6KNR6XuZCndiyRf9vpB32CYZX86nqWy21GSTeT73G41ze5cAH88A/6zmtpYK24nTlk8bdfWA==", + "requires": { + "@internationalized/date": "^3.8.2", + "@internationalized/string": "^3.2.7", + "@react-stately/form": "^3.2.0", + "@react-stately/overlays": "^3.6.18", + "@react-stately/utils": "^3.10.8", + "@react-types/datepicker": "^3.13.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/flags": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.2.tgz", + "integrity": "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==", + "requires": { + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/form": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.2.0.tgz", + "integrity": "sha512-PfefxvT7/BIhAGpD4oQpdcxnL8cfN0ZTQxQq+Wmb9z3YzK1oM8GFxb8eGdDRG71JeF8WUNMAQVZFhgl00Z/YKg==", + "requires": { + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/grid": { + "version": "3.11.4", + "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.11.4.tgz", + "integrity": "sha512-oaXFSk2eM0PJ0GVniGA0ZlTpAA0AL0O4MQ7V3cHqZAQbwSO0n2pT31GM0bSVnYP/qTF5lQHo3ECmRQCz0fVyMw==", + "requires": { + "@react-stately/collections": "^3.12.6", + "@react-stately/selection": "^3.20.4", + "@react-types/grid": "^3.3.4", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/list": { + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.12.4.tgz", + "integrity": "sha512-r7vMM//tpmagyNlRzl2NFPPtx+az5R9pM6q7aI4aBf6/zpZt2eX2UW5gaDTGlkQng7r6OGyAgJD52jmGcCJk7Q==", + "requires": { + "@react-stately/collections": "^3.12.6", + "@react-stately/selection": "^3.20.4", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/menu": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.9.6.tgz", + "integrity": "sha512-2rVtgeVAiyr7qL8BhmCK/4el49rna/5kADRH5NfPdpXw8ZzaiiHq2RtX443Txj7pUU82CJWQn+CRobq7k6ZTEw==", + "requires": { + "@react-stately/overlays": "^3.6.18", + "@react-types/menu": "^3.10.3", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/numberfield": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.10.0.tgz", + "integrity": "sha512-6C8ML4/e2tcn01BRNfFLxetVaWwz0n0pVROnVpo8p761c6lmTqohqEMNcXCVNw9H0wsa1hug2a1S5PcN2OXgag==", + "requires": { + "@internationalized/number": "^3.6.4", + "@react-stately/form": "^3.2.0", + "@react-stately/utils": "^3.10.8", + "@react-types/numberfield": "^3.8.13", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/overlays": { + "version": "3.6.18", + "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.18.tgz", + "integrity": "sha512-g8n2FtDCxIg2wQ09R7lrM2niuxMPCdP17bxsPV9hyYnN6m42aAKGOhzWrFOK+3phQKgk/E1JQZEvKw1cyyGo1A==", + "requires": { + "@react-stately/utils": "^3.10.8", + "@react-types/overlays": "^3.9.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/radio": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.11.0.tgz", + "integrity": "sha512-hsCmKb9e/ygmzBADFYIGpEQ43LrxjWnlKESgxphvlv0Klla4d6XLAYSFOTX1kcjSztpvVWrdl4cIfmKVF1pz2g==", + "requires": { + "@react-stately/form": "^3.2.0", + "@react-stately/utils": "^3.10.8", + "@react-types/radio": "^3.9.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/select": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.7.0.tgz", + "integrity": "sha512-OWLOCKBEj8/XI+vzBSSHQAJu0Hf9Xl/flMhYh47f2b45bO++DRLcVsi8nycPNisudvK6xMQ8a/h4FwjePrCXfg==", + "requires": { + "@react-stately/form": "^3.2.0", + "@react-stately/list": "^3.12.4", + "@react-stately/overlays": "^3.6.18", + "@react-types/select": "^3.10.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/selection": { + "version": "3.20.4", + "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.20.4.tgz", + "integrity": "sha512-Hxmc6NtECStYo+Z2uBRhQ80KPhbSF7xXv9eb4qN8dhyuSnsD6c0wc6oAJsv18dldcFz8VrD48aP/uff9mj0hxQ==", + "requires": { + "@react-stately/collections": "^3.12.6", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/slider": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.7.0.tgz", + "integrity": "sha512-quxqkyyxrxLELYEkPrIrucpVPdYDK8yyliv/vvNuHrjuLRIvx6UmssxqESp2EpZfwPYtEB29QXbAKT9+KuXoCQ==", + "requires": { + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@react-types/slider": "^3.8.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/table": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.14.4.tgz", + "integrity": "sha512-uhwk8z3DemozD+yHBjSa4WyxKczpDkxhJhW7ZVOY+1jNuTYxc9/JxzPsHICrlDVV8EPWwwyMUz8eO/8rKN7DbA==", + "requires": { + "@react-stately/collections": "^3.12.6", + "@react-stately/flags": "^3.1.2", + "@react-stately/grid": "^3.11.4", + "@react-stately/selection": "^3.20.4", + "@react-stately/utils": "^3.10.8", + "@react-types/grid": "^3.3.4", + "@react-types/shared": "^3.31.0", + "@react-types/table": "^3.13.2", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/tabs": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.8.4.tgz", + "integrity": "sha512-2Tr4yXkcNDLyyxrZr+c4FnAW/wkSim3UhDUWoOgTCy3mwlQzdh9r5qJrOZRghn1QvF7p8Ahp7O7qxwd2ZGJrvQ==", + "requires": { + "@react-stately/list": "^3.12.4", + "@react-types/shared": "^3.31.0", + "@react-types/tabs": "^3.3.17", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/toast": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@react-stately/toast/-/toast-3.1.2.tgz", + "integrity": "sha512-HiInm7bck32khFBHZThTQaAF6e6/qm57F4mYRWdTq8IVeGDzpkbUYibnLxRhk0UZ5ybc6me+nqqPkG/lVmM42Q==", + "requires": { + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.4.0" + } + }, + "@react-stately/toggle": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.9.0.tgz", + "integrity": "sha512-1URd97R5nbFF9Hc1nQBhvln55EnOkLNz6pjtXU7TCnV4tYVbe+tc++hgr5XRt6KAfmuXxVDujlzRc6QjfCn0cQ==", + "requires": { + "@react-stately/utils": "^3.10.8", + "@react-types/checkbox": "^3.10.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/tooltip": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.5.6.tgz", + "integrity": "sha512-BnOtE7726t1sCKPGbwzzEtEx40tjpbJvw5yqpoVnAV0OLfrXtLVYfd7tWRHmZOYmhELaUnY+gm3ZFYtwvnjs+A==", + "requires": { + "@react-stately/overlays": "^3.6.18", + "@react-types/tooltip": "^3.4.19", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/tree": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.9.1.tgz", + "integrity": "sha512-dyoPIvPK/cs03Tg/MQSODi2kKYW1zaiOG9KC2P0c8b44mywU2ojBKzhSJky3dBkJ4VVGy7L+voBh50ELMjEa8Q==", + "requires": { + "@react-stately/collections": "^3.12.6", + "@react-stately/selection": "^3.20.4", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/utils": { + "version": "3.10.8", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.8.tgz", + "integrity": "sha512-SN3/h7SzRsusVQjQ4v10LaVsDc81jyyR0DD5HnsQitm/I5WDpaSr2nRHtyloPFU48jlql1XX/S04T2DLQM7Y3g==", + "requires": { + "@swc/helpers": "^0.5.0" + } + }, + "@react-stately/virtualizer": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-4.4.2.tgz", + "integrity": "sha512-csU/Bbq1+JYCXlF3wKHa690EhV4/uuK5VwZZvi9jTMqjblDiNUwEmIcx78J8aoadjho5wgRw3ddE9NPDGcVElA==", + "requires": { + "@react-aria/utils": "^3.30.0", + "@react-types/shared": "^3.31.0", + "@swc/helpers": "^0.5.0" + } + }, + "@react-types/accordion": { + "version": "3.0.0-alpha.26", + "resolved": "https://registry.npmjs.org/@react-types/accordion/-/accordion-3.0.0-alpha.26.tgz", + "integrity": "sha512-OXf/kXcD2vFlEnkcZy/GG+a/1xO9BN7Uh3/5/Ceuj9z2E/WwD55YwU3GFM5zzkZ4+DMkdowHnZX37XnmbyD3Mg==", + "requires": { + "@react-types/shared": "^3.27.0" + } + }, + "@react-types/breadcrumbs": { + "version": "3.7.15", + "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.15.tgz", + "integrity": "sha512-0RsymrsOAsx443XRDJ1krK+Lusr4t0qqExmzFe7/XYXOn/RbGKjzSdezsoWfTy8Hjks0YbfQPVKnNxg9LKv4XA==", + "requires": { + "@react-types/link": "^3.6.3", + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/button": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.13.0.tgz", + "integrity": "sha512-hwvcNnBjDeNvWheWfBhmkJSzC48ub5rZq0DnpemB3XKOvv5WcF9p6rrQZsQ3egNGkh0Z+bKfr2QfotgOkccHSw==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/calendar": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.7.3.tgz", + "integrity": "sha512-gofPgVpSawJ0iGO01SbVH46u3gdykHlGT5BfGU1cRnsOR2tJX38dekO/rnuGsMQYF0+kU6U9YVae+XoOFJNnWg==", + "requires": { + "@internationalized/date": "^3.8.2", + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/checkbox": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.10.0.tgz", + "integrity": "sha512-DJ84ilBDvZddE/Sul97Otee4M6psrPRaJm2a1Bc7M3Y5UKo6d6RGXdcDarRRpbnS7BeAbVanKiMS2ygI9QHh9g==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/combobox": { + "version": "3.13.7", + "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.13.7.tgz", + "integrity": "sha512-R7MQ4Qm4fryo6FCg3Vo/l9wxkYVG05trsLbxzMvvxCMkpcoHUPhy8Ll33eXA3YP74Rs/IaM9d0d/amSUZ4M9wg==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/datepicker": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.13.0.tgz", + "integrity": "sha512-AG/iGcdQ5SVSjw8Ta7bCdGNkMda+e+Z7lOHxDawL44SII8LtZroBDlaCpb178Tvo17bBfJ6TvWXlvSpBY8GPRg==", + "requires": { + "@internationalized/date": "^3.8.2", + "@react-types/calendar": "^3.7.3", + "@react-types/overlays": "^3.9.0", + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/dialog": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.20.tgz", + "integrity": "sha512-ebn8jW/xW/nmRATaWIPHVBIpIFWSaqjrAxa58f5TXer5FtCD9pUuzAQDmy/o22ucB0yvn6Kl+fjb3SMbMdALZQ==", + "requires": { + "@react-types/overlays": "^3.9.0", + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/form": { + "version": "3.7.14", + "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.14.tgz", + "integrity": "sha512-P+FXOQR/ISxLfBbCwgttcR1OZGqOknk7Ksgrxf7jpc4PuyUC048Jf+FcG+fARhoUeNEhv6kBXI5fpAB6xqnDhA==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/grid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.3.4.tgz", + "integrity": "sha512-8XNn7Czhl+D1b2zRwdO8c3oBJmKgevT/viKJB4qBVFOhK0l/p3HYDZUMdeclvUfSt4wx4ASpI7MD3v1vmN54oA==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/link": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.6.3.tgz", + "integrity": "sha512-XIYEl9ZPa5mLy8uGQabdhPaFVmnvxNSYF59t0vs/IV0yxeoPvrjKjRAbXS+WP9zYMXIkHYNYYucriCkqKhotJA==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/listbox": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.7.2.tgz", + "integrity": "sha512-MRpBhApR1jJNASoVWsEvH5vf89TJw+l9Lt1ssawop0K2iYF5PmkthRdqcpYcTkFu5+f5QvFchVsNJ3TKD4cf2A==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/menu": { + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.10.3.tgz", + "integrity": "sha512-Vd3t7fEbIOiq7kBAHaihfYf+/3Fuh0yK2KNjJ70BPtlAhMRMDVG3m0PheSTm3FFfj+uAdQdfc2YKPnMBbWjDuQ==", + "requires": { + "@react-types/overlays": "^3.9.0", + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/numberfield": { + "version": "3.8.13", + "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.13.tgz", + "integrity": "sha512-zRSqInmxOTQJZt2fjAhuQK3Wa1vCOlKsRzUVvxTrE8gtQxlgFxirmobuUnjTEhwkFyb0bq8GvVfQV1E95Si2yw==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/overlays": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.9.0.tgz", + "integrity": "sha512-T2DqMcDN5p8vb4vu2igoLrAtuewaNImLS8jsK7th7OjwQZfIWJn5Y45jSxHtXJUddEg1LkUjXYPSXCMerMcULw==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/progress": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.14.tgz", + "integrity": "sha512-GeGrjOeHR/p5qQ1gGlN68jb+lL47kuddxMgdR1iEnAlYGY4OtJoEN/EM5W2ZxJRKPcJmzdcY/p/J0PXa8URbSg==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/radio": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.9.0.tgz", + "integrity": "sha512-phndlgqMF6/9bOOhO3le00eozNfDU1E7OHWV2cWWhGSMRFuRdf7/d+NjVtavCX75+GJ50MxvXk+KB0fjTuvKyg==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/select": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.10.0.tgz", + "integrity": "sha512-+xJwYWJoJTCGsaiPAqb6QB79ub1WKIHSmOS9lh/fPUXfUszVs05jhajaN9KjrKmnXds5uh4u6l1JH5J1l2K5pw==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/shared": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.31.0.tgz", + "integrity": "sha512-ua5U6V66gDcbLZe4P2QeyNgPp4YWD1ymGA6j3n+s8CGExtrCPe64v+g4mvpT8Bnb985R96e4zFT61+m0YCwqMg==", + "requires": {} + }, + "@react-types/slider": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.8.0.tgz", + "integrity": "sha512-eN6Fd3YCPseGfvfOJDtn9Lh9CrAb8tF3cTAprEcpnGrsxmdW9JQpcuciYuLM871X5D2fYg4WaYMpZaiYssjxBQ==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/switch": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.13.tgz", + "integrity": "sha512-C2EhKBu7g7xhKboPPxhyKtROEti80Ck7TBnKclXt0D4LiwbzpR3qGfuzB+7YFItnhiauP7Uxe+bAfM5ojjtm9w==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/table": { + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.13.2.tgz", + "integrity": "sha512-3/BpFIWHXTcGgQEfip87gMNCWPtPNsc3gFkW4qtsevQ+V0577KyNyvQgvFrqMZKnvz3NWFKyshBb7PTevsus4Q==", + "requires": { + "@react-types/grid": "^3.3.4", + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/tabs": { + "version": "3.3.17", + "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.17.tgz", + "integrity": "sha512-cLcdxWNJe0Kf/pKuPQbEF9Fl+axiP4gB/WVjmAdhCgQ5LCJw2dGcy1LI1SXrlS3PVclbnujD1DJ8z1lIW4Tmww==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/textfield": { + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.12.4.tgz", + "integrity": "sha512-cOgzI1dT8X1JMNQ9u2UKoV2L28ROkbFEtzY9At0MqTZYYSxYp3Q7i+XRqIBehu8jOMuCtN9ed9EgwVSfkicyLQ==", + "requires": { + "@react-types/shared": "^3.31.0" + } + }, + "@react-types/tooltip": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.19.tgz", + "integrity": "sha512-OR/pwZReWbCIxuHJYB1L4fTwliA+mzVvUJMWwXIRy6Eh5d07spS3FZEKFvOgjMxA1nyv5PLf8eyr5RuuP1GGAA==", + "requires": { + "@react-types/overlays": "^3.9.0", + "@react-types/shared": "^3.31.0" + } + }, "@reduxjs/toolkit": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.1.tgz", @@ -6935,6 +12448,19 @@ "postcss-selector-parser": "6.0.10" } }, + "@tanstack/react-virtual": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.11.3.tgz", + "integrity": "sha512-vCU+OTylXN3hdC8RKg68tPlBPjjxtzon7Ys46MgrSLE+JhSjSTPvoQifV6DQJeJmA8Q3KT6CphJbejupx85vFw==", + "requires": { + "@tanstack/virtual-core": "3.11.3" + } + }, + "@tanstack/virtual-core": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.3.tgz", + "integrity": "sha512-v2mrNSnMwnPJtcVqNvV0c5roGCBqeogN8jDtgtuHCphdwBasOZ17x8UV8qpHUh+u0MLfX43c0uUHKje0s+Zb0w==" + }, "@tippyjs/react": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", @@ -7227,14 +12753,12 @@ "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -7270,8 +12794,7 @@ "arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "argparse": { "version": "2.0.1", @@ -7426,8 +12949,7 @@ "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "brace-expansion": { "version": "1.1.11", @@ -7502,8 +13024,7 @@ "camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, "caniuse-lite": { "version": "1.0.30001587", @@ -7556,7 +13077,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -7572,7 +13092,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -7594,6 +13113,15 @@ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -7607,11 +13135,25 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, + "color2k": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", + "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -7623,8 +13165,12 @@ "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "compute-scroll-into-view": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", + "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==" }, "concat-map": { "version": "0.0.1", @@ -7693,8 +13239,7 @@ "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "csstype": { "version": "3.1.3", @@ -7796,6 +13341,11 @@ "ms": "2.1.2" } }, + "decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==" + }, "decimal.js-light": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", @@ -7830,6 +13380,11 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -7862,8 +13417,7 @@ "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "dir-glob": { "version": "3.0.1", @@ -7876,8 +13430,7 @@ "dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "doctrine": { "version": "3.0.0", @@ -8481,6 +14034,11 @@ "path-exists": "^4.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -8525,6 +14083,16 @@ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true }, + "framer-motion": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.12.tgz", + "integrity": "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==", + "requires": { + "motion-dom": "^12.23.12", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + } + }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -8552,7 +14120,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { @@ -8878,6 +14445,12 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "input-otp": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.1.tgz", + "integrity": "sha512-+yvpmKYKHi9jIGngxagY9oWiiblPB7+nEO75F2l2o4vs+6vpPZZmUl4tBNYuTCvQjhvEIbdNeJu70bhfYP2nbw==", + "requires": {} + }, "internal-slot": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", @@ -8893,6 +14466,17 @@ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" }, + "intl-messageformat": { + "version": "10.7.16", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.16.tgz", + "integrity": "sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==", + "requires": { + "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/fast-memoize": "2.2.7", + "@formatjs/icu-messageformat-parser": "2.11.2", + "tslib": "^2.8.0" + } + }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -8929,7 +14513,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -9108,8 +14691,7 @@ "jiti": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "dev": true + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" }, "js-sdsl": { "version": "4.2.0", @@ -9244,8 +14826,7 @@ "lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" }, "lines-and-columns": { "version": "1.2.4", @@ -9427,6 +15008,19 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, + "motion-dom": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.12.tgz", + "integrity": "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==", + "requires": { + "motion-utils": "^12.23.6" + } + }, + "motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -9436,7 +15030,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "requires": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -9532,8 +15125,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-range": { "version": "0.1.2", @@ -9560,8 +15152,7 @@ "object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" }, "object-inspect": { "version": "1.12.3", @@ -9747,20 +15338,17 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" }, "pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==" }, "postcss": { "version": "8.4.35", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", - "dev": true, "requires": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -9771,7 +15359,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, "requires": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -9782,7 +15369,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "requires": { "camelcase-css": "^2.0.1" } @@ -9791,7 +15377,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, "requires": { "postcss-selector-parser": "^6.0.11" }, @@ -9800,7 +15385,6 @@ "version": "6.0.13", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -9821,8 +15405,7 @@ "postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "prelude-ls": { "version": "1.2.1", @@ -10004,6 +15587,16 @@ "react-transition-group": "^4.4.5" } }, + "react-textarea-autosize": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz", + "integrity": "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==", + "requires": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + } + }, "react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -10019,7 +15612,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, "requires": { "pify": "^2.3.0" } @@ -10038,7 +15630,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -10178,6 +15769,14 @@ "loose-envify": "^1.1.0" } }, + "scroll-into-view-if-needed": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.0.10.tgz", + "integrity": "sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==", + "requires": { + "compute-scroll-into-view": "^3.0.2" + } + }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -10219,6 +15818,21 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -10348,7 +15962,6 @@ "version": "3.32.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -10363,7 +15976,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -10374,7 +15986,6 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10419,11 +16030,21 @@ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, + "tailwind-merge": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", + "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==" + }, + "tailwind-variants": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-2.0.1.tgz", + "integrity": "sha512-1wt8c4PWO3jbZcKGBrjIV8cehWarREw1C2os0k8Mcq0nof/CbafNhUUjb0LRWiiRfAvDK6v1deswtHLsygKglw==", + "requires": {} + }, "tailwindcss": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", - "dev": true, "requires": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -10453,7 +16074,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, "requires": { "lilconfig": "^2.0.5", "yaml": "^2.1.1" @@ -10463,7 +16083,6 @@ "version": "6.0.13", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -10472,8 +16091,7 @@ "yaml": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==" } } }, @@ -10512,7 +16130,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "requires": { "any-promise": "^1.0.0" } @@ -10521,7 +16138,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, "requires": { "thenify": ">= 3.1.0 < 4" } @@ -10574,8 +16190,7 @@ "ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "tsconfig-paths": { "version": "3.14.1", @@ -10589,9 +16204,9 @@ } }, "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "tsutils": { "version": "3.21.0", @@ -10681,10 +16296,30 @@ "punycode": "^2.1.0" } }, + "use-composed-ref": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", + "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", + "requires": {} + }, + "use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "requires": {} + }, + "use-latest": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", + "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", + "requires": { + "use-isomorphic-layout-effect": "^1.1.1" + } + }, "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", "requires": {} }, "util-deprecate": { diff --git a/package.json b/package.json index c59a16b..83a132d 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dependencies": { "@emotion/react": "^11.10.6", "@headlessui/react": "^1.7.8", + "@heroui/react": "^2.8.2", "@prisma/client": "^6.8.2", "@reduxjs/toolkit": "^1.9.1", "@tippyjs/react": "^4.2.6", @@ -27,6 +28,7 @@ "date-fns": "^4.1.0", "eslint": "8.32.0", "eslint-config-next": "13.1.2", + "framer-motion": "^12.23.12", "he": "^1.2.0", "html2canvas": "^1.4.1", "i18next": "^22.4.10", diff --git a/pages/api/auth/me.ts b/pages/api/auth/me.ts index 0084f0a..e5d94be 100644 --- a/pages/api/auth/me.ts +++ b/pages/api/auth/me.ts @@ -1,27 +1,46 @@ -import { NextApiRequest, NextApiResponse } from "next"; -import jwt from "jsonwebtoken"; +// pages/api/auth/me.ts +import type { NextApiRequest, NextApiResponse } from "next"; +import jwt, { JwtPayload } from "jsonwebtoken"; import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); const SECRET_KEY = process.env.JWT_SECRET as string; +function readCookieToken(req: NextApiRequest) { + const cookie = req.headers.cookie || ""; + const match = cookie.split("; ").find((c) => c.startsWith("token=")); + return match?.split("=")[1]; +} + +function readAuthBearer(req: NextApiRequest) { + const auth = req.headers.authorization; + if (!auth?.startsWith("Bearer ")) return undefined; + return auth.slice("Bearer ".length); +} + +function hasEmail(payload: string | JwtPayload): payload is JwtPayload & { email: string } { + return typeof payload === "object" && payload !== null && typeof (payload as any).email === "string"; +} + export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const authHeader = req.headers.authorization; - - if (!authHeader || !authHeader.startsWith("Bearer ")) { - return res.status(401).json({ message: "Unauthorized" }); - } - - const token = authHeader.split(" ")[1]; // Extract token + if (req.method !== "GET") return res.status(405).json({ message: "Method not allowed" }); try { - const decoded: any = jwt.verify(token, SECRET_KEY); - const user = await prisma.user.findUnique({ where: { id: decoded.userId } }); + const token = readAuthBearer(req) ?? readCookieToken(req); + if (!token) return res.status(401).json({ message: "Unauthorized" }); + + const decoded = jwt.verify(token, SECRET_KEY); + if (!hasEmail(decoded)) return res.status(401).json({ message: "Invalid token" }); + + const user = await prisma.user.findUnique({ + where: { email: decoded.email }, + select: { id: true, email: true, createdAt: true }, + }); if (!user) return res.status(401).json({ message: "User not found" }); - - res.json({ user }); - } catch (error) { - res.status(401).json({ message: "Invalid token" }); + return res.status(200).json({ user }); + } catch { + return res.status(401).json({ message: "Invalid token" }); } } + diff --git a/pages/api/login.ts b/pages/api/login.ts index 8f3adff..633e4dd 100644 --- a/pages/api/login.ts +++ b/pages/api/login.ts @@ -20,7 +20,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) return res.status(401).json({ message: "Invalid credentials" }); - const token = jwt.sign({ sub: user.id, email: user.email }, SECRET_KEY, { expiresIn: "1d" }); + const token = jwt.sign({ sub: String(user.id), email: user.email }, SECRET_KEY, { expiresIn: "1d" }); const isProd = process.env.NODE_ENV === "production"; const cookie = [ diff --git a/pages/api/logout.ts b/pages/api/logout.ts new file mode 100644 index 0000000..f341c0f --- /dev/null +++ b/pages/api/logout.ts @@ -0,0 +1,20 @@ +// pages/api/auth/logout.ts +import type { NextApiRequest, NextApiResponse } from "next"; + +export default function handler(req: NextApiRequest, res: NextApiResponse) { + const isProd = process.env.NODE_ENV === "production"; + res.setHeader( + "Set-Cookie", + [ + "token=", // empty token + "HttpOnly", + "Path=/", + "SameSite=Strict", + "Max-Age=0", // expire immediately + isProd ? "Secure" : "", + ] + .filter(Boolean) + .join("; ") + ); + return res.status(200).json({ message: "Logged out" }); +} diff --git a/pages/api/register.ts b/pages/api/register.ts index 0ab2b75..fc570f8 100644 --- a/pages/api/register.ts +++ b/pages/api/register.ts @@ -24,7 +24,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) select: { id: true, email: true, createdAt: true }, // do NOT expose password }); - const token = jwt.sign({ sub: user.id, email: user.email }, SECRET_KEY, { expiresIn: "1d" }); + const token = jwt.sign({ sub: String(user.id), email: user.email }, SECRET_KEY, { expiresIn: "1d" }); // Set a secure, httpOnly cookie const maxAge = 60 * 60 * 24; // 1 day diff --git a/styles/tailwind.css b/styles/tailwind.css index fb38dea..d8df078 100644 --- a/styles/tailwind.css +++ b/styles/tailwind.css @@ -449,6 +449,7 @@ hover:text-primary hover:before:!bg-primary ltr:before:mr-2 rtl:before:ml-2 dark /* dropdown */ .dropdown { @apply relative; + @apply z-50; } .dropdown > button { @apply flex; -- 2.47.2 From a82e62b9b4be9f80a42113919d1f7c466eb75d62 Mon Sep 17 00:00:00 2001 From: Syasya Date: Wed, 20 Aug 2025 09:07:32 +0800 Subject: [PATCH 09/12] correct data queries --- components/dashboards/EnergyLineChart.tsx | 215 +++++++++++++++++++--- components/dashboards/MonthlyBarChart.tsx | 168 ++++++++--------- 2 files changed, 269 insertions(+), 114 deletions(-) diff --git a/components/dashboards/EnergyLineChart.tsx b/components/dashboards/EnergyLineChart.tsx index 7446d33..e719d2b 100644 --- a/components/dashboards/EnergyLineChart.tsx +++ b/components/dashboards/EnergyLineChart.tsx @@ -19,6 +19,7 @@ import DatePicker from 'react-datepicker'; import 'react-datepicker/dist/react-datepicker.css'; import './datepicker-dark.css'; // custom dark mode styles + ChartJS.register(zoomPlugin); interface TimeSeriesEntry { @@ -30,9 +31,48 @@ interface EnergyLineChartProps { siteId: string; } +function powerSeriesToEnergySeries( + data: TimeSeriesEntry[], + guessMinutes = 30 +): TimeSeriesEntry[] { + if (!data?.length) return []; + + // Ensure ascending by time + const sorted = [...data].sort( + (a, b) => new Date(a.time).getTime() - new Date(b.time).getTime() + ); + + const out: TimeSeriesEntry[] = []; + let lastDeltaMs: number | null = null; + + for (let i = 0; i < sorted.length; i++) { + const t0 = new Date(sorted[i].time).getTime(); + const p0 = sorted[i].value; // kW + + let deltaMs: number; + if (i < sorted.length - 1) { + const t1 = new Date(sorted[i + 1].time).getTime(); + deltaMs = Math.max(0, t1 - t0); + if (deltaMs > 0) lastDeltaMs = deltaMs; + } else { + // For the last point, assume previous cadence or a guess + deltaMs = lastDeltaMs ?? guessMinutes * 60 * 1000; + } + + const hours = deltaMs / (1000 * 60 * 60); + const kwh = p0 * hours; // kW * h = kWh + + out.push({ time: sorted[i].time, value: kwh }); + } + + return out; +} + + function groupTimeSeries( data: TimeSeriesEntry[], - mode: 'day' | 'daily' | 'weekly' | 'monthly' | 'yearly' + mode: 'day' | 'daily' | 'weekly' | 'monthly' | 'yearly', + agg: 'mean' | 'max' | 'sum' = 'mean' ): TimeSeriesEntry[] { const groupMap = new Map(); @@ -41,19 +81,22 @@ function groupTimeSeries( let key = ''; switch (mode) { - case 'day': - const local = new Date(date.toLocaleString('en-US', { timeZone: 'Asia/Kuala_Lumpur' })); - const hour = local.getHours(); - const minute = local.getMinutes() < 30 ? '00' : '30'; - const adjusted = new Date(local.setMinutes(minute === '00' ? 0 : 30, 0)); // zero seconds - key = adjusted.toISOString(); // ✅ full timestamp key + case 'day': { + const local = new Date( + date.toLocaleString('en-US', { timeZone: 'Asia/Kuala_Lumpur' }) + ); + const minute = local.getMinutes() < 30 ? 0 : 30; + local.setMinutes(minute, 0, 0); + key = local.toISOString(); break; + } case 'daily': key = date.toLocaleDateString('en-MY', { timeZone: 'Asia/Kuala_Lumpur', weekday: 'short', day: '2-digit', month: 'short', + year: 'numeric', }); break; case 'weekly': @@ -71,12 +114,19 @@ function groupTimeSeries( groupMap.get(key)!.push(entry.value); } - return Array.from(groupMap.entries()).map(([time, values]) => ({ - time, - value: values.reduce((sum, v) => sum + v, 0), - })); + return Array.from(groupMap.entries()).map(([time, values]) => { + if (agg === 'sum') { + const sum = values.reduce((a, b) => a + b, 0); + return { time, value: sum }; + } + const mean = values.reduce((a, b) => a + b, 0) / values.length; + const max = values.reduce((a, b) => (b > a ? b : a), -Infinity); + return { time, value: agg === 'max' ? max : mean }; + }); } + + const EnergyLineChart = ({ siteId }: EnergyLineChartProps) => { const chartRef = useRef(null); const [viewMode, setViewMode] = useState<'day' | 'daily' | 'weekly' | 'monthly' | 'yearly'>('day'); @@ -85,6 +135,94 @@ const EnergyLineChart = ({ siteId }: EnergyLineChartProps) => { const [selectedDate, setSelectedDate] = useState(new Date()); const [forecast, setForecast] = useState([]); + const LIVE_REFRESH_MS = 300000; // 5min when viewing a single day + const SLOW_REFRESH_MS = 600000; // 10min for weekly/monthly/yearly + + + const fetchAndSet = React.useCallback(async () => { + const now = new Date(); + let start: Date; + let end: Date; + + switch (viewMode) { + case 'day': + start = startOfDay(selectedDate); + end = endOfDay(selectedDate); + break; + case 'daily': + start = startOfWeek(now, { weekStartsOn: 1 }); + end = endOfWeek(now, { weekStartsOn: 1 }); + break; + case 'weekly': + start = startOfMonth(now); + end = endOfMonth(now); + break; + case 'monthly': + start = startOfYear(now); + end = endOfYear(now); + break; + case 'yearly': + start = new Date('2020-01-01'); + end = now; + break; + } + + const isoStart = start.toISOString(); + const isoEnd = end.toISOString(); + + try { + const res = await fetchPowerTimeseries(siteId, isoStart, isoEnd); + setConsumption(res.consumption); + setGeneration(res.generation); + + // Forecast only needs updating for the selected day + const forecastData = await fetchForecast(3.15, 101.7, 37, 0, 25.67); + const selectedDateStr = selectedDate.toISOString().split('T')[0]; + setForecast( + forecastData + .filter(({ time }: any) => time.startsWith(selectedDateStr)) + .map(({ time, forecast }: any) => ({ time, value: forecast })) + ); + } catch (error) { + console.error('Failed to fetch energy timeseries:', error); + } + }, [siteId, viewMode, selectedDate]); + + // 3) Auto-refresh effect: initial load + interval (pauses when tab hidden) + useEffect(() => { + let timer: number | undefined; + + const tick = async () => { + // Avoid wasted calls when the tab is in the background + if (!document.hidden) { + await fetchAndSet(); + } + const ms = viewMode === 'day' ? LIVE_REFRESH_MS : SLOW_REFRESH_MS; + timer = window.setTimeout(tick, ms); + }; + + // initial load + fetchAndSet(); + + // schedule next cycles + timer = window.setTimeout(tick, viewMode === 'day' ? LIVE_REFRESH_MS : SLOW_REFRESH_MS); + + const onVis = () => { + if (!document.hidden) { + // kick immediately when user returns + clearTimeout(timer); + tick(); + } + }; + document.addEventListener('visibilitychange', onVis); + + return () => { + clearTimeout(timer); + document.removeEventListener('visibilitychange', onVis); + }; + }, [fetchAndSet, viewMode]); + + function useIsDarkMode() { const [isDark, setIsDark] = useState(() => typeof document !== 'undefined' @@ -140,7 +278,7 @@ const EnergyLineChart = ({ siteId }: EnergyLineChartProps) => { setGeneration(res.generation); // ⬇️ ADD THIS here — fetch forecast - const forecastData = await fetchForecast(3.15, 101.7, 37, 0, 20.67); + const forecastData = await fetchForecast(3.15, 101.7, 37, 0, 30.67); const selectedDateStr = selectedDate.toISOString().split('T')[0]; setForecast( @@ -160,9 +298,40 @@ const EnergyLineChart = ({ siteId }: EnergyLineChartProps) => { fetchData(); }, [siteId, viewMode, selectedDate]); - const groupedConsumption = groupTimeSeries(consumption, viewMode); - const groupedGeneration = groupTimeSeries(generation, viewMode); - const groupedForecast = groupTimeSeries(forecast, viewMode); + const isEnergyView = viewMode !== 'day'; + +// Convert to energy series for aggregated views +const consumptionForGrouping = isEnergyView + ? powerSeriesToEnergySeries(consumption, 30) + : consumption; + +const generationForGrouping = isEnergyView + ? powerSeriesToEnergySeries(generation, 30) + : generation; + +const forecastForGrouping = isEnergyView + ? powerSeriesToEnergySeries(forecast, 60) // if forecast is hourly, guess 60 + : forecast; + +// Group: sum for energy views, mean for day view +const groupedConsumption = groupTimeSeries( + consumptionForGrouping, + viewMode, + isEnergyView ? 'sum' : 'mean' +); + +const groupedGeneration = groupTimeSeries( + generationForGrouping, + viewMode, + isEnergyView ? 'sum' : 'mean' +); + +const groupedForecast = groupTimeSeries( + forecastForGrouping, + viewMode, + isEnergyView ? 'sum' : 'mean' +); + const forecastMap = Object.fromEntries(groupedForecast.map(d => [d.time, d.value])); @@ -238,6 +407,8 @@ function areaGradient(ctx: any, hex: string, alphaTop = 0.22, alphaBottom = 0.02 const consumptionColor = isDark ? '#B80F0A' : '#EF4444'; // Example: Brighter red for dark mode const generationColor = isDark ? '#48A860' : '#22C55E'; // Example: Brighter green for dark mode const forecastColor = '#fcd913'; // A golden yellow that works well in both modes +const yUnit = isEnergyView ? 'kWh' : 'kW'; +const yTitle = isEnergyView ? 'Energy (kWh)' : 'Power (kW)'; const data = { labels: filteredLabels.map(formatLabel), @@ -300,6 +471,13 @@ const forecastColor = '#fcd913'; // A golden yellow that works well in both mode bodyColor: axisColor, borderColor: isDark ? '#444' : '#ccc', borderWidth: 1, + callbacks: { + label: (ctx: any) => { + const dsLabel = ctx.dataset.label || ''; + const val = ctx.parsed.y; + return `${dsLabel}: ${val?.toFixed(2)} ${yUnit}`; + }, + }, }, }, scales: { @@ -326,12 +504,7 @@ const forecastColor = '#fcd913'; // A golden yellow that works well in both mode y: { beginAtZero: true, suggestedMax: yAxisSuggestedMax, - title: { - display: true, - text: 'Power (kW)', - color: axisColor, - font: { weight: 'normal' as const }, - }, + title: { display: true, text: yTitle, color: axisColor, font: { weight: 'normal' as const } }, ticks: { color: axisColor, }, diff --git a/components/dashboards/MonthlyBarChart.tsx b/components/dashboards/MonthlyBarChart.tsx index d68df4a..57e15e7 100644 --- a/components/dashboards/MonthlyBarChart.tsx +++ b/components/dashboards/MonthlyBarChart.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { BarChart, Bar, @@ -9,46 +9,25 @@ import { Legend, } from 'recharts'; import { format } from 'date-fns'; -import { fetchPowerTimeseries } from '@/app/utils/api'; - +import { fetchMonthlyKpi, type MonthlyKPI } from '@/app/utils/api'; interface MonthlyBarChartProps { siteId: string; } -interface TimeSeriesEntry { - time: string; - value: number; -} - -const groupTimeSeries = ( - data: TimeSeriesEntry[], - mode: 'monthly' -): TimeSeriesEntry[] => { - const groupMap = new Map(); - - for (const entry of data) { - const date = new Date(entry.time); - const key = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`; - if (!groupMap.has(key)) groupMap.set(key, []); - groupMap.get(key)!.push(entry.value); +const getLastNMonthKeys = (n: number): string[] => { + const out: string[] = []; + const now = new Date(); + // include current month, go back n-1 months + for (let i = 0; i < n; i++) { + const d = new Date(now.getFullYear(), now.getMonth() - (n - 1 - i), 1); + const key = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}`; // YYYY-MM + out.push(key); } - - return Array.from(groupMap.entries()).map(([time, values]) => ({ - time, - value: values.reduce((sum, v) => sum + v, 0), - })); + return out; }; - - -const MonthlyBarChart: React.FC = ({ siteId }) => { - const [chartData, setChartData] = useState< - { month: string; consumption: number; generation: number }[] - >([]); - const [loading, setLoading] = useState(true); - - function useIsDarkMode() { +function useIsDarkMode() { const [isDark, setIsDark] = useState(() => typeof document !== 'undefined' ? document.body.classList.contains('dark') @@ -58,71 +37,77 @@ const MonthlyBarChart: React.FC = ({ siteId }) => { useEffect(() => { const check = () => setIsDark(document.body.classList.contains('dark')); check(); - - // Listen for class changes on const observer = new MutationObserver(check); observer.observe(document.body, { attributes: true, attributeFilter: ['class'] }); - return () => observer.disconnect(); }, []); return isDark; } -const isDark = useIsDarkMode(); +const MonthlyBarChart: React.FC = ({ siteId }) => { + const [chartData, setChartData] = useState< + { month: string; consumption: number; generation: number }[] + >([]); + const [loading, setLoading] = useState(true); -const consumptionColor = isDark ? '#ba8e23' : '#003049'; -const generationColor = isDark ? '#fcd913' : '#669bbc'; + const isDark = useIsDarkMode(); + const consumptionColor = isDark ? '#ba8e23' : '#003049'; + const generationColor = isDark ? '#fcd913' : '#669bbc'; + + const monthKeys = useMemo(() => getLastNMonthKeys(6), []); useEffect(() => { if (!siteId) return; - const fetchMonthlyData = async () => { + const load = async () => { setLoading(true); - const start = '2025-01-01T00:00:00+08:00'; - const end = '2025-12-31T23:59:59+08:00'; - try { - const res = await fetchPowerTimeseries(siteId, start, end); + // Fetch all 6 months in parallel + const results: MonthlyKPI[] = await Promise.all( + monthKeys.map((month) => + fetchMonthlyKpi({ + site: siteId, + month, + // consumption_topic: '...', // optional if your API needs it + // generation_topic: '...', // optional if your API needs it + }).catch((e) => { + // normalize failures to an error-shaped record so the chart can still render other months + return { + site: siteId, + month, + yield_kwh: null, + consumption_kwh: null, + grid_draw_kwh: null, + efficiency: null, + peak_demand_kw: null, + avg_power_factor: null, + load_factor: null, + error: String(e), + } as MonthlyKPI; + }) + ) + ); - const groupedConsumption = groupTimeSeries(res.consumption, 'monthly'); - const groupedGeneration = groupTimeSeries(res.generation, 'monthly'); + // Map to chart rows; default nulls to 0 for stacking/tooltip friendliness + const rows = results.map((kpi) => { + const monthLabel = format(new Date(`${kpi.month}-01`), 'MMM'); + return { + month: monthLabel, + consumption: kpi.consumption_kwh ?? 0, + generation: kpi.yield_kwh ?? 0, + }; + }); - const monthMap = new Map(); - - for (const entry of groupedConsumption) { - if (!monthMap.has(entry.time)) { - monthMap.set(entry.time, { consumption: 0, generation: 0 }); - } - monthMap.get(entry.time)!.consumption = entry.value; - } - - for (const entry of groupedGeneration) { - if (!monthMap.has(entry.time)) { - monthMap.set(entry.time, { consumption: 0, generation: 0 }); - } - monthMap.get(entry.time)!.generation = entry.value; - } - - const formatted = Array.from(monthMap.entries()) - .sort(([a], [b]) => a.localeCompare(b)) - .map(([key, val]) => ({ - month: format(new Date(`${key}-01`), 'MMM'), - consumption: val.consumption, - generation: val.generation, - })); - - setChartData(formatted.slice(-6)); // last 6 months - } catch (error) { - console.error('Failed to fetch monthly power data:', error); - setChartData([]); + setChartData(rows); } finally { setLoading(false); } }; - fetchMonthlyData(); - }, [siteId]); + load(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [siteId]); // monthKeys are stable via useMemo if (loading || !siteId || chartData.length === 0) { return ( @@ -140,7 +125,7 @@ const generationColor = isDark ? '#fcd913' : '#669bbc';
- + [`${value.toFixed(2)} kWh`]} @@ -174,15 +159,11 @@ const generationColor = isDark ? '#fcd913' : '#669bbc'; color: isDark ? '#fff' : '#222', }} cursor={{ - fill: isDark ? '#808080' : '#e0e7ef', // dark mode bg, light mode bg - fillOpacity: isDark ? 0.6 : 0.3, // adjust opacity as you like - }} - /> - + @@ -194,3 +175,4 @@ const generationColor = isDark ? '#fcd913' : '#669bbc'; export default MonthlyBarChart; + -- 2.47.2 From 9104721b513f0b672d1ddae4828aa1c965ab3824 Mon Sep 17 00:00:00 2001 From: Syasya Date: Wed, 20 Aug 2025 09:27:24 +0800 Subject: [PATCH 10/12] UI changes --- components/dashboards/SiteCard.tsx | 10 ++--- components/dropdown.tsx | 4 +- components/layouts/header.tsx | 56 ++++++++++++++------------- components/layouts/sidebar.tsx | 14 +++---- public/assets/images/newfulllogo.png | Bin 55349 -> 92980 bytes 5 files changed, 43 insertions(+), 41 deletions(-) diff --git a/components/dashboards/SiteCard.tsx b/components/dashboards/SiteCard.tsx index 6bc894b..ff47cca 100644 --- a/components/dashboards/SiteCard.tsx +++ b/components/dashboards/SiteCard.tsx @@ -88,17 +88,17 @@ const SiteCard: React.FC = ({ siteId, className = '', fallbackSta 'N/A'; return ( -
+

{project?.project_name || siteId}

{loading ? (
-
-
-
-
+
+
+
+
) : err ? (
Failed to load CRM: {err}
diff --git a/components/dropdown.tsx b/components/dropdown.tsx index 9f141d5..7fef922 100644 --- a/components/dropdown.tsx +++ b/components/dropdown.tsx @@ -38,7 +38,7 @@ const Dropdown = (props: DropdownProps, forwardedRef: any) => { useImperativeHandle(forwardedRef, () => ({ close: () => setVisible(false) })); const defaultButton = ( - + ); return ( @@ -59,7 +59,7 @@ const Dropdown = (props: DropdownProps, forwardedRef: any) => { className="z-50" > {visible && ( -
+
{props.children}
)} diff --git a/components/layouts/header.tsx b/components/layouts/header.tsx index 2183ff1..19402f0 100644 --- a/components/layouts/header.tsx +++ b/components/layouts/header.tsx @@ -4,6 +4,7 @@ import { useDispatch, useSelector } from 'react-redux'; import Link from 'next/link'; import { IRootState } from '@/store'; import { toggleTheme, toggleSidebar, toggleRTL } from '@/store/themeConfigSlice'; +import Image from 'next/image'; import Dropdown from '@/components/dropdown'; import IconMenu from '@/components/icon/icon-menu'; import IconSun from '@/components/icon/icon-sun'; @@ -82,20 +83,26 @@ useEffect(() => {
{/* Logo */}
- - logo - - Rooftop Energy - - +
+ logo +
+ -
+
+ {/* Right-side actions */}
@@ -121,17 +128,17 @@ useEffect(() => { {loadingUser ? (
) : user ? ( - - -
- } - > -
    {/* make sure this stays transparent */} + + +
+ } + > +
    {/* make sure this stays transparent */}
  • {user.email}

    @@ -142,11 +149,6 @@ useEffect(() => { Profile
  • -
  • - - Inbox - -
  • Lock Screen diff --git a/components/layouts/sidebar.tsx b/components/layouts/sidebar.tsx index 162092d..b3f6326 100644 --- a/components/layouts/sidebar.tsx +++ b/components/layouts/sidebar.tsx @@ -67,16 +67,15 @@ const Sidebar = () => {
  • + {/*}

    Providers @@ -239,7 +239,7 @@ const Sidebar = () => {

- + */} diff --git a/public/assets/images/newfulllogo.png b/public/assets/images/newfulllogo.png index 3ed94289ef2ea7a076f59913dbce0cf9e87aa460..708c5e7578a0fad1251b90e035490300fd9fae66 100644 GIT binary patch literal 92980 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

    {%Khw`R#D2a8gSNO@HLPX02N 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 DR^42H literal 55349 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 Y Date: Wed, 20 Aug 2025 09:39:43 +0800 Subject: [PATCH 11/12] remove unnecessary api --- app/api/sites/route.ts | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 app/api/sites/route.ts diff --git a/app/api/sites/route.ts b/app/api/sites/route.ts deleted file mode 100644 index 1e92b98..0000000 --- a/app/api/sites/route.ts +++ /dev/null @@ -1,20 +0,0 @@ -// app/api/sites/route.ts -import { NextResponse } from 'next/server'; -import prisma from '@/lib/prisma'; - -export async function GET() { - try { - const sites = await prisma.site.findMany({ - include: { - consumptionData: true, - generationData: true, - }, - }); - console.log('✅ Sites:', sites); - return NextResponse.json(sites); - } catch (error) { - console.error('❌ Error fetching sites:', error); - return new NextResponse('Failed to fetch sites', { status: 500 }); - } -} - -- 2.47.2 From b8c67992cbc7e2d460e614b9bda9e330017dc85c Mon Sep 17 00:00:00 2001 From: Syasya Date: Wed, 20 Aug 2025 09:42:16 +0800 Subject: [PATCH 12/12] pr build check yml --- .gitea/workflows/pr-build-check.yml | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .gitea/workflows/pr-build-check.yml diff --git a/.gitea/workflows/pr-build-check.yml b/.gitea/workflows/pr-build-check.yml new file mode 100644 index 0000000..7673ebe --- /dev/null +++ b/.gitea/workflows/pr-build-check.yml @@ -0,0 +1,37 @@ +name: PR Build Check + +on: + pull_request: + branches: + - '**' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '18' + + - name: Install dependencies + run: npm install --force + + - name: Generate Prisma Client + run: npx prisma generate + + - name: Build + run: npm run build + env: + NEXT_PUBLIC_URL: 'http://localhost:3000' + NEXT_PUBLIC_FORECAST_URL: 'http://localhost:3001' + DATABASE_URL: 'postgresql://dummy:dummy@localhost:5432/dummy' + SMTP_EMAIL: 'dummy@example.com' + SMTP_EMAIL_PASSWORD: 'dummy' + NEXT_PUBLIC_PLAUSIBLE_DOMAIN: 'localhost' + JWT_SECRET: 'dummy_secret' + JWT_REFRESH_SECRET: 'dummy_refresh_secret' \ No newline at end of file -- 2.47.2