diff --git a/.DS_Store b/.DS_Store index e390b1b..dc31f0f 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/api/package.json b/api/package.json index 96c559a..15730e7 100644 --- a/api/package.json +++ b/api/package.json @@ -35,7 +35,7 @@ "@nestjs/serve-static": "^5.0.3", "@nestjs/typeorm": "^11.0.0", "@noahspan/azure-database": "^3.1.2", - "@noahspan/noahspan-modules": "^1.2.9", + "@noahspan/noahspan-modules": "^1.2.11", "@schematics/angular": "^17.3.7", "@types/multer": "^1.4.12", "better-sqlite3": "^12.2.0", diff --git a/api/src/app.module.ts b/api/src/app.module.ts index eba2dc7..f79fa64 100644 --- a/api/src/app.module.ts +++ b/api/src/app.module.ts @@ -32,17 +32,18 @@ import { join } from 'path'; }), HealthModule, LogModule, - // MsGraphModule.registerAsync({ - // inject: [ConfigService], - // imports: [ConfigModule], - // useFactory: async (configService: ConfigService) => { - // return { - // clientId: configService.get('clientId'), - // clientSecret: configService.get('clientSecret'), - // tenantId: configService.get('tenantId') - // } - // } - // }), + MsGraphModule.registerAsync({ + inject: [ConfigService], + imports: [ConfigModule], + useFactory: async (configService: ConfigService) => { + return { + authority: configService.get('authority'), + clientId: configService.get('clientId'), + clientSecret: configService.get('clientSecret'), + tenantId: configService.get('tenantId') + } + } + }), PilotModule, ServeStaticModule.forRoot({ rootPath: join(__dirname, '../..', 'client', 'dist') diff --git a/api/src/config/configuration.ts b/api/src/config/configuration.ts index 437721c..b53cc89 100644 --- a/api/src/config/configuration.ts +++ b/api/src/config/configuration.ts @@ -1,6 +1,7 @@ export default () => ({ azureStorageConnectionString: process.env.AZURE_STORAGE_CONNECTION_STRING, audience: process.env.AUDIENCE, + authority: process.env.AUTHORITY, clientId: process.env.CLIENT_ID, clientSecret: process.env.CLIENT_SECRET, issuer: process.env.ISSUER_URL, diff --git a/api/src/log/log.controller.ts b/api/src/log/log.controller.ts index 10cf63c..73d2814 100644 --- a/api/src/log/log.controller.ts +++ b/api/src/log/log.controller.ts @@ -65,7 +65,7 @@ export class LogController { return await this.logService.create(logDto); } catch (error) { const customError = error as CustomError; - + console.log(error) throw new HttpException(customError.message, customError.statusCode); } } diff --git a/api/src/main.ts b/api/src/main.ts index d3968c6..a83aba6 100644 --- a/api/src/main.ts +++ b/api/src/main.ts @@ -10,15 +10,15 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableCors({ - origin: 'http://localhost:8080', // Allow requests from your frontend's origin + origin: 'http://localhost:8080', methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', - credentials: true, // If you need to send cookies or authorization headers + credentials: true, }); app.setGlobalPrefix('api'); app.useGlobalFilters(new HttpExceptionFilter()); app.use( session({ - secret: 'blah', + secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false }) diff --git a/api/src/pilot/pilot.interceptor.ts b/api/src/pilot/pilot.interceptor.ts index 1e9cb5c..8739095 100644 --- a/api/src/pilot/pilot.interceptor.ts +++ b/api/src/pilot/pilot.interceptor.ts @@ -29,6 +29,7 @@ export class PilotInterceptor implements NestInterceptor { if (req.headers.authorization) { const authHeader = req.headers.authorization; const token = authHeader && authHeader.split(' ')[1]; + const jwtPayload = jwtDecode(token); const rolesKeyName = Object.keys(jwtPayload).find((key) => key.includes('roles')); diff --git a/client/package.json b/client/package.json index 1e4ea21..a901e52 100644 --- a/client/package.json +++ b/client/package.json @@ -14,14 +14,12 @@ "@fortawesome/fontawesome-svg-core": "^7.1.0", "@fortawesome/free-solid-svg-icons": "^7.1.0", "@fortawesome/react-fontawesome": "^3.1.0", - "@heroui/react": "^2.8.5", "@noahspan/noahspan-components": "^2.0.0-alpha-14", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.13", "@tanstack/react-table": "^8.21.3", "axios": "^1.7.2", "dotenv": "^16.4.7", - "framer-motion": "^12.23.24", "leaflet": "^1.9.4", "oidc-spa": "^7.2.4", "react": "^19.1.1", diff --git a/client/src/App.tsx b/client/src/App.tsx index 8f73ed4..e629bd3 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,23 +1,22 @@ -import { Navigate, Route, Routes } from 'react-router-dom'; +import { Route, Routes } from 'react-router-dom'; import Flights from './components/flights/Flights'; import Logbook from './components/logbook/Logbook'; import Pilots from './components/pilots/Pilots'; import SiteNav from './components/siteNav/SiteNav'; -import { HeroUIProvider } from '@heroui/react'; -import { useHref, useNavigate } from 'react-router-dom'; +import { useNavigate } from 'react-router-dom'; const App = () => { const navigate = useNavigate(); return ( - +
} /> } /> } /> - +
); }; diff --git a/client/src/auth/oidcConfig.ts b/client/src/auth/oidcConfig.ts index d6d3ec7..9e100f9 100644 --- a/client/src/auth/oidcConfig.ts +++ b/client/src/auth/oidcConfig.ts @@ -4,10 +4,8 @@ export const { OidcProvider, useOidc, getOidc } = createReactOidc(async () => ({ issuerUri: import.meta.env.VITE_ISSUER_URI, clientId: import.meta.env.VITE_CLIENT_ID, homeUrl: import.meta.env.VITE_BASE_URL, + scopes: ['email', 'openid', 'profile', `api://${import.meta.env.VITE_CLIENT_ID}/user_impersonation`], autoLogin: false, postLoginRedirectUrl: '/', noIframe: true, - extraQueryParams: { - audience: "api://flying-test-api" - } })); \ No newline at end of file diff --git a/client/src/components/alert/Alert.tsx b/client/src/components/alert/Alert.tsx new file mode 100644 index 0000000..3404447 --- /dev/null +++ b/client/src/components/alert/Alert.tsx @@ -0,0 +1,44 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { AlertProps } from "./AlertProps.interface"; +import { faCircleCheck, faCircleInfo, faCircleXmark, faTriangleExclamation, faXmark } from "@fortawesome/free-solid-svg-icons"; + +const Alert = ({ + children, + className, + closeIcon, + severity, + onClose, + ...rest +}: AlertProps) => { + const severityVariants = { + info: 'alert-info', + error: 'alert-error', + success: 'alert-success', + warning: 'alert-warning' + }; + + return ( + <> +
+ + {severity === 'info' && } + {severity === 'error' && } + {severity === 'success' && ( + + )} + {severity === 'warning' && ( + + )} + + {children} + {closeIcon && } +
+ + ); +}; + +export default Alert; \ No newline at end of file diff --git a/client/src/components/alert/AlertProps.interface.ts b/client/src/components/alert/AlertProps.interface.ts new file mode 100644 index 0000000..4ea37ae --- /dev/null +++ b/client/src/components/alert/AlertProps.interface.ts @@ -0,0 +1,7 @@ +export interface AlertProps { + children?: React.ReactNode; + className?: string; + closeIcon?: React.ReactNode; + onClose?: () => void; + severity: 'info' | 'error' | 'success' | 'warning'; +} \ No newline at end of file diff --git a/client/src/components/confirmationDialog/ConfirmationDialog.tsx b/client/src/components/confirmationDialog/ConfirmationDialog.tsx index 2a467de..c449242 100644 --- a/client/src/components/confirmationDialog/ConfirmationDialog.tsx +++ b/client/src/components/confirmationDialog/ConfirmationDialog.tsx @@ -7,7 +7,6 @@ // IconName, // Loading // } from '@noahspan/noahspan-components'; -import { Button, Modal, ModalBody, ModalContent, ModalHeader, ModalFooter, Spinner } from '@heroui/react' import { DialogConfirmationProps } from './ConfirmationDialogProps.interface'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faCircleCheck, faXmark } from '@fortawesome/free-solid-svg-icons'; @@ -21,31 +20,25 @@ const ConfirmationDialog = ({ title }: DialogConfirmationProps) => { return ( - - - {title} - - {!isLoading &&
{contentText}
} - {isLoading && } -
- - - - -
-
+ <> + {}} checked={isOpen} /> +
+
+

{title}

+

{contentText}

+
+ + +
+
+
+ ); }; diff --git a/client/src/components/flights/Flights.tsx b/client/src/components/flights/Flights.tsx index e042b8d..c903654 100644 --- a/client/src/components/flights/Flights.tsx +++ b/client/src/components/flights/Flights.tsx @@ -1,11 +1,9 @@ -import { Icon, IconName, Skeleton } from "@noahspan/noahspan-components"; -import { Card } from '@heroui/react'; import LogbookCard from "../logbookCard/LogbookCard"; import { useEffect, useReducer } from "react"; import { useLogs } from "../../hooks/logs/UseLogs"; import { LogbookEntry } from "../logbook/LogbookEntry.interface"; import { initialState, reducer } from "./reducer"; -import { Alert } from '@heroui/react' +import Alert from "../alert/Alert"; const Flights = () => { const [state, dispatch] = useReducer(reducer, initialState); @@ -23,7 +21,7 @@ const Flights = () => { dispatch({ type: 'SET_FLIGHTS', payload: flights}) dispatch({ type: 'SET_ALERT', payload: undefined }) } else { - dispatch({ type: 'SET_ALERT', payload: { severity: 'default', message: 'No flights found' }}) + dispatch({ type: 'SET_ALERT', payload: { severity: 'info', message: 'No flights found' }}) } }, [logs]) @@ -35,12 +33,14 @@ const Flights = () => { {!logsLoading && state.alert && (
dispatch({ type: 'SET_ALERT', payload: undefined }) } - color={state.alert.severity} - title={state.alert.message} - /> + severity={state.alert.severity} + > + {state.alert.message} +
)} {!logsLoading && @@ -48,7 +48,7 @@ const Flights = () => { } - {logsLoading && [...Array(6)].map((_element, index) => { + {/* {logsLoading && [...Array(6)].map((_element, index) => { return (
{
) - })} + })} */} ) } diff --git a/client/src/components/logForm/LogForm.tsx b/client/src/components/logForm/LogForm.tsx index b9612ca..1ab9f18 100644 --- a/client/src/components/logForm/LogForm.tsx +++ b/client/src/components/logForm/LogForm.tsx @@ -1,6 +1,5 @@ -import React, { useEffect, useReducer } from 'react'; -import { Alert, Button, DatePicker, Drawer, DrawerBody, DrawerContent, DrawerFooter, DrawerHeader, Input, NumberInput, Select, Selection, SelectItem, SharedSelection, Textarea } from '@heroui/react' -import { useForm, Controller, FormProvider, useFormContext } from 'react-hook-form'; +import { useEffect, useReducer } from 'react'; +import { useForm, Controller, useFormContext } from 'react-hook-form'; import { LogFormProps } from './LogFormProps.interface'; import { initialState, reducer } from './reducer'; import { AxiosError, AxiosResponse } from 'axios'; @@ -10,7 +9,6 @@ import { useOidc } from '../../auth/oidcConfig'; import httpClient from '../../httpClient/httpClient'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faSave, faXmark } from '@fortawesome/free-solid-svg-icons' -import { parseAbsolute, parseDate, getLocalTimeZone, CalendarDate, ZonedDateTime } from '@internationalized/date'; import { useLogbookContext } from '../../hooks/logbookContext/UseLogbookContext'; const LogForm = () => { @@ -40,7 +38,7 @@ const LogForm = () => { } catch (error) { const axiosError = error as AxiosError; - dispatch({ type: 'SET_ALERT', payload: { severity: 'danger', message: axiosError.message }}); + dispatch({ type: 'SET_ALERT', payload: { severity: 'error', message: axiosError.message }}); } finally { dispatch({ type: 'SET_IS_LOADING', payload: false }); } @@ -59,7 +57,7 @@ const LogForm = () => { label: pilot.name, }; }); - console.log(newPilotsOptions) + dispatch({ type: 'SET_PILOT_OPTIONS', payload: newPilotsOptions }); } }, [pilots]); @@ -73,25 +71,21 @@ const LogForm = () => { { + render={({ field: { onChange, value } }) => { return ( - + ); }} /> @@ -104,21 +98,14 @@ const LogForm = () => { name="date" control={control} render={({ field: { onChange, value } }) => { - const parsedAbsoluteDate = value ? parseAbsolute(value, getLocalTimeZone()) : value - return( - { - let date = selectedDate as CalendarDate; - - setValue('date', date.toDate(getLocalTimeZone()).toISOString()) - }} - size='lg' - value={parsedAbsoluteDate ? new CalendarDate(parsedAbsoluteDate.year, parsedAbsoluteDate.month, parsedAbsoluteDate.day) : value} - /> + ) }} /> @@ -131,18 +118,11 @@ const LogForm = () => { name="aircraftMakeModel" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -158,18 +138,11 @@ const LogForm = () => { name="aircraftIdentity" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -185,18 +158,11 @@ const LogForm = () => { name="routeFrom" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -210,18 +176,11 @@ const LogForm = () => { name="routeTo" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -235,21 +194,11 @@ const LogForm = () => { name="durationOfFlight" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -265,21 +214,11 @@ const LogForm = () => { name="singleEngineLand" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -293,20 +232,11 @@ const LogForm = () => { name="simulatorAtd" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -323,22 +253,11 @@ const LogForm = () => { name="landingsDay" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -352,22 +271,11 @@ const LogForm = () => { name="landingsNight" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -386,24 +294,12 @@ const LogForm = () => { name="groundTrainingReceived" control={control} render={({ field: { onChange, value } }) => ( - )} /> @@ -418,22 +314,11 @@ const LogForm = () => { name="flightTrainingReceived" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -447,22 +332,11 @@ const LogForm = () => { name="crossCountry" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -476,22 +350,11 @@ const LogForm = () => { name="night" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -505,22 +368,11 @@ const LogForm = () => { name="solo" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -534,22 +386,11 @@ const LogForm = () => { name="pilotInCommand" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -566,22 +407,11 @@ const LogForm = () => { name="instrumentActual" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -595,22 +425,11 @@ const LogForm = () => { name="instrumentSimulated" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -626,22 +445,11 @@ const LogForm = () => { name="instrumentApproaches" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -655,22 +463,11 @@ const LogForm = () => { name="instrumentHolds" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -684,23 +481,11 @@ const LogForm = () => { name="instrumentNavTrack" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -716,19 +501,11 @@ const LogForm = () => { name="notes" control={control} render={({ field: { onChange, value } }) => ( - )} /> diff --git a/client/src/components/logForm/LogFormState.interface.ts b/client/src/components/logForm/LogFormState.interface.ts index 6f14e09..449ccdc 100644 --- a/client/src/components/logForm/LogFormState.interface.ts +++ b/client/src/components/logForm/LogFormState.interface.ts @@ -1,13 +1,9 @@ -import { Selection } from "@heroui/react"; import { Alert } from "../../interfaces/Alert.interface"; export interface LogFormState { alert: Alert | undefined; - experienceSelectedKeys: Selection; - instrumentSelectedKeys: Selection; isDisabled: boolean; isLoading: boolean; - landingsSelectedKeys: Selection; pilotOptions: { key: string; label: string; }[]; selectedPilotName: string; } diff --git a/client/src/components/logForm/reducer.tsx b/client/src/components/logForm/reducer.tsx index 6b3143a..277d03f 100644 --- a/client/src/components/logForm/reducer.tsx +++ b/client/src/components/logForm/reducer.tsx @@ -1,24 +1,17 @@ import { Alert } from '../../interfaces/Alert.interface'; import { LogFormState } from './LogFormState.interface'; -import { Selection } from '@heroui/react'; type Action = | { type: 'SET_ALERT'; payload: Alert | undefined } - | { type: 'SET_EXPERIENCE_SELECTED_KEYS'; payload: Selection } - | { type: 'SET_INSTRUMENT_SELECTED_KEYS'; payload: Selection } | { type: 'SET_IS_DISABLED'; payload: boolean } | { type: 'SET_IS_LOADING'; payload: boolean } - | { type: 'SET_LANDINGS_SELECTED_KEYS'; payload: Selection } | { type: 'SET_PILOT_OPTIONS'; payload: { key: string, label: string; }[] } | { type: 'SET_SELECTED_PILOT_NAME'; payload: string }; export const initialState: LogFormState = { alert: undefined, - experienceSelectedKeys: new Set([]), - instrumentSelectedKeys: new Set([]), isDisabled: false, isLoading: true, - landingsSelectedKeys: new Set(['1']), pilotOptions: [], selectedPilotName: '' }; @@ -34,36 +27,18 @@ export const reducer = ( alert: action.payload }; } - case 'SET_EXPERIENCE_SELECTED_KEYS': { - return { - ...state, - experienceSelectedKeys: action.payload - } - } case 'SET_IS_DISABLED': { return { ...state, isDisabled: action.payload }; } - case 'SET_INSTRUMENT_SELECTED_KEYS': { - return { - ...state, - instrumentSelectedKeys: action.payload - } - } case 'SET_IS_LOADING': { return { ...state, isLoading: action.payload }; } - case 'SET_LANDINGS_SELECTED_KEYS': { - return { - ...state, - landingsSelectedKeys: action.payload - } - } case 'SET_PILOT_OPTIONS': { return { ...state, diff --git a/client/src/components/logbook/Logbook.tsx b/client/src/components/logbook/Logbook.tsx index 2d4fa83..3b3ed69 100644 --- a/client/src/components/logbook/Logbook.tsx +++ b/client/src/components/logbook/Logbook.tsx @@ -1,10 +1,8 @@ -import { Key, useEffect, useReducer } from 'react'; -import LogForm from '../logForm/LogForm'; +import { useEffect, useReducer } from 'react'; import { initialState, reducer } from './reducer'; import { AxiosError, AxiosResponse } from 'axios'; import { FormMode } from '../../enums/formMode'; import { authColumns, unauthColumns } from './columns'; -import ActionMenu from '../actionMenu/ActionMenu'; import ConfirmationDialog from '../confirmationDialog/ConfirmationDialog'; import { LogbookEntry } from './LogbookEntry.interface'; import LogbookCard from '../logbookCard/LogbookCard'; @@ -14,12 +12,12 @@ import { useUserRole } from '../../hooks/userRole/UseUserRole'; import { UserRole } from '../../enums/userRole'; import { useBreakpoints } from '../../hooks/useBreakpoints/UseBreakpoints'; import { ScreenSize } from '../../enums/screenSize'; -import { Table, TableHeader, TableBody, TableColumn, Dropdown, DropdownTrigger, Button, DropdownSection, DropdownMenu, DropdownItem, Alert, TableRow, TableCell } from '@heroui/react'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faAdd, faEllipsisVertical, faPen, faEye, faTrash, faMapLocationDot } from '@fortawesome/free-solid-svg-icons' import { CellContext, ColumnDef, flexRender, getCoreRowModel, getPaginationRowModel, HeaderContext, useReactTable } from '@tanstack/react-table'; import { useLogbookContext } from '../../hooks/logbookContext/UseLogbookContext'; import LogbookDrawer from '../logbookDrawer/LogbookDrawer'; +import Alert from '../alert/Alert'; const Logbook: React.FC = () => { const [state, dispatch] = useReducer(reducer, initialState); @@ -28,7 +26,6 @@ const Logbook: React.FC = () => { const { userRole } = useUserRole(); const { screenSize } = useBreakpoints(); const columnTotal = (info: HeaderContext): number => { - const blah = info.table const values: number[] = info.table.getPaginationRowModel().rows.map((row: any) => Number(row.getValue(info.column.id))).filter((value: any) => !Number.isNaN(value)); let total: number = 0; @@ -69,13 +66,17 @@ const Logbook: React.FC = () => { id: 'route', header: 'Route of Flight', meta: { - headerAlign: 'center' + className: 'border-l border-base-300', + headerAlign: 'text-center' }, columns: [ { id: 'routeFrom', accessorKey: 'routeFrom', - header: 'From' + header: 'From', + meta: { + className: 'border-l border-base-300', + } }, { id: 'routeTo', @@ -89,8 +90,9 @@ const Logbook: React.FC = () => { accessorKey: 'durationOfFlight', header: 'Duration Of Flight', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + className: 'border-l border-base-300', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '', @@ -99,51 +101,33 @@ const Logbook: React.FC = () => { const notes: ColumnDef = { id: 'notes', accessorKey: 'notes', - header: 'Notes' + header: 'Notes', + meta: { + className: 'border-l border-base-300', + } } const actions: ColumnDef = { id: 'actions', header: 'Actions', meta: { - align: 'center', - headerAlign: 'center' + align: 'text-center', + className: 'border-l border-base-300', + headerAlign: 'text-center' }, cell: (info: CellContext) => { return ( - - - - - - - onOpenCloseDrawer(FormMode.EDIT, info.row.original.id)} - startContent={} - > - Edit - - onOpenCloseDrawer(FormMode.VIEW, info.row.original.id)} - startContent={} - > - View - - - - onDeleteLog(info.row.original.id)} - startContent={} - > - Delete - - - - +
+
+ +
) } } @@ -173,8 +157,8 @@ const Logbook: React.FC = () => { accessorKey: 'singleEngineLand', header: 'Single Engine Land', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '', @@ -184,7 +168,8 @@ const Logbook: React.FC = () => { id: 'landings', header: 'Landings', meta: { - headerAlign: 'center' + className: 'border-l border-base-300', + headerAlign: 'text-center' }, columns: [ { @@ -193,8 +178,9 @@ const Logbook: React.FC = () => { header: 'Day', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + className: 'border-l border-base-300', + headerAlign: 'text-right' } }, { @@ -203,8 +189,8 @@ const Logbook: React.FC = () => { header: 'Night', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' } } ] @@ -213,7 +199,8 @@ const Logbook: React.FC = () => { id: 'instrument', header: 'Instrument', meta: { - headerAlign: 'center' + className: 'border-l border-base-300', + headerAlign: 'text-center' }, columns: [ { @@ -222,8 +209,9 @@ const Logbook: React.FC = () => { header: 'Actual', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + className: 'border-l border-base-300', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '', @@ -234,8 +222,8 @@ const Logbook: React.FC = () => { header: 'Simulated', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -246,8 +234,8 @@ const Logbook: React.FC = () => { header: 'Approaches', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' } }, { @@ -256,8 +244,8 @@ const Logbook: React.FC = () => { header: 'Holds', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' } }, { @@ -266,8 +254,8 @@ const Logbook: React.FC = () => { header: 'Nav/Track', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' } } ] @@ -276,7 +264,8 @@ const Logbook: React.FC = () => { id: 'experienceTraining', header: 'Type of pilot experience or training', meta: { - headerAlign: 'center' + className: 'border-l border-base-300', + headerAlign: 'text-center' }, columns: [ { @@ -285,8 +274,9 @@ const Logbook: React.FC = () => { header: 'Ground Training Received', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + className: 'border-l border-base-300', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -297,8 +287,8 @@ const Logbook: React.FC = () => { header: 'Flight Training Received', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -309,8 +299,8 @@ const Logbook: React.FC = () => { header: 'Cross Country', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -321,8 +311,8 @@ const Logbook: React.FC = () => { header: 'Night', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -333,8 +323,8 @@ const Logbook: React.FC = () => { header: 'Solo', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -345,8 +335,8 @@ const Logbook: React.FC = () => { header: 'Pilot In Command', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -372,14 +362,14 @@ const Logbook: React.FC = () => { dispatch({ type: 'SET_ALERT', payload: undefined}) } } else { - dispatch({ type: 'SET_ALERT', payload: { severity: 'default', message: 'No logbook entries found.'}}) + dispatch({ type: 'SET_ALERT', payload: { severity: 'info', message: 'No logbook entries found.'}}) } } catch (error) { const axiosError = error as AxiosError; dispatch({ type: 'SET_ALERT', - payload: { severity: 'danger', message: `Loading of logbook entries failed with the following message: ${axiosError.message}`} + payload: { severity: 'error', message: `Loading of logbook entries failed with the following message: ${axiosError.message}`} }); } finally { dispatch({ type: 'SET_IS_LOADING', payload: false }); @@ -437,7 +427,7 @@ const Logbook: React.FC = () => { dispatch({ type: 'SET_ALERT', - payload: { severity: 'danger', message: `Loading of logbook entries failed with the following message: ${axiosError.message}`} + payload: { severity: 'error', message: `Loading of logbook entries failed with the following message: ${axiosError.message}`} }); } finally { dispatch({ type: 'SET_IS_CONFIRMATION_DIALOG_LOADING', payload: false }); @@ -503,44 +493,52 @@ const Logbook: React.FC = () => {
{userRole === UserRole.WRITE && - + + }
{!state.isLoading && state.alert && (
dispatch({ type: 'SET_ALERT', payload: undefined }) } - color={'default'} - title={state.alert.message} - /> + severity={'info'} + > + {state.alert.message} +
)} {!state.isLoading && ( -
+
{state.entries.length > 0 && screenSize !== ScreenSize.SM && ( -
- - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { +
+
+ + {table.getHeaderGroups().map((headerGroup, headerGroupIndex) => ( + + {headerGroup.headers.map((header, headerIndex) => { return ( ); })} @@ -581,7 +581,7 @@ const Logbook: React.FC = () => { })} - + {table.getFooterGroups().map((footerGroup, index) => { if (index === 0) { return ( @@ -591,14 +591,16 @@ const Logbook: React.FC = () => { ); })} @@ -641,14 +643,6 @@ const Logbook: React.FC = () => { title="Confirm Delete" /> )} - {/* {state.isTracksOpen && - onOpenCloseTracks(mode)} - selectedLogId={logbookContext.state.selectedLogId} - /> - } */} ); }; diff --git a/client/src/components/logbook/columns.tsx b/client/src/components/logbook/columns.tsx index 37315ce..34fb854 100644 --- a/client/src/components/logbook/columns.tsx +++ b/client/src/components/logbook/columns.tsx @@ -48,7 +48,8 @@ const route: ColumnDef = { id: 'route', header: 'Route of Flight', meta: { - headerAlign: 'center' + headerAlign: 'text-center', + className: 'border-l border-base-400' }, columns: [ { @@ -68,8 +69,8 @@ const durationOfFlight: ColumnDef = { accessorKey: 'durationOfFlight', header: 'Duration Of Flight', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '', @@ -106,8 +107,8 @@ export const authColumns: ColumnDef[] = [ accessorKey: 'singleEngineLand', header: 'Single Engine Land', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '', @@ -117,7 +118,7 @@ export const authColumns: ColumnDef[] = [ id: 'landings', header: 'Landings', meta: { - headerAlign: 'center' + headerAlign: 'text-center' }, columns: [ { @@ -126,8 +127,8 @@ export const authColumns: ColumnDef[] = [ header: 'Day', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' } }, { @@ -136,8 +137,8 @@ export const authColumns: ColumnDef[] = [ header: 'Night', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' } } ] @@ -146,7 +147,7 @@ export const authColumns: ColumnDef[] = [ id: 'instrument', header: 'Instrument', meta: { - headerAlign: 'center' + headerAlign: 'text-center' }, columns: [ { @@ -155,8 +156,8 @@ export const authColumns: ColumnDef[] = [ header: 'Actual', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '', @@ -167,8 +168,8 @@ export const authColumns: ColumnDef[] = [ header: 'Simulated', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -179,8 +180,8 @@ export const authColumns: ColumnDef[] = [ header: 'Approaches', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' } }, { @@ -189,8 +190,8 @@ export const authColumns: ColumnDef[] = [ header: 'Holds', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' } }, { @@ -199,8 +200,8 @@ export const authColumns: ColumnDef[] = [ header: 'Nav/Track', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' } } ] @@ -209,7 +210,7 @@ export const authColumns: ColumnDef[] = [ id: 'experienceTraining', header: 'Type of pilot experience or training', meta: { - headerAlign: 'center' + headerAlign: 'text-center' }, columns: [ { @@ -218,8 +219,8 @@ export const authColumns: ColumnDef[] = [ header: 'Ground Training Received', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -230,8 +231,8 @@ export const authColumns: ColumnDef[] = [ header: 'Flight Training Received', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -242,8 +243,8 @@ export const authColumns: ColumnDef[] = [ header: 'Cross Country', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -254,8 +255,8 @@ export const authColumns: ColumnDef[] = [ header: 'Night', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -266,8 +267,8 @@ export const authColumns: ColumnDef[] = [ header: 'Solo', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' @@ -278,8 +279,8 @@ export const authColumns: ColumnDef[] = [ header: 'Pilot In Command', footer: (info: HeaderContext) => columnTotal(info) > 0 ? columnTotal(info).toFixed(1) : '', meta: { - align: 'right', - headerAlign: 'right' + align: 'text-right', + headerAlign: 'text-right' }, cell: (info: CellContext) => info.getValue() ? parseFloat(info.getValue() as string).toFixed(1) : '' diff --git a/client/src/components/logbookCard/LogbookCard.tsx b/client/src/components/logbookCard/LogbookCard.tsx index ac6f3df..98843d3 100644 --- a/client/src/components/logbookCard/LogbookCard.tsx +++ b/client/src/components/logbookCard/LogbookCard.tsx @@ -1,4 +1,3 @@ -import { Accordion, AccordionItem, Card, CardBody, CardHeader } from '@heroui/react' import { LogbookCardProps } from "./LogbookCardProps.interface"; import TrackMap from "../trackMap/TrackMap"; @@ -10,12 +9,10 @@ const LogbookCard = ({ logs, mode, onDelete, onOpenCloseForm }: LogbookCardProps const formattedDate: string = `${date.getMonth()}/${date.getDate()}/${date.getFullYear()}`; return ( -
- - -

{formattedDate}

-
- +
+
+

{formattedDate}

+
{mode === 'flights' && log.tracks && log.tracks.length > 0 &&
} - - -
-
- Aircraft Make and Model -
-
- {log.aircraftMakeModel} -
-
- Route From -
-
- {log.routeFrom} -
-
- Route To -
-
- {log.routeTo} -
-
- Duration Of Flight -
-
- {log.durationOfFlight} -
- {log.notes && - <> -
- Notes -
-
- {log.notes} -
- - } +
+
+ +
Details
+
+
+
+ Aircraft Make and Model
- - - - - +
+ {log.aircraftMakeModel} +
+
+ Route From +
+
+ {log.routeFrom} +
+
+ Route To +
+
+ {log.routeTo} +
+
+ Duration Of Flight +
+
+ {log.durationOfFlight} +
+ {log.notes && + <> +
+ Notes +
+
+ {log.notes} +
+ + } +
+
+
+
) })} diff --git a/client/src/components/logbookDrawer/LogbookDrawer.tsx b/client/src/components/logbookDrawer/LogbookDrawer.tsx index a4a61c6..1f47e3d 100644 --- a/client/src/components/logbookDrawer/LogbookDrawer.tsx +++ b/client/src/components/logbookDrawer/LogbookDrawer.tsx @@ -1,7 +1,7 @@ -import { Alert, Button, Drawer, DrawerBody, DrawerContent, DrawerFooter, DrawerHeader, Tab, Tabs } from "@heroui/react"; import { LogbookDrawerProps } from "./LogbookDrawerProps.interface"; import LogForm from "../logForm/LogForm"; import TracksForm from "../tracksForm/TracksForm"; +import Alert from '../alert/Alert'; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faClock, faMapLocationDot, faSave, faXmark } from "@fortawesome/free-solid-svg-icons"; import { FormProvider, useForm } from "react-hook-form"; @@ -9,10 +9,10 @@ import { FormMode } from "../../enums/formMode"; import httpClient from "../../httpClient/httpClient"; import { AxiosError } from "axios"; import { useLogbookContext } from "../../hooks/logbookContext/UseLogbookContext"; -import { Key, useState } from "react"; +import { useState } from "react"; const LogbookDrawer = ({ onOpenClose }: LogbookDrawerProps) => { - const [activeTab, setActiveTab] = useState('time'); + const [activeTab, setActiveTab] = useState('time'); const defaultValues = { pilotId: '', date: null, @@ -63,111 +63,107 @@ const LogbookDrawer = ({ onOpenClose }: LogbookDrawerProps) => { } catch (error) { const axiosError = error as AxiosError; - logbookContext.dispatch({ type: 'SET_FORM_ALERT', payload: { severity: 'danger', message: axiosError.message }}); + logbookContext.dispatch({ type: 'SET_FORM_ALERT', payload: { severity: 'error', message: axiosError.message }}); } finally { logbookContext.dispatch({ type: 'SET_IS_FORM_LOADING', payload: false }); } }; - const onSelectedKeyChanged = (key: React.Key) => { - setActiveTab(key) + const onSelectedKeyChanged = (tab: string) => { + setActiveTab(tab) } return ( - - - - } - isOpen={logbookContext.state.isDrawerOpen} - onClose={onCancel} +
+ // + // + // } + // isOpen={logbookContext.state.isDrawerOpen} + // onClose={onCancel} > - - -
- - {`${logbookContext.state.formMode.toString().toLowerCase().charAt(0).toUpperCase() + logbookContext.state.formMode.toString().slice(1).toLowerCase()} Entry`} - - - {logbookContext.state.formAlert && ( -
+ {}} checked={logbookContext.state.isDrawerOpen} /> +
+ +
+ + +

+ {`${logbookContext.state.formMode.toString().toLowerCase().charAt(0).toUpperCase() + logbookContext.state.formMode.toString().slice(1).toLowerCase()} Entry`} +

+ {logbookContext.state.formAlert && ( logbookContext.dispatch({ type: 'SET_FORM_ALERT', payload: undefined }) } - color={logbookContext.state.formAlert.severity} - title={logbookContext.state.formAlert.message} - /> -
- )} - - - - Time -
- } - > - - - {logbookContext.state.formMode !== FormMode.ADD && - - - Tracks -
- } + severity={logbookContext.state.formAlert.severity} > - - - } - -
- {activeTab !== 'tracks' && - -
-
- - {logbookContext.state.formMode.toString() !== FormMode.VIEW && ( - - )} + {logbookContext.state.formAlert.message} + + )} +
+ +
+
+ {logbookContext.state.formMode !== FormMode.ADD && + <> + +
+ +
+ + }
- - } - - - - + {activeTab !== 'tracks' && +
+
+
+ + {logbookContext.state.formMode.toString() !== FormMode.VIEW && ( + + )} +
+
+
+ } + + +
+
+
) } diff --git a/client/src/components/pilotForm/PilotForm.tsx b/client/src/components/pilotForm/PilotForm.tsx index 9130706..d09999b 100644 --- a/client/src/components/pilotForm/PilotForm.tsx +++ b/client/src/components/pilotForm/PilotForm.tsx @@ -1,4 +1,4 @@ -import { Key, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useForm, Controller, FormProvider } from 'react-hook-form'; import { IPilotFormProps } from './IPilotFormProps'; import { AxiosError, AxiosResponse } from 'axios'; @@ -9,7 +9,6 @@ import PilotFormEndorsements from '../pilotFormEndorsements/PilotFormEndorsement import PilotFormMedical from '../pilotFormMedical/PilotFormMedical'; import { useOidc } from '../../auth/oidcConfig'; import httpClient from '../../httpClient/httpClient'; -import { Button, Drawer, DrawerHeader, DrawerContent, DrawerBody, DrawerFooter, Input, Autocomplete, AutocompleteItem, SelectItem, Select } from '@heroui/react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faSave, faXmark } from '@fortawesome/free-solid-svg-icons'; import { states } from './states'; @@ -45,39 +44,6 @@ const PilotForm: React.FC = ({ const [isDisabled, setIsDisabled] = useState(false); const [isError, setIsError] = useState(false); - const onPeoplePickerSearch = async ( - value: string - ) => { - setIsPeoplePickerLoading(true); - setPeoplePickerValue(value) - - try { - if (value !== '') { - const searchString: string = value; - const response: AxiosResponse = await httpClient.get( - `api/msgraph/search?search=${searchString}` - ); - - setPeoplePickerResults(response.data); - } else { - setPeoplePickerResults([]); - } - } catch (error) { - console.log(error); - } finally { - setIsPeoplePickerLoading(false); - } - }; - - const onPersonSelected = (userPrincipalName: string) => { - const person: Person | undefined = peoplePickerResults.find((person) => person.userPrincipalName === userPrincipalName as string); - - methods.setValue('name', person?.displayName!); - methods.setValue('userId', person?.userPrincipalName!); - setPeoplePickerValue(person?.displayName!); - setPeoplePickerResults([]) - }; - const onCancel = () => { methods.reset(defaultValues); onOpenClose(FormMode.CANCEL); @@ -138,245 +104,229 @@ const PilotForm: React.FC = ({ }, [pilotId]); return ( - - - - } - isOpen={isDrawerOpen} - placement='right' - data-testid="pilot-drawer" - onClose={onCancel} - size='xl' +
+ // + // + // } + // isOpen={isDrawerOpen} + // placement='right' + // data-testid="pilot-drawer" + // onClose={onCancel} + // size='xl' > - - -
- - {`${mode.toString().toLowerCase().charAt(0).toUpperCase() + mode.toString().slice(1).toLowerCase()} Pilot`} - - -
-
-
Name *
-
-
- onPersonSelected(key as string)} - > - {peoplePickerResults.map((person: Person) => ( - - {person.displayName} - - ))} - -
- {isUserLoggedIn && - <> -
- Address * -
-
- ( - - )} - /> -
-
-
City *
-
-
- ( - - )} - /> -
-
-
State *
-
-
- ( - - )} - /> -
-
-
Postal Code *
-
-
- ( - - )} - /> -
-
-
Email
-
-
- ( - - )} - /> -
-
-
Phone Number
-
-
- ( - - )} - /> -
- - } - {/* {isAuthenticated && - - {}} checked={isDrawerOpen} /> +
+ +
+ + +

+ {`${mode.toString().toLowerCase().charAt(0).toUpperCase() + mode.toString().slice(1).toLowerCase()} Pilot`} +

+
+
+ Name * +
+
+ ( + + )} /> +
+ {isUserLoggedIn && + <> +
+ Address * +
+
+ ( + + )} + /> +
+
+
City *
+
+
+ ( + + )} + /> +
+
+
State *
+
+
+ ( + + )} + /> +
+
+
Postal Code *
+
+
+ ( + + )} + /> +
+
+
Email
+
+
+ ( + + )} + /> +
+
+
Phone Number
+
+
+ ( + + )} + /> +
+ + } + {/* {isAuthenticated && + + + + } + + - } - - - - - - */} - {/*
*/} + + + */} + {/*
*/} - {/*
*/} -
- - - - {mode.toString() !== FormMode.VIEW && ( - - )} - - - - - + + {mode.toString() !== FormMode.VIEW ? 'Cancel' : 'Close'} + + {mode.toString() !== FormMode.VIEW && ( + + )} +
+
+ + +
+
+
); }; diff --git a/client/src/components/pilots/Pilots.tsx b/client/src/components/pilots/Pilots.tsx index 03bd22e..9326dbb 100644 --- a/client/src/components/pilots/Pilots.tsx +++ b/client/src/components/pilots/Pilots.tsx @@ -10,14 +10,18 @@ import { UserRole } from '../../enums/userRole'; import httpClient from '../../httpClient/httpClient' import { ScreenSize } from '../../enums/screenSize'; import { useBreakpoints } from '../../hooks/useBreakpoints/UseBreakpoints'; -import { Alert, Button, Dropdown, DropdownItem, DropdownSection, Table, TableHeader, TableBody, TableColumn, TableRow, TableCell, DropdownTrigger, DropdownMenu } from '@heroui/react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faEllipsisVertical, faPen, faEye, faTrash, faPlus } from '@fortawesome/free-solid-svg-icons' +import { faEllipsisVertical, faPen, faEye, faTrash, faPlus } from '@fortawesome/free-solid-svg-icons'; +import { CellContext, ColumnDef, flexRender, getCoreRowModel, getPaginationRowModel, useReactTable } from '@tanstack/react-table'; +import { Pilot } from './Pilot.interface'; +import Alert from '../alert/Alert'; +import { useOidc } from '../../auth/oidcConfig'; const Pilots: React.FC = () => { const [state, dispatch] = useReducer(reducer, initialState); const { userRole } = useUserRole(); - const { screenSize } = useBreakpoints() + const { screenSize } = useBreakpoints(); + const { isUserLoggedIn } = useOidc(); const getPilots = async () => { try { @@ -27,6 +31,8 @@ const Pilots: React.FC = () => { `api/pilots` ); + console.log(response) + if (response.data.length > 0) { dispatch({ type: 'SET_PILOTS', payload: response.data }); @@ -34,7 +40,7 @@ const Pilots: React.FC = () => { dispatch({ type: 'SET_ALERT', payload: undefined }) } } else { - dispatch({ type: 'SET_ALERT', payload: { severity: 'default', message: 'No pilots found.' }}) + dispatch({ type: 'SET_ALERT', payload: { severity: 'info', message: 'No pilots found.' }}) dispatch({ type: 'SET_PILOTS', payload: [] }); } } catch (error) { @@ -42,7 +48,7 @@ const Pilots: React.FC = () => { dispatch({ type: 'SET_ALERT', - payload: { severity: 'danger', message: `Loading of pilots failed with the following message: ${axiosError.message}`} + payload: { severity: 'error', message: `Loading of pilots failed with the following message: ${axiosError.message}`} }) } finally { dispatch({ type: 'SET_IS_LOADING', payload: false }) @@ -101,7 +107,7 @@ const Pilots: React.FC = () => { dispatch({ type: 'SET_ALERT', - payload: { severity: 'danger', message: `Loading of logbook entries failed with the following message: ${axiosError.message}`} + payload: { severity: 'error', message: `Loading of logbook entries failed with the following message: ${axiosError.message}`} }); } finally { dispatch({ type: 'SET_IS_CONFIRMATION_DIALOG_LOADING', payload: false }); @@ -115,64 +121,50 @@ const Pilots: React.FC = () => { }); }; - const columns = [ + const columns: ColumnDef[]= [ { id: 'name', - name: 'Name' + accessorKey: 'name', + header: 'Name' }, { id: 'actions', - name: 'Actions' + header: 'Actions', + meta: { + align: 'text-center', + headerAlign: 'text-center' + }, + cell: (info: CellContext) => { + return ( +
+
+ +
+ ) + } } ] - const renderCell = (pilot: any, columnKey: any) => { - const cellValue = pilot[columnKey] + const textAlignment = { + center: 'text-center', + left: 'text-start', + right: 'text-end' + }; - switch (columnKey) { - case 'actions': { - return ( - - - - - - - onOpenClosePilotForm(FormMode.EDIT, pilot.id)} - startContent={} - > - Edit - - onOpenClosePilotForm(FormMode.VIEW, pilot.id)} - startContent={} - > - View - - - - onDeletePilot(pilot.id)} - startContent={} - > - Delete - - - - - ) - } - default: { - return cellValue - } - } - } + const table = useReactTable({ + data: state.pilots, + columns: columns, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel() + }); useEffect(() => { if (!state.isFormOpen) { @@ -188,52 +180,85 @@ const Pilots: React.FC = () => {
{userRole === UserRole.WRITE && - + }
{!state.isLoading && state.alert && (
dispatch({ type: 'SET_ALERT', payload: undefined }) } - color={state.alert.severity} - title={state.alert.message} - /> + severity={state.alert.severity} + > + {state.alert.message} +
)} -
+
{state.pilots.length > 0 && screenSize !== ScreenSize.SM && -
{header.isPlaceholder ? null : ( -
+
{flexRender( header.column.columnDef.header, header.getContext() @@ -566,13 +564,15 @@ const Logbook: React.FC = () => { {row.getVisibleCells().map((cell) => { return (
*]:z-1 [&>*]:relative outline-solid outline-transparent data-[focus-visible=true]:z-10 data-[focus-visible=true]:outline-2 data-[focus-visible=true]:outline-focus data-[focus-visible=true]:outline-offset-2 before:pointer-events-none before:content-[''] before:absolute before:z-0 before:inset-0 before:opacity-0 data-[selected=true]:before:opacity-100 group-data-[disabled=true]/tr:text-foreground-300 group-data-[disabled=true]/tr:cursor-not-allowed before:bg-default/60 data-[selected=true]:text-default-foreground first:before:rounded-s-lg last:before:rounded-e-lg text-start`} + className={`py-2 px-3 relative align-middle whitespace-normal text-small font-normal [&>*]:z-1 [&>*]:relative outline-solid outline-transparent data-[focus-visible=true]:z-10 data-[focus-visible=true]:outline-2 data-[focus-visible=true]:outline-focus data-[focus-visible=true]:outline-offset-2 before:pointer-events-none before:content-[''] before:absolute before:z-0 before:inset-0 before:opacity-0 data-[selected=true]:before:opacity-100 group-data-[disabled=true]/tr:text-foreground-300 group-data-[disabled=true]/tr:cursor-not-allowed before:bg-default/60 data-[selected=true]:text-default-foreground first:before:rounded-s-lg last:before:rounded-e-lg text-start`} key={cell.id} > - {flexRender( - cell.column.columnDef.cell, - cell.getContext() - )} +
+ {flexRender( + cell.column.columnDef.cell, + cell.getContext() + )} +
- {header.isPlaceholder - ? null - : flexRender( - header.column.columnDef.footer, - header.getContext() - )} +
+ {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.footer, + header.getContext() + ) + } +
- - {(column) => ( - - {column.name} - - )} - - - {(item) => ( - - {(columnKey => ( - - {renderCell(item, columnKey)} - - ))} - - )} - -
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + ); + })} + + ))} + + + <> + {table.getRowModel().rows.map((row) => { + return ( + + {row.getVisibleCells().map((cell) => { + return ( + + ); + })} + + ); + })} + + +
+ {header.isPlaceholder ? null : ( +
+ {flexRender( + header.column.columnDef.header, + header.getContext() + )} + {/* {header.column.getCanFilter() ? ( +
+ +
+ ) : null} */} +
+ )} +
*]:z-1 [&>*]:relative outline-solid outline-transparent data-[focus-visible=true]:z-10 data-[focus-visible=true]:outline-2 data-[focus-visible=true]:outline-focus data-[focus-visible=true]:outline-offset-2 before:pointer-events-none before:content-[''] before:absolute before:z-0 before:inset-0 before:opacity-0 data-[selected=true]:before:opacity-100 group-data-[disabled=true]/tr:text-foreground-300 group-data-[disabled=true]/tr:cursor-not-allowed before:bg-default/60 data-[selected=true]:text-default-foreground first:before:rounded-s-lg last:before:rounded-e-lg text-start`} + key={cell.id} + > + {flexRender( + cell.column.columnDef.cell, + cell.getContext() + )} +
} {state.pilots.length > 0 && screenSize === ScreenSize.SM && diff --git a/client/src/components/siteNav/SiteNav.tsx b/client/src/components/siteNav/SiteNav.tsx index 1bf989d..56d55f8 100644 --- a/client/src/components/siteNav/SiteNav.tsx +++ b/client/src/components/siteNav/SiteNav.tsx @@ -3,17 +3,18 @@ import { useAppContext } from '../../hooks/appContext/UseAppContext'; import { AxiosResponse } from 'axios'; import { User } from '@microsoft/microsoft-graph-types'; import { useOidc } from '../../auth/oidcConfig'; -import { Avatar, Button, Link, Navbar, NavbarBrand, NavbarContent, NavbarItem, DropdownTrigger, DropdownMenu, DropdownItem, Dropdown } from '@heroui/react'; import httpClient from '../../httpClient/httpClient' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faPlane, faSignIn, faSignOut } from '@fortawesome/free-solid-svg-icons' -import { useLocation } from 'react-router-dom'; +import { faBars, faPlane, faSignIn, faSignOut } from '@fortawesome/free-solid-svg-icons' +import { NavLink, useLocation } from 'react-router-dom'; +import { useBreakpoints } from '../../hooks/useBreakpoints/UseBreakpoints'; +import { ScreenSize } from '../../enums/screenSize'; const SiteNav = () => { const [userPhoto, setUserPhoto] = useState(); const appContext = useAppContext(); + const { screenSize } = useBreakpoints(); const { isUserLoggedIn, logout, login } = useOidc() - const { pathname } = useLocation() const pages = [ { name: 'Flights', @@ -53,13 +54,39 @@ const SiteNav = () => { } }; + const Brand = () => { + return ( + <> + + + + ) + } + + const Links = () => { + return ( + <> + {pages.map((page) => { + return ( +
  • {page.name}
  • + ) + })} + + ) + } + useEffect(() => { const setUserProfile = async () => { try { const userProfile = await getUserProfile(); - const userPhoto = await getUserPhoto(); + // const userPhoto = await getUserPhoto(); - setUserPhoto(userPhoto); + // setUserPhoto(userPhoto); appContext.dispatch({ type: 'SET_USER_PROFILE', @@ -78,54 +105,67 @@ const SiteNav = () => { } }, [isUserLoggedIn]); + useEffect(() => { + console.log(screenSize) + }, [screenSize]) + return ( - - - - - - - - - {pages.length > 0 && pages.map((page, index) => { - return ( - - - {page.name} - - - ) - })} - - +
    +
    + {screenSize === ScreenSize.SM || screenSize === ScreenSize.MD ? ( +
    +
    + +
    +
      + +
    +
    + ) : ( + + )} +
    +
    +
      + {screenSize === ScreenSize.SM || screenSize === ScreenSize.MD ? ( + + ) : ( + + )} +
    +
    +
    {!isUserLoggedIn && - + } {isUserLoggedIn && - - - - - - logout({redirectTo: 'specific url', url: '/'})} startContent={}> - Sign Out - - - +
    +
    +
    + {userPhoto && +
    + +
    + } + {!userPhoto && +
    + NS +
    + } +
    +
    + +
    } - - +
    +
    ); }; diff --git a/client/src/components/trackMap/TrackMap.css b/client/src/components/trackMap/TrackMap.css deleted file mode 100644 index 287c2f3..0000000 --- a/client/src/components/trackMap/TrackMap.css +++ /dev/null @@ -1,53 +0,0 @@ -#app { - height: 100%; -} -html, -body { - position: relative; - height: 100%; -} - -body { - background: #eee; - font-family: Helvetica Neue, Helvetica, Arial, sans-serif; - font-size: 14px; - color: #000; - margin: 0; - padding: 0; -} - -.swiper { - width: 100%; - height: 100%; -} - -.swiper-wrapper { - margin-bottom: 20px; -} - -.swiper-slide { - text-align: center; - font-size: 18px; - background: #fff; - display: flex; - justify-content: center; - align-items: center; -} - -.swiper-slide img { - display: block; - width: 100%; - height: 100%; - object-fit: cover; -} - -.swiper-pagination-bullet { - background-color: #000000; - height: 13px; - width: 13px; - border: 2px solid #FFFFFF; -} - -.swiper-pagination-bullet-active { - box-shadow: 0 0 0 1px #000000; -} diff --git a/client/src/components/trackMap/TrackMap.tsx b/client/src/components/trackMap/TrackMap.tsx index 6d548ed..d8157fd 100644 --- a/client/src/components/trackMap/TrackMap.tsx +++ b/client/src/components/trackMap/TrackMap.tsx @@ -4,10 +4,6 @@ import { AxiosInstance, AxiosResponse } from 'axios'; import { useAuth } from 'react-oidc-context' import { MapContainer, TileLayer } from 'react-leaflet'; import ReactLeafletKml from 'react-leaflet-kml'; -import 'swiper/css'; -import 'swiper/css/pagination'; -import 'swiper/css'; -import './TrackMap.css'; import 'leaflet/dist/leaflet.css'; import httpClient from '../../httpClient/httpClient' @@ -41,7 +37,7 @@ const TrackMap = ({ height, logId, tracks }: TrackMapProps) => { center={[45.14489, -93.21019]} scrollWheelZoom={false} style={{ height: height, width: '100%' }} - zoom={8} + zoom={7} > { } catch (error) { const axiosError = error as AxiosError; - logbookContext.dispatch({ type: 'SET_FORM_ALERT', payload: { severity: 'danger', message: axiosError.message }}) + logbookContext.dispatch({ type: 'SET_FORM_ALERT', payload: { severity: 'error', message: axiosError.message }}) } } @@ -108,11 +107,6 @@ const TracksForm = () => { return (
    - {state.tracks.length > 0 && -
    - -
    - } <> {state.tracks.length > 0 && state.tracks.map((track, index) => { const filename: string = track.url.substring(track.url.lastIndexOf('/') + 1); @@ -120,26 +114,25 @@ const TracksForm = () => { return ( <>
    - +
    - +
    ) })} -
    - -
    + {logbookContext.state.formMode === FormMode.ADD && +
    + +
    + } {state.isConfirmDialogOpen && ( { break; } - case width >= 640: { + case width >= 640 && width < 1024: { size = ScreenSize.MD; break; } - case width >= 1024: { + case width >= 1024 && width < 1280: { size = ScreenSize.LG break; } - case width >= 1280: { + case width >= 1280 && width < 1536: { size = ScreenSize.XL; break; diff --git a/client/src/httpClient/httpClient.ts b/client/src/httpClient/httpClient.ts index 98dfc17..12ab85c 100644 --- a/client/src/httpClient/httpClient.ts +++ b/client/src/httpClient/httpClient.ts @@ -15,7 +15,7 @@ httpClient.interceptors.request.use(async (config) => { if (oidc.isUserLoggedIn) { const { accessToken } = await oidc.getTokens(); - + console.log(accessToken) config.headers.Authorization = `Bearer ${accessToken}`; } diff --git a/client/src/index.html b/client/src/index.html index 3d12a78..0f1831a 100644 --- a/client/src/index.html +++ b/client/src/index.html @@ -6,7 +6,7 @@ Flying - +
    diff --git a/client/src/interfaces/Alert.interface.ts b/client/src/interfaces/Alert.interface.ts index 3b7b4cf..5cd28c4 100644 --- a/client/src/interfaces/Alert.interface.ts +++ b/client/src/interfaces/Alert.interface.ts @@ -1,4 +1,4 @@ export interface Alert { - severity: 'danger' | 'default' | 'success' | 'warning'; + severity: 'info' | 'error' | 'success' | 'warning'; message: string; } \ No newline at end of file diff --git a/client/src/styles.css b/client/src/styles.css index a81fa50..2e37768 100644 --- a/client/src/styles.css +++ b/client/src/styles.css @@ -1,15 +1,42 @@ @import "tailwindcss"; -@plugin './hero.ts'; -/* Note: You may need to change the path to fit your project structure */ -@source '../../node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}'; -@custom-variant dark (&:is(.dark *)); +@plugin "daisyui"; +@plugin "daisyui/theme" { + name: "lofi"; + default: true; + prefersdark: false; + color-scheme: "light"; + --color-base-100: oklch(100% 0 0); + --color-base-200: oklch(97% 0 0); + --color-base-300: oklch(94% 0 0); + --color-base-content: oklch(0% 0 0); + --color-primary: oklch(15.906% 0 0); + --color-primary-content: oklch(100% 0 0); + --color-secondary: oklch(21.455% 0.001 17.278); + --color-secondary-content: oklch(100% 0 0); + --color-accent: oklch(26.861% 0 0); + --color-accent-content: oklch(100% 0 0); + --color-neutral: oklch(0% 0 0); + --color-neutral-content: oklch(100% 0 0); + --color-info: oklch(79.54% 0.103 205.9); + --color-info-content: oklch(15.908% 0.02 205.9); + --color-success: oklch(90.13% 0.153 164.14); + --color-success-content: oklch(18.026% 0.03 164.14); + --color-warning: oklch(88.37% 0.135 79.94); + --color-warning-content: oklch(17.674% 0.027 79.94); + --color-error: oklch(78.66% 0.15 28.47); + --color-error-content: oklch(15.732% 0.03 28.47); + --radius-selector: 0.5rem; + --radius-field: 0.5rem; + --radius-box: 0.5rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; +} @plugin "@tailwindcss/typography"; -@theme inline { - --color-primary: #000000; -} - - - - - +body { + background-color: #f5f5f5; + min-height: 100vh; +} \ No newline at end of file diff --git a/client/src/tanstack.d.ts b/client/src/tanstack.d.ts index 69174fb..20aa39d 100644 --- a/client/src/tanstack.d.ts +++ b/client/src/tanstack.d.ts @@ -3,8 +3,9 @@ import '@tanstack/react-table'; /* eslint-disable */ declare module '@tanstack/react-table' { interface ColumnMeta { - align?: 'left' | 'center' | 'right'; - headerAlign?: 'left' | 'center' | 'right'; + align?: 'text-left' | 'text-center' | 'text-right'; + className?: string; + headerAlign?: 'text-left' | 'text-center' | 'text-right'; } } /* eslint-enable */ diff --git a/client/src/vite-env.d.ts b/client/src/vite-env.d.ts index 4469250..7d375b9 100644 --- a/client/src/vite-env.d.ts +++ b/client/src/vite-env.d.ts @@ -5,6 +5,7 @@ interface ImportMetaEnv { readonly VITE_CLIENT_ID: string; readonly VITE_ISSUER_URI: string; readonly VITE_TENANT_ID: string; + readonly VITE_USERINFO_ENDPOINT: string; } interface ImportMeta { diff --git a/database/flying.db b/database/flying.db index dd824fd..7efd518 100644 Binary files a/database/flying.db and b/database/flying.db differ diff --git a/infrastructure/container_app.tf b/infrastructure/container_app.tf index 06d02bd..9308462 100644 --- a/infrastructure/container_app.tf +++ b/infrastructure/container_app.tf @@ -74,6 +74,16 @@ resource "azurerm_container_app" "container_app" { secret_name = "azure-storage-connection-string" } + env { + name = "AUTHORITY" + value = var.AUTHORITY + } + + env { + name = "AUDIENCE" + value = var.CLIENT_ID + } + env { name = "CLIENT_ID" value = var.CLIENT_ID @@ -84,6 +94,16 @@ resource "azurerm_container_app" "container_app" { secret_name = "client-secret" } + env { + name = "ISSUER_URL" + value = var.ISSUER_URL + } + + env { + name = "JWKS_URI" + value = var.JWKS_URI + } + env { name = "TENANT_ID" value = var.EXTERNAL_TENANT_ID diff --git a/infrastructure/variables.tf b/infrastructure/variables.tf index 29c4880..00ea6e0 100644 --- a/infrastructure/variables.tf +++ b/infrastructure/variables.tf @@ -1,3 +1,6 @@ +variable "AUTHORITY" { + type = string +} variable "CLIENT_ID" { type = string @@ -17,6 +20,14 @@ variable "DOCKER_IO_USERNAME" { type = string } +variable "ISSUER_URL" { + type = string +} + +variable "JWKS_URI" { + type = string +} + variable "RESOURCE_GROUP_NAME" { type = string } diff --git a/package-lock.json b/package-lock.json index 5c59a2d..0d16d87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", + "daisyui": "^5.5.5", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-react-hooks": "^4.6.0", @@ -40,7 +41,7 @@ "@nestjs/serve-static": "^5.0.3", "@nestjs/typeorm": "^11.0.0", "@noahspan/azure-database": "^3.1.2", - "@noahspan/noahspan-modules": "^1.2.9", + "@noahspan/noahspan-modules": "^1.2.11", "@schematics/angular": "^17.3.7", "@types/multer": "^1.4.12", "better-sqlite3": "^12.2.0", @@ -85,14 +86,12 @@ "@fortawesome/fontawesome-svg-core": "^7.1.0", "@fortawesome/free-solid-svg-icons": "^7.1.0", "@fortawesome/react-fontawesome": "^3.1.0", - "@heroui/react": "^2.8.5", "@noahspan/noahspan-components": "^2.0.0-alpha-14", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.13", "@tanstack/react-table": "^8.21.3", "axios": "^1.7.2", "dotenv": "^16.4.7", - "framer-motion": "^12.23.24", "leaflet": "^1.9.4", "oidc-spa": "^7.2.4", "react": "^19.1.1", @@ -225,15 +224,6 @@ "react": "^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "client/node_modules/daisyui": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.1.10.tgz", - "integrity": "sha512-p1J/HME2WmaSiy6u2alIbeP3gd5PNVft3+6Bdll0BRSm/UdI4084+pD01LxFug/5wGexNewWqbcEL6nB2n2o+Q==", - "peer": true, - "funding": { - "url": "https://github.com/saadeghi/daisyui?sponsor=1" - } - }, "client/node_modules/react": { "version": "19.1.1", "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", @@ -2434,52 +2424,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@formatjs/ecma402-abstract": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz", - "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==", - "dependencies": { - "@formatjs/fast-memoize": "2.2.7", - "@formatjs/intl-localematcher": "0.6.2", - "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==", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz", - "integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==", - "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", - "@formatjs/icu-skeleton-parser": "1.8.16", - "tslib": "^2.8.0" - } - }, - "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.16", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz", - "integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==", - "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", - "tslib": "^2.8.0" - } - }, - "node_modules/@formatjs/intl-localematcher": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz", - "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==", - "dependencies": { - "tslib": "^2.8.0" - } - }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "6.7.2", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz", @@ -2541,1436 +2485,6 @@ "node": ">=6" } }, - "node_modules/@heroui/accordion": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/@heroui/accordion/-/accordion-2.2.24.tgz", - "integrity": "sha512-iVJVKKsGN4t3hn4Exwic6n5SOQOmmmsodSsCt0VUcs5VTHu9876sAC44xlEMpc9CP8pC1wQS3DzWl3mN6Z120g==", - "dependencies": { - "@heroui/aria-utils": "2.2.24", - "@heroui/divider": "2.2.20", - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.23", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-accordion": "2.2.18", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-stately/tree": "3.9.3", - "@react-types/accordion": "3.0.0-alpha.26", - "@react-types/shared": "3.32.1" - }, - "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/alert": { - "version": "2.2.27", - "resolved": "https://registry.npmjs.org/@heroui/alert/-/alert-2.2.27.tgz", - "integrity": "sha512-Y6oX9SV//tdhxhpgkSZvnjwdx7d8S7RAhgVlxCs2Hla//nCFC3yiMHIv8UotTryAGdOwZIsffmcna9vqbNL5vw==", - "dependencies": { - "@heroui/button": "2.2.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@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/aria-utils": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/@heroui/aria-utils/-/aria-utils-2.2.24.tgz", - "integrity": "sha512-Y7FfQl2jvJr8JjpH+iuJElDwbn3eSWohuxHg6e5+xk5GcPYrEecgr0F/9qD6VU8IvVrRzJ00JzmT87lgA5iE3Q==", - "dependencies": { - "@heroui/system": "2.4.23", - "@react-aria/utils": "3.31.0", - "@react-stately/collections": "3.12.8", - "@react-types/overlays": "3.9.2", - "@react-types/shared": "3.32.1" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/autocomplete": { - "version": "2.3.29", - "resolved": "https://registry.npmjs.org/@heroui/autocomplete/-/autocomplete-2.3.29.tgz", - "integrity": "sha512-BQkiWrrhPbNMFF1Hd60QDyG4iwD+sdsjWh0h7sw2XhcT6Bjw/6Hqpf4eHsTvPElW/554vPZVtChjugRY1N2zsw==", - "dependencies": { - "@heroui/aria-utils": "2.2.24", - "@heroui/button": "2.2.27", - "@heroui/form": "2.1.27", - "@heroui/input": "2.4.28", - "@heroui/listbox": "2.3.26", - "@heroui/popover": "2.3.27", - "@heroui/react-utils": "2.1.14", - "@heroui/scroll-shadow": "2.3.18", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/combobox": "3.14.0", - "@react-aria/i18n": "3.12.13", - "@react-stately/combobox": "3.12.0", - "@react-types/combobox": "3.13.9", - "@react-types/shared": "3.32.1" - }, - "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/avatar": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/@heroui/avatar/-/avatar-2.2.22.tgz", - "integrity": "sha512-znmKdsrVj91Fg8+wm/HA/b8zi3iAg5g3MezliBfS2PmwgZcpBR6VtwgeeP6uN49+TR+faGIrck0Zxceuw4U0FQ==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-image": "2.1.13", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6" - }, - "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/badge": { - "version": "2.2.17", - "resolved": "https://registry.npmjs.org/@heroui/badge/-/badge-2.2.17.tgz", - "integrity": "sha512-UNILRsAIJn+B6aWml+Rv2QCyYB7sadNqRPDPzNeVKJd8j3MNgZyyEHDwvqM2FWrgGccQIuWFaUgGdnPxRJpwwg==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12" - }, - "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/breadcrumbs": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/@heroui/breadcrumbs/-/breadcrumbs-2.2.22.tgz", - "integrity": "sha512-2fWfpbwhRPeC99Kuzu+DnzOYL4TOkDm9sznvSj0kIAbw/Rvl+D2/6fmBOaTRIUXfswWpHVRUCcNYczIAp0PkoA==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@react-aria/breadcrumbs": "3.5.29", - "@react-aria/focus": "3.21.2", - "@react-types/breadcrumbs": "3.7.17" - }, - "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/button": { - "version": "2.2.27", - "resolved": "https://registry.npmjs.org/@heroui/button/-/button-2.2.27.tgz", - "integrity": "sha512-Fxb8rtjPQm9T4GAtB1oW2QMUiQCtn7EtvO5AN41ANxAgmsNMM5wnLTkxQ05vNueCrp47kTDtSuyMhKU2llATHQ==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/ripple": "2.2.20", - "@heroui/shared-utils": "2.1.12", - "@heroui/spinner": "2.2.24", - "@heroui/use-aria-button": "2.2.20", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-types/shared": "3.32.1" - }, - "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/calendar": { - "version": "2.2.27", - "resolved": "https://registry.npmjs.org/@heroui/calendar/-/calendar-2.2.27.tgz", - "integrity": "sha512-VtyXQSoT9u9tC4HjBkJIaSSmhau1LwPUwvof0LjYDpBfTsJKqn+308wI3nAp75BTbAkK+vFM8LI0VfbALCwR4Q==", - "dependencies": { - "@heroui/button": "2.2.27", - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.23", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-button": "2.2.20", - "@internationalized/date": "3.10.0", - "@react-aria/calendar": "3.9.2", - "@react-aria/focus": "3.21.2", - "@react-aria/i18n": "3.12.13", - "@react-aria/interactions": "3.25.6", - "@react-aria/visually-hidden": "3.8.28", - "@react-stately/calendar": "3.9.0", - "@react-stately/utils": "3.10.8", - "@react-types/button": "3.14.1", - "@react-types/calendar": "3.8.0", - "@react-types/shared": "3.32.1", - "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/card": { - "version": "2.2.25", - "resolved": "https://registry.npmjs.org/@heroui/card/-/card-2.2.25.tgz", - "integrity": "sha512-dtd/G24zePIHPutRIxWC69IO3IGJs8X+zh9rBYM9cY5Q972D8Eet5WdWTfDBhw//fFIoagDAs5YcI9emGczGaQ==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/ripple": "2.2.20", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-button": "2.2.20", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-types/shared": "3.32.1" - }, - "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/checkbox": { - "version": "2.3.27", - "resolved": "https://registry.npmjs.org/@heroui/checkbox/-/checkbox-2.3.27.tgz", - "integrity": "sha512-YC0deiB7EOzcpJtk9SdySugD1Z2TNtfyYee2voDBHrng7ZBRB+cmAvizXINHnaQGFi0yuVPrZ5ixR/wsvTNW+Q==", - "dependencies": { - "@heroui/form": "2.1.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-callback-ref": "2.1.8", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/checkbox": "3.16.2", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-stately/checkbox": "3.7.2", - "@react-stately/toggle": "3.9.2", - "@react-types/checkbox": "3.10.2", - "@react-types/shared": "3.32.1" - }, - "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/chip": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/@heroui/chip/-/chip-2.2.22.tgz", - "integrity": "sha512-6O4Sv1chP+xxftp7E5gHUJIzo04ML9BW9N9jjxWCqT0Qtl+a/ZxnDalCyup6oraMiVLLHp+zEVX93C+3LONgkg==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6" - }, - "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/code": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/@heroui/code/-/code-2.2.21.tgz", - "integrity": "sha512-ExHcfTGr9tCbAaBOfMzTla8iHHfwIV5/xRk4WApeVmL4MiIlLMykc9bSi1c88ltaJInQGFAmE6MOFHXuGHxBXw==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/system-rsc": "2.3.20" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.17", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/date-input": { - "version": "2.3.27", - "resolved": "https://registry.npmjs.org/@heroui/date-input/-/date-input-2.3.27.tgz", - "integrity": "sha512-IxvZYezbR9jRxTWdsuHH47nsnB6RV1HPY7VwiJd9ZCy6P6oUV0Rx3cdwIRtUnyXbvz1G7+I22NL4C2Ku194l8A==", - "dependencies": { - "@heroui/form": "2.1.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@internationalized/date": "3.10.0", - "@react-aria/datepicker": "3.15.2", - "@react-aria/i18n": "3.12.13", - "@react-stately/datepicker": "3.15.2", - "@react-types/datepicker": "3.13.2", - "@react-types/shared": "3.32.1" - }, - "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/date-picker": { - "version": "2.3.28", - "resolved": "https://registry.npmjs.org/@heroui/date-picker/-/date-picker-2.3.28.tgz", - "integrity": "sha512-duKvXijabpafxU04sItrozf982tXkUDymcT3SoEvW4LDg6bECgPI8bYNN49hlzkI8+zuwJdKzJ4hDmANGVaL8Q==", - "dependencies": { - "@heroui/aria-utils": "2.2.24", - "@heroui/button": "2.2.27", - "@heroui/calendar": "2.2.27", - "@heroui/date-input": "2.3.27", - "@heroui/form": "2.1.27", - "@heroui/popover": "2.3.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@internationalized/date": "3.10.0", - "@react-aria/datepicker": "3.15.2", - "@react-aria/i18n": "3.12.13", - "@react-stately/datepicker": "3.15.2", - "@react-stately/utils": "3.10.8", - "@react-types/datepicker": "3.13.2", - "@react-types/shared": "3.32.1" - }, - "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/divider": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/@heroui/divider/-/divider-2.2.20.tgz", - "integrity": "sha512-t+NNJ2e5okZraLKQoj+rS2l49IMy5AeXTixjsR+QRZ/WPrETNpMj4lw5cBSxG0i7WhRhlBa+KgqweUUezvCdAg==", - "dependencies": { - "@heroui/react-rsc-utils": "2.1.9", - "@heroui/system-rsc": "2.3.20", - "@react-types/shared": "3.32.1" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.17", - "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==", - "peerDependencies": { - "framer-motion": ">=11.5.6 || >=12.0.0-alpha.1" - } - }, - "node_modules/@heroui/drawer": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/@heroui/drawer/-/drawer-2.2.24.tgz", - "integrity": "sha512-gb51Lj9A8jlL1UvUrQ+MLS9tz+Qw+cdXwIJd39RXDkJwDmxqhzkz+WoOPZZwcOAHtATmwlTuxxlv6Cro59iswg==", - "dependencies": { - "@heroui/framer-utils": "2.1.23", - "@heroui/modal": "2.2.24", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12" - }, - "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/dropdown": { - "version": "2.3.27", - "resolved": "https://registry.npmjs.org/@heroui/dropdown/-/dropdown-2.3.27.tgz", - "integrity": "sha512-6aedMmxC+St5Ixz9o3s0ERkLOR6ZQE2uRccmRchPCEt7ZJU6TAeJo7fSpxIvdEUjFDe+pNhR2ojIocZEXtBZZg==", - "dependencies": { - "@heroui/aria-utils": "2.2.24", - "@heroui/menu": "2.2.26", - "@heroui/popover": "2.3.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@react-aria/focus": "3.21.2", - "@react-aria/menu": "3.19.3", - "@react-stately/menu": "3.9.8", - "@react-types/menu": "3.10.5" - }, - "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/form": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/@heroui/form/-/form-2.1.27.tgz", - "integrity": "sha512-vtaBqWhxppkJeWgbAZA/A1bRj6XIudBqJWSkoqYlejtLuvaxNwxQ2Z9u7ewxN96R6QqPrQwChlknIn0NgCWlXQ==", - "dependencies": { - "@heroui/shared-utils": "2.1.12", - "@heroui/system": "2.4.23", - "@heroui/theme": "2.4.23", - "@react-stately/form": "3.2.2", - "@react-types/form": "3.7.16", - "@react-types/shared": "3.32.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.17", - "react": ">=18", - "react-dom": ">=18" - } - }, - "node_modules/@heroui/framer-utils": { - "version": "2.1.23", - "resolved": "https://registry.npmjs.org/@heroui/framer-utils/-/framer-utils-2.1.23.tgz", - "integrity": "sha512-crLLMjRmxs8/fysFv5gwghSGcDmYYkhNfAWh1rFzDy+FRPZN4f/bPH2rt85hdApmuHbWt0QCocqsrjHxLEzrAw==", - "dependencies": { - "@heroui/system": "2.4.23", - "@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/image": { - "version": "2.2.17", - "resolved": "https://registry.npmjs.org/@heroui/image/-/image-2.2.17.tgz", - "integrity": "sha512-B/MrWafTsiCBFnRc0hPTLDBh7APjb/lRuQf18umuh20/1n6KiQXJ7XGSjnrHaA6HQcrtMGh6mDFZDaXq9rHuoA==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-image": "2.1.13" - }, - "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/input": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@heroui/input/-/input-2.4.28.tgz", - "integrity": "sha512-uaBubg814YOlVvX13yCAMqsR9HC4jg+asQdukbOvOnFtHY/d53her1BDdXhR9tMcrRTdYWQ3FoHqWbpvd5X4OQ==", - "dependencies": { - "@heroui/form": "2.1.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/textfield": "3.18.2", - "@react-stately/utils": "3.10.8", - "@react-types/shared": "3.32.1", - "@react-types/textfield": "3.12.6", - "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/input-otp": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/@heroui/input-otp/-/input-otp-2.1.27.tgz", - "integrity": "sha512-VUzQ1u6/0okE0eqDx/2I/8zpGItSsn7Zml01IVwGM4wY2iJeQA+uRjfP+B1ff9jO/y8n582YU4uv/ZSOmmEQ7A==", - "dependencies": { - "@heroui/form": "2.1.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-form-reset": "2.0.1", - "@react-aria/focus": "3.21.2", - "@react-aria/form": "3.1.2", - "@react-stately/form": "3.2.2", - "@react-stately/utils": "3.10.8", - "@react-types/textfield": "3.12.6", - "input-otp": "1.4.1" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.17", - "react": ">=18", - "react-dom": ">=18" - } - }, - "node_modules/@heroui/kbd": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/@heroui/kbd/-/kbd-2.2.22.tgz", - "integrity": "sha512-PKhgwGB7i53kBuqB1YdFZsg7H9fJ8YESMRRPwRRyPSz5feMdwGidyXs+/ix7lrlYp4mlC3wtPp7L79SEyPCpBA==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/system-rsc": "2.3.20" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.17", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/link": { - "version": "2.2.23", - "resolved": "https://registry.npmjs.org/@heroui/link/-/link-2.2.23.tgz", - "integrity": "sha512-lObtPRLy8ModlTvJiKhczuAV/CIt31hde6xPGFYRpPsaQN1b7RgQMmai5/Iv/M8WrzFmFZRpgW75RKYIB6hHVQ==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-link": "2.2.21", - "@react-aria/focus": "3.21.2", - "@react-types/link": "3.6.5" - }, - "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/listbox": { - "version": "2.3.26", - "resolved": "https://registry.npmjs.org/@heroui/listbox/-/listbox-2.3.26.tgz", - "integrity": "sha512-/k3k+xyl2d+aFfT02h+/0njhsDX8vJDEkPK+dl9ETYI9Oz3L+xbHN9yIzuWjBXYkNGlQCjQ46N+0jWjhP5B4pA==", - "dependencies": { - "@heroui/aria-utils": "2.2.24", - "@heroui/divider": "2.2.20", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-is-mobile": "2.2.12", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/listbox": "3.15.0", - "@react-stately/list": "3.13.1", - "@react-types/shared": "3.32.1", - "@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/menu": { - "version": "2.2.26", - "resolved": "https://registry.npmjs.org/@heroui/menu/-/menu-2.2.26.tgz", - "integrity": "sha512-raR5pXgEqizKD9GsWS1yKqTm4RPWMrSQlqXLE2zNMQk0TkDqmPVw1z5griMqu2Zt9Vf2Ectf55vh4c0DNOUGlg==", - "dependencies": { - "@heroui/aria-utils": "2.2.24", - "@heroui/divider": "2.2.20", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-is-mobile": "2.2.12", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/menu": "3.19.3", - "@react-stately/tree": "3.9.3", - "@react-types/menu": "3.10.5", - "@react-types/shared": "3.32.1" - }, - "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/modal": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/@heroui/modal/-/modal-2.2.24.tgz", - "integrity": "sha512-ISbgorNqgps9iUvQdgANxprdN+6H3Sx9TrGKpuW798qjc2f0T4rTbjrEfFPT8tFx6XYF4P5j7T7m3zoKcortHQ==", - "dependencies": { - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.23", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-button": "2.2.20", - "@heroui/use-aria-modal-overlay": "2.2.19", - "@heroui/use-disclosure": "2.2.17", - "@heroui/use-draggable": "2.1.18", - "@heroui/use-viewport-size": "2.0.1", - "@react-aria/dialog": "3.5.31", - "@react-aria/focus": "3.21.2", - "@react-aria/overlays": "3.30.0", - "@react-stately/overlays": "3.6.20" - }, - "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/navbar": { - "version": "2.2.25", - "resolved": "https://registry.npmjs.org/@heroui/navbar/-/navbar-2.2.25.tgz", - "integrity": "sha512-5fNIMDpX2htDTMb/Xgv81qw/FuNWb+0Wpfc6rkFtNYd968I7G6Kjm782QB8WQjZ8DsMugcLEYUN4lpbJHRSdwg==", - "dependencies": { - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.23", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-resize": "2.1.8", - "@heroui/use-scroll-position": "2.1.8", - "@react-aria/button": "3.14.2", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/overlays": "3.30.0", - "@react-stately/toggle": "3.9.2", - "@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/number-input": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@heroui/number-input/-/number-input-2.0.18.tgz", - "integrity": "sha512-28v0/0FABs+yy3CcJimcr5uNlhaJSyKt1ENMSXfzPxdN2WgIs14+6NLMT+KV7ibcJl7kmqG0uc8vuIDLVrM5bQ==", - "dependencies": { - "@heroui/button": "2.2.27", - "@heroui/form": "2.1.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/focus": "3.21.2", - "@react-aria/i18n": "3.12.13", - "@react-aria/interactions": "3.25.6", - "@react-aria/numberfield": "3.12.2", - "@react-stately/numberfield": "3.10.2", - "@react-types/button": "3.14.1", - "@react-types/numberfield": "3.8.15", - "@react-types/shared": "3.32.1" - }, - "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/pagination": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/@heroui/pagination/-/pagination-2.2.24.tgz", - "integrity": "sha512-5ObSJ1PzB9D1CjHV0MfDNzLR69vSYpx/rNQLBo/D4g5puaAR7kkGgw5ncf5eirhdKuy9y8VGAhjwhBxO4NUdpQ==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-intersection-observer": "2.2.14", - "@heroui/use-pagination": "2.2.18", - "@react-aria/focus": "3.21.2", - "@react-aria/i18n": "3.12.13", - "@react-aria/interactions": "3.25.6", - "@react-aria/utils": "3.31.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/popover": { - "version": "2.3.27", - "resolved": "https://registry.npmjs.org/@heroui/popover/-/popover-2.3.27.tgz", - "integrity": "sha512-PmSCKQcAvKIegK59Flr9cglbsEu7OAegQMtwNIjqWHsPT18NNphimmUSJrtuD78rcfKekrZ+Uo9qJEUf0zGZDw==", - "dependencies": { - "@heroui/aria-utils": "2.2.24", - "@heroui/button": "2.2.27", - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.23", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-button": "2.2.20", - "@heroui/use-aria-overlay": "2.0.4", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/dialog": "3.5.31", - "@react-aria/focus": "3.21.2", - "@react-aria/overlays": "3.30.0", - "@react-stately/overlays": "3.6.20", - "@react-types/overlays": "3.9.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/progress": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/@heroui/progress/-/progress-2.2.22.tgz", - "integrity": "sha512-ch+iWEDo8d+Owz81vu4+Kj6CLfxi0nUlivQBhXeOzgU3VZbRmxJyW8S6l7wk6GyKJZxsCbYbjV1wPSjZhKJXCg==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-is-mounted": "2.1.8", - "@react-aria/progress": "3.4.27", - "@react-types/progress": "3.5.16" - }, - "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/radio": { - "version": "2.3.27", - "resolved": "https://registry.npmjs.org/@heroui/radio/-/radio-2.3.27.tgz", - "integrity": "sha512-kfDxzPR0u4++lZX2Gf6wbEe/hGbFnoXI4XLbe4e+ZDjGdBSakNuJlcDvWHVoDFZH1xXyOO9w/dHfZuE6O2VGLA==", - "dependencies": { - "@heroui/form": "2.1.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/radio": "3.12.2", - "@react-aria/visually-hidden": "3.8.28", - "@react-stately/radio": "3.11.2", - "@react-types/radio": "3.9.2", - "@react-types/shared": "3.32.1" - }, - "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": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/@heroui/react/-/react-2.8.5.tgz", - "integrity": "sha512-cGiG0/DCPsYopa+zACFDmtx9LQDfY5KU58Tt82ELANhmKRyYAesAq9tSa01dG+MjOXUTUR6cxp5i5RmRn8rPYg==", - "dependencies": { - "@heroui/accordion": "2.2.24", - "@heroui/alert": "2.2.27", - "@heroui/autocomplete": "2.3.29", - "@heroui/avatar": "2.2.22", - "@heroui/badge": "2.2.17", - "@heroui/breadcrumbs": "2.2.22", - "@heroui/button": "2.2.27", - "@heroui/calendar": "2.2.27", - "@heroui/card": "2.2.25", - "@heroui/checkbox": "2.3.27", - "@heroui/chip": "2.2.22", - "@heroui/code": "2.2.21", - "@heroui/date-input": "2.3.27", - "@heroui/date-picker": "2.3.28", - "@heroui/divider": "2.2.20", - "@heroui/drawer": "2.2.24", - "@heroui/dropdown": "2.3.27", - "@heroui/form": "2.1.27", - "@heroui/framer-utils": "2.1.23", - "@heroui/image": "2.2.17", - "@heroui/input": "2.4.28", - "@heroui/input-otp": "2.1.27", - "@heroui/kbd": "2.2.22", - "@heroui/link": "2.2.23", - "@heroui/listbox": "2.3.26", - "@heroui/menu": "2.2.26", - "@heroui/modal": "2.2.24", - "@heroui/navbar": "2.2.25", - "@heroui/number-input": "2.0.18", - "@heroui/pagination": "2.2.24", - "@heroui/popover": "2.3.27", - "@heroui/progress": "2.2.22", - "@heroui/radio": "2.3.27", - "@heroui/ripple": "2.2.20", - "@heroui/scroll-shadow": "2.3.18", - "@heroui/select": "2.4.28", - "@heroui/skeleton": "2.2.17", - "@heroui/slider": "2.4.24", - "@heroui/snippet": "2.2.28", - "@heroui/spacer": "2.2.21", - "@heroui/spinner": "2.2.24", - "@heroui/switch": "2.2.24", - "@heroui/system": "2.4.23", - "@heroui/table": "2.2.27", - "@heroui/tabs": "2.2.24", - "@heroui/theme": "2.4.23", - "@heroui/toast": "2.0.17", - "@heroui/tooltip": "2.2.24", - "@heroui/user": "2.2.22", - "@react-aria/visually-hidden": "3.8.28" - }, - "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==", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/react-utils": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/@heroui/react-utils/-/react-utils-2.1.14.tgz", - "integrity": "sha512-hhKklYKy9sRH52C9A8P0jWQ79W4MkIvOnKBIuxEMHhigjfracy0o0lMnAUdEsJni4oZKVJYqNGdQl+UVgcmeDA==", - "dependencies": { - "@heroui/react-rsc-utils": "2.1.9", - "@heroui/shared-utils": "2.1.12" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/ripple": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/@heroui/ripple/-/ripple-2.2.20.tgz", - "integrity": "sha512-3+fBx5jO7l8SE84ZG0vB5BOxKKr23Ay180AeIWcf8m8lhXXd4iShVz2S+keW9PewqVHv52YBaxLoSVQ93Ddcxw==", - "dependencies": { - "@heroui/dom-animation": "2.1.10", - "@heroui/shared-utils": "2.1.12" - }, - "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/scroll-shadow": { - "version": "2.3.18", - "resolved": "https://registry.npmjs.org/@heroui/scroll-shadow/-/scroll-shadow-2.3.18.tgz", - "integrity": "sha512-P/nLQbFPOlbTLRjO2tKoZCljJtU7iq81wsp7C8wZ1rZI1RmkTx3UgLLeoFWgmAp3ZlUIYgaewTnejt6eRx+28w==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-data-scroll-overflow": "2.2.13" - }, - "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/select": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@heroui/select/-/select-2.4.28.tgz", - "integrity": "sha512-Dg3jv248Tu+g2WJMWseDjWA0FAG356elZIcE0OufVAIzQoWjLhgbkTqY9ths0HkcHy0nDwQWvyrrwkbif1kNqA==", - "dependencies": { - "@heroui/aria-utils": "2.2.24", - "@heroui/form": "2.1.27", - "@heroui/listbox": "2.3.26", - "@heroui/popover": "2.3.27", - "@heroui/react-utils": "2.1.14", - "@heroui/scroll-shadow": "2.3.18", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/spinner": "2.2.24", - "@heroui/use-aria-button": "2.2.20", - "@heroui/use-aria-multiselect": "2.4.19", - "@heroui/use-form-reset": "2.0.1", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/focus": "3.21.2", - "@react-aria/form": "3.1.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/overlays": "3.30.0", - "@react-aria/visually-hidden": "3.8.28", - "@react-types/shared": "3.32.1" - }, - "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/shared-icons": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@heroui/shared-icons/-/shared-icons-2.1.10.tgz", - "integrity": "sha512-ePo60GjEpM0SEyZBGOeySsLueNDCqLsVL79Fq+5BphzlrBAcaKY7kUp74964ImtkXvknTxAWzuuTr3kCRqj6jg==", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/shared-utils": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@heroui/shared-utils/-/shared-utils-2.1.12.tgz", - "integrity": "sha512-0iCnxVAkIPtrHQo26Qa5g0UTqMTpugTbClNOrEPsrQuyRAq7Syux998cPwGlneTfB5E5xcU3LiEdA9GUyeK2cQ==", - "hasInstallScript": true - }, - "node_modules/@heroui/skeleton": { - "version": "2.2.17", - "resolved": "https://registry.npmjs.org/@heroui/skeleton/-/skeleton-2.2.17.tgz", - "integrity": "sha512-WDzwODs+jW+GgMr3oOdLtXXfv8ScXuuWgxN2iPWWyDBcQYXX2XCKGVjCpM5lSKf1UG4Yp3iXuqKzH1m+E+m7kg==", - "dependencies": { - "@heroui/shared-utils": "2.1.12" - }, - "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/slider": { - "version": "2.4.24", - "resolved": "https://registry.npmjs.org/@heroui/slider/-/slider-2.4.24.tgz", - "integrity": "sha512-GKdqFTCe9O8tT3HEZ/W4TEWkz7ADtUBzuOBXw779Oqqf02HNg9vSnISlNvI6G0ymYjY42EanwA+dChHbPBIVJw==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/tooltip": "2.2.24", - "@react-aria/focus": "3.21.2", - "@react-aria/i18n": "3.12.13", - "@react-aria/interactions": "3.25.6", - "@react-aria/slider": "3.8.2", - "@react-aria/visually-hidden": "3.8.28", - "@react-stately/slider": "3.7.2" - }, - "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/snippet": { - "version": "2.2.28", - "resolved": "https://registry.npmjs.org/@heroui/snippet/-/snippet-2.2.28.tgz", - "integrity": "sha512-UfC/ZcYpmOutAcazxkizJWlhvqzr077szDyQ85thyUC5yhuRRLrsOHDIhyLWQrEKIcWw5+CaEGS2VLwAFlgfzw==", - "dependencies": { - "@heroui/button": "2.2.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/tooltip": "2.2.24", - "@heroui/use-clipboard": "2.1.9", - "@react-aria/focus": "3.21.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/spacer": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/@heroui/spacer/-/spacer-2.2.21.tgz", - "integrity": "sha512-WKD+BlgHfqJ8lrkkg/6cvzSWNsbRjzr24HpZnv6cDeWX95wVLTOco9HVR8ohwStMqwu5zYeUd1bw6yCDVTo53w==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/system-rsc": "2.3.20" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.17", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/spinner": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/@heroui/spinner/-/spinner-2.2.24.tgz", - "integrity": "sha512-HfKkFffrIN9UdJY2UaenlB8xEwIzolCCFCwU0j3wVnLMX+Dw+ixwaELdAxX14Z6gPQYec6AROKetkWWit14rlw==", - "dependencies": { - "@heroui/shared-utils": "2.1.12", - "@heroui/system": "2.4.23", - "@heroui/system-rsc": "2.3.20" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.17", - "react": ">=18 || >=19.0.0-rc.0", - "react-dom": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/switch": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/@heroui/switch/-/switch-2.2.24.tgz", - "integrity": "sha512-RbV+MECncBKsthX3D8r+CGoQRu8Q3AAYUEdm/7ody6+bMZFmBilm695yLiqziMI33Ct/WQ0WkpvrTClIcmxU/A==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/switch": "3.7.8", - "@react-aria/visually-hidden": "3.8.28", - "@react-stately/toggle": "3.9.2" - }, - "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/system": { - "version": "2.4.23", - "resolved": "https://registry.npmjs.org/@heroui/system/-/system-2.4.23.tgz", - "integrity": "sha512-kgYvfkIOQKM6CCBIlNSE2tXMtNrS1mvEUbvwnaU3pEYbMlceBtwA5v7SlpaJy/5dqKcTbfmVMUCmXnY/Kw4vaQ==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/system-rsc": "2.3.20", - "@react-aria/i18n": "3.12.13", - "@react-aria/overlays": "3.30.0", - "@react-aria/utils": "3.31.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-rsc": { - "version": "2.3.20", - "resolved": "https://registry.npmjs.org/@heroui/system-rsc/-/system-rsc-2.3.20.tgz", - "integrity": "sha512-uZwQErEud/lAX7KRXEdsDcGLyygBffHcgnbCDrLvmTf3cyBE84YziG7AjM7Ts8ZcrF+wBXX4+a1IqnKGlsGEdQ==", - "dependencies": { - "@react-types/shared": "3.32.1", - "clsx": "^1.2.1" - }, - "peerDependencies": { - "@heroui/theme": ">=2.4.17", - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/table": { - "version": "2.2.27", - "resolved": "https://registry.npmjs.org/@heroui/table/-/table-2.2.27.tgz", - "integrity": "sha512-XFmbEgBzf89WH1VzmnwENxVzK4JrHV5jdlzyM3snNhk8uDSjfecnUY33qR62cpdZsKiCFFcYf7kQPkCnJGnD0Q==", - "dependencies": { - "@heroui/checkbox": "2.3.27", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/spacer": "2.2.21", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/table": "3.17.8", - "@react-aria/visually-hidden": "3.8.28", - "@react-stately/table": "3.15.1", - "@react-stately/virtualizer": "4.4.4", - "@react-types/grid": "3.3.6", - "@react-types/table": "3.13.4", - "@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/tabs": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/@heroui/tabs/-/tabs-2.2.24.tgz", - "integrity": "sha512-2SfxzAXe1t2Zz0v16kqkb7DR2wW86XoDwRUpLex6zhEN4/uT5ILeynxIVSUyAvVN3z95cnaQt0XPQBfUjAIQhQ==", - "dependencies": { - "@heroui/aria-utils": "2.2.24", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-is-mounted": "2.1.8", - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/tabs": "3.10.8", - "@react-stately/tabs": "3.8.6", - "@react-types/shared": "3.32.1", - "scroll-into-view-if-needed": "3.0.10" - }, - "peerDependencies": { - "@heroui/system": ">=2.4.18", - "@heroui/theme": ">=2.4.22", - "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/theme": { - "version": "2.4.23", - "resolved": "https://registry.npmjs.org/@heroui/theme/-/theme-2.4.23.tgz", - "integrity": "sha512-5hoaRWG+/d/t06p7Pfhz70DUP0Uggjids7/z2Ytgup4A8KAOvDIXxvHUDlk6rRHKiN1wDMNA5H+EWsSXB/m03Q==", - "dependencies": { - "@heroui/shared-utils": "2.1.12", - "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": "3.1.1" - }, - "peerDependencies": { - "tailwindcss": ">=4.0.0" - } - }, - "node_modules/@heroui/toast": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@heroui/toast/-/toast-2.0.17.tgz", - "integrity": "sha512-w3TaA1DYLcwdDjpwf9xw5YSr+odo9GGHsObsrMmLEQDS0JQhmKyK5sQqXUzb9d27EC6KVwGjeVg0hUHYQBK2JA==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@heroui/shared-icons": "2.1.10", - "@heroui/shared-utils": "2.1.12", - "@heroui/spinner": "2.2.24", - "@heroui/use-is-mobile": "2.2.12", - "@react-aria/interactions": "3.25.6", - "@react-aria/toast": "3.0.8", - "@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/tooltip": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/@heroui/tooltip/-/tooltip-2.2.24.tgz", - "integrity": "sha512-H+0STFea2/Z4obDdk+ZPoDzJxJQHIWGSjnW/jieThJbJ5zow/qBfcg5DqzIdiC+FCJ4dDD5jEDZ4W4H/fQUKQA==", - "dependencies": { - "@heroui/aria-utils": "2.2.24", - "@heroui/dom-animation": "2.1.10", - "@heroui/framer-utils": "2.1.23", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@heroui/use-aria-overlay": "2.0.4", - "@heroui/use-safe-layout-effect": "2.1.8", - "@react-aria/overlays": "3.30.0", - "@react-aria/tooltip": "3.8.8", - "@react-stately/tooltip": "3.5.8", - "@react-types/overlays": "3.9.2", - "@react-types/tooltip": "3.4.21" - }, - "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/use-aria-accordion": { - "version": "2.2.18", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-accordion/-/use-aria-accordion-2.2.18.tgz", - "integrity": "sha512-qjRkae2p4MFDrNqO6v6YCor0BtVi3idMd1dsI82XM16bxLQ2stqG4Ajrg60xV0AN+WKZUq10oetqkJuY6MYg0w==", - "dependencies": { - "@react-aria/button": "3.14.2", - "@react-aria/focus": "3.21.2", - "@react-aria/selection": "3.26.0", - "@react-stately/tree": "3.9.3", - "@react-types/accordion": "3.0.0-alpha.26", - "@react-types/shared": "3.32.1" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-aria-button": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-button/-/use-aria-button-2.2.20.tgz", - "integrity": "sha512-Y0Bmze/pxEACKsHMbA1sYA3ghMJ+9fSnWvZBwlUxqiVXDEy2YrrK2JmXEgsuHGQdKD9RqU2Od3V4VqIIiaHiMA==", - "dependencies": { - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/utils": "3.31.0", - "@react-types/button": "3.14.1", - "@react-types/shared": "3.32.1" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-aria-link": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-link/-/use-aria-link-2.2.21.tgz", - "integrity": "sha512-sG2rUutT/E/FYguzZmg715cXcM6+ue9wRfs2Gi6epWJwIVpS51uEagJKY0wIutJDfuCPfQ9AuxXfJek4CnxjKw==", - "dependencies": { - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/utils": "3.31.0", - "@react-types/link": "3.6.5", - "@react-types/shared": "3.32.1" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-aria-modal-overlay": { - "version": "2.2.19", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-modal-overlay/-/use-aria-modal-overlay-2.2.19.tgz", - "integrity": "sha512-MPvszNrt+1DauiSyOAwb0pKbYahpEVi9hrmidnO8cd1SA7B2ES0fNRBeNMAwcaeR/Nzsv+Cw1hRXt3egwqi0lg==", - "dependencies": { - "@heroui/use-aria-overlay": "2.0.4", - "@react-aria/overlays": "3.30.0", - "@react-aria/utils": "3.31.0", - "@react-stately/overlays": "3.6.20" - }, - "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.19", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-multiselect/-/use-aria-multiselect-2.4.19.tgz", - "integrity": "sha512-RLDSpOLJqNESn6OK/zKuyTriK6sqMby76si/4kTMCs+4lmMPOyFKP3fREywu+zyJjRUCuZPa6xYuN2OHKQRDow==", - "dependencies": { - "@react-aria/i18n": "3.12.13", - "@react-aria/interactions": "3.25.6", - "@react-aria/label": "3.7.22", - "@react-aria/listbox": "3.15.0", - "@react-aria/menu": "3.19.3", - "@react-aria/selection": "3.26.0", - "@react-aria/utils": "3.31.0", - "@react-stately/form": "3.2.2", - "@react-stately/list": "3.13.1", - "@react-stately/menu": "3.9.8", - "@react-types/button": "3.14.1", - "@react-types/overlays": "3.9.2", - "@react-types/shared": "3.32.1" - }, - "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.4", - "resolved": "https://registry.npmjs.org/@heroui/use-aria-overlay/-/use-aria-overlay-2.0.4.tgz", - "integrity": "sha512-iv+y0+OvQd1eWiZftPI07JE3c5AdK85W5k3rDlhk5MFEI3dllkIpu8z8zLh3ge/BQGFiGkySVC5iXl8w84gMUQ==", - "dependencies": { - "@react-aria/focus": "3.21.2", - "@react-aria/interactions": "3.25.6", - "@react-aria/overlays": "3.30.0", - "@react-types/shared": "3.32.1" - }, - "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==", - "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==", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-data-scroll-overflow": { - "version": "2.2.13", - "resolved": "https://registry.npmjs.org/@heroui/use-data-scroll-overflow/-/use-data-scroll-overflow-2.2.13.tgz", - "integrity": "sha512-zboLXO1pgYdzMUahDcVt5jf+l1jAQ/D9dFqr7AxWLfn6tn7/EgY0f6xIrgWDgJnM0U3hKxVeY13pAeB4AFTqTw==", - "dependencies": { - "@heroui/shared-utils": "2.1.12" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-disclosure": { - "version": "2.2.17", - "resolved": "https://registry.npmjs.org/@heroui/use-disclosure/-/use-disclosure-2.2.17.tgz", - "integrity": "sha512-S3pN0WmpcTTZuQHcXw4RcTVsxLaCZ95H5qi/JPN83ahhWTCC+pN8lwE37vSahbMTM1YriiHyTM6AWpv/E3Jq7w==", - "dependencies": { - "@heroui/use-callback-ref": "2.1.8", - "@react-aria/utils": "3.31.0", - "@react-stately/utils": "3.10.8" - }, - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-draggable": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/@heroui/use-draggable/-/use-draggable-2.1.18.tgz", - "integrity": "sha512-ihQdmLGYJ6aTEaJ0/yCXYn6VRdrRV2eO03XD2A3KANZPb1Bj/n4r298xNMql5VnGq5ZNDJB9nTv8NNCu9pmPdg==", - "dependencies": { - "@react-aria/interactions": "3.25.6" - }, - "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==", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-image": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/@heroui/use-image/-/use-image-2.1.13.tgz", - "integrity": "sha512-NLApz+xin2bKHEXr+eSrtB0lN8geKP5VOea5QGbOCiHq4DBXu4QctpRkSfCHGIQzWdBVaLPoV+5wd0lR2S2Egg==", - "dependencies": { - "@heroui/react-utils": "2.1.14", - "@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==", - "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==", - "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==", - "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==", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/use-pagination": { - "version": "2.2.18", - "resolved": "https://registry.npmjs.org/@heroui/use-pagination/-/use-pagination-2.2.18.tgz", - "integrity": "sha512-qm1mUe5UgV0kPZItcs/jiX/BxzdDagmcxaJkYR6DkhfMRoCuOdoJhcoh8ncbCAgHpzPESPn1VxsOcG4/Y+Jkdw==", - "dependencies": { - "@heroui/shared-utils": "2.1.12", - "@react-aria/i18n": "3.12.13" - }, - "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==", - "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==", - "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==", - "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==", - "peerDependencies": { - "react": ">=18 || >=19.0.0-rc.0" - } - }, - "node_modules/@heroui/user": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/@heroui/user/-/user-2.2.22.tgz", - "integrity": "sha512-kOLxh9Bjgl/ya/f+W7/eKVO/n1GPsU5TPzwocC9+FU/+MbCOrmkevhAGGUrb259KCnp9WCv7WGRIcf8rrsreDw==", - "dependencies": { - "@heroui/avatar": "2.2.22", - "@heroui/react-utils": "2.1.14", - "@heroui/shared-utils": "2.1.12", - "@react-aria/focus": "3.21.2" - }, - "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/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -4033,39 +2547,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@internationalized/date": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.10.0.tgz", - "integrity": "sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==", - "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==", - "dependencies": { - "@swc/helpers": "^0.5.0", - "intl-messageformat": "^10.1.0" - } - }, - "node_modules/@internationalized/number": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.5.tgz", - "integrity": "sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==", - "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==", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -5723,9 +4204,9 @@ } }, "node_modules/@noahspan/noahspan-modules": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@noahspan/noahspan-modules/-/noahspan-modules-1.2.9.tgz", - "integrity": "sha512-YUkFpI7UvvCUA3cAkSsWJZS3telrlVraCgXY1TrSoimPcT48fO4HKNqKboSJAeVq03rK6mV+BGimF9ZXZjrJzg==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@noahspan/noahspan-modules/-/noahspan-modules-1.2.11.tgz", + "integrity": "sha512-bJTHCbr+yx2mDhGM5FEXzCSWD0evGH8o2WHcxJf64IFtYGmknusuwKc1WGKfbp0M2quGkQRjL6rUzjElev4epg==", "dependencies": { "@azure/identity": "^4.2.0", "@azure/msal-node": "^2.9.2", @@ -5968,694 +4449,6 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", "license": "BSD-3-Clause" }, - "node_modules/@react-aria/breadcrumbs": { - "version": "3.5.29", - "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.29.tgz", - "integrity": "sha512-rKS0dryllaZJqrr3f/EAf2liz8CBEfmL5XACj+Z1TAig6GIYe1QuA3BtkX0cV9OkMugXdX8e3cbA7nD10ORRqg==", - "dependencies": { - "@react-aria/i18n": "^3.12.13", - "@react-aria/link": "^3.8.6", - "@react-aria/utils": "^3.31.0", - "@react-types/breadcrumbs": "^3.7.17", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.14.2.tgz", - "integrity": "sha512-VbLIA+Kd6f/MDjd+TJBUg2+vNDw66pnvsj2E4RLomjI9dfBuN7d+Yo2UnsqKVyhePjCUZ6xxa2yDuD63IOSIYA==", - "dependencies": { - "@react-aria/interactions": "^3.25.6", - "@react-aria/toolbar": "3.0.0-beta.21", - "@react-aria/utils": "^3.31.0", - "@react-stately/toggle": "^3.9.2", - "@react-types/button": "^3.14.1", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.9.2.tgz", - "integrity": "sha512-uSLxLgOPRnEU4Jg59lAhUVA+uDx/55NBg4lpfsP2ynazyiJ5LCXmYceJi+VuOqMml7d9W0dB87OldOeLdIxYVA==", - "dependencies": { - "@internationalized/date": "^3.10.0", - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/live-announcer": "^3.4.4", - "@react-aria/utils": "^3.31.0", - "@react-stately/calendar": "^3.9.0", - "@react-types/button": "^3.14.1", - "@react-types/calendar": "^3.8.0", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.16.2.tgz", - "integrity": "sha512-29Mj9ZqXioJ0bcMnNGooHztnTau5pikZqX3qCRj5bYR3by/ZFFavYoMroh9F7s/MbFm/tsKX+Sf02lYFEdXRjA==", - "dependencies": { - "@react-aria/form": "^3.1.2", - "@react-aria/interactions": "^3.25.6", - "@react-aria/label": "^3.7.22", - "@react-aria/toggle": "^3.12.2", - "@react-aria/utils": "^3.31.0", - "@react-stately/checkbox": "^3.7.2", - "@react-stately/form": "^3.2.2", - "@react-stately/toggle": "^3.9.2", - "@react-types/checkbox": "^3.10.2", - "@react-types/shared": "^3.32.1", - "@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.14.0", - "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.14.0.tgz", - "integrity": "sha512-z4ro0Hma//p4nL2IJx5iUa7NwxeXbzSoZ0se5uTYjG1rUUMszg+wqQh/AQoL+eiULn7rs18JY9wwNbVIkRNKWA==", - "dependencies": { - "@react-aria/focus": "^3.21.2", - "@react-aria/i18n": "^3.12.13", - "@react-aria/listbox": "^3.15.0", - "@react-aria/live-announcer": "^3.4.4", - "@react-aria/menu": "^3.19.3", - "@react-aria/overlays": "^3.30.0", - "@react-aria/selection": "^3.26.0", - "@react-aria/textfield": "^3.18.2", - "@react-aria/utils": "^3.31.0", - "@react-stately/collections": "^3.12.8", - "@react-stately/combobox": "^3.12.0", - "@react-stately/form": "^3.2.2", - "@react-types/button": "^3.14.1", - "@react-types/combobox": "^3.13.9", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.15.2.tgz", - "integrity": "sha512-th078hyNqPf4P2K10su/y32zPDjs3lOYVdHvsL9/+5K1dnTvLHCK5vgUyLuyn8FchhF7cmHV49D+LZVv65PEpQ==", - "dependencies": { - "@internationalized/date": "^3.10.0", - "@internationalized/number": "^3.6.5", - "@internationalized/string": "^3.2.7", - "@react-aria/focus": "^3.21.2", - "@react-aria/form": "^3.1.2", - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/label": "^3.7.22", - "@react-aria/spinbutton": "^3.6.19", - "@react-aria/utils": "^3.31.0", - "@react-stately/datepicker": "^3.15.2", - "@react-stately/form": "^3.2.2", - "@react-types/button": "^3.14.1", - "@react-types/calendar": "^3.8.0", - "@react-types/datepicker": "^3.13.2", - "@react-types/dialog": "^3.5.22", - "@react-types/shared": "^3.32.1", - "@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.31", - "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.31.tgz", - "integrity": "sha512-inxQMyrzX0UBW9Mhraq0nZ4HjHdygQvllzloT1E/RlDd61lr3RbmJR6pLsrbKOTtSvDIBJpCso1xEdHCFNmA0Q==", - "dependencies": { - "@react-aria/interactions": "^3.25.6", - "@react-aria/overlays": "^3.30.0", - "@react-aria/utils": "^3.31.0", - "@react-types/dialog": "^3.5.22", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.2.tgz", - "integrity": "sha512-JWaCR7wJVggj+ldmM/cb/DXFg47CXR55lznJhZBh4XVqJjMKwaOOqpT5vNN7kpC1wUpXicGNuDnJDN1S/+6dhQ==", - "dependencies": { - "@react-aria/interactions": "^3.25.6", - "@react-aria/utils": "^3.31.0", - "@react-types/shared": "^3.32.1", - "@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/focus/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-aria/form": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.1.2.tgz", - "integrity": "sha512-R3i7L7Ci61PqZQvOrnL9xJeWEbh28UkTVgkj72EvBBn39y4h7ReH++0stv7rRs8p5ozETSKezBbGfu4UsBewWw==", - "dependencies": { - "@react-aria/interactions": "^3.25.6", - "@react-aria/utils": "^3.31.0", - "@react-stately/form": "^3.2.2", - "@react-types/shared": "^3.32.1", - "@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.5", - "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.14.5.tgz", - "integrity": "sha512-XHw6rgjlTqc85e3zjsWo3U0EVwjN5MOYtrolCKc/lc2ItNdcY3OlMhpsU9+6jHwg/U3VCSWkGvwAz9hg7krd8Q==", - "dependencies": { - "@react-aria/focus": "^3.21.2", - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/live-announcer": "^3.4.4", - "@react-aria/selection": "^3.26.0", - "@react-aria/utils": "^3.31.0", - "@react-stately/collections": "^3.12.8", - "@react-stately/grid": "^3.11.6", - "@react-stately/selection": "^3.20.6", - "@react-types/checkbox": "^3.10.2", - "@react-types/grid": "^3.3.6", - "@react-types/shared": "^3.32.1", - "@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.13", - "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.12.13.tgz", - "integrity": "sha512-YTM2BPg0v1RvmP8keHenJBmlx8FXUKsdYIEX7x6QWRd1hKlcDwphfjzvt0InX9wiLiPHsT5EoBTpuUk8SXc0Mg==", - "dependencies": { - "@internationalized/date": "^3.10.0", - "@internationalized/message": "^3.1.8", - "@internationalized/number": "^3.6.5", - "@internationalized/string": "^3.2.7", - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.31.0", - "@react-types/shared": "^3.32.1", - "@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.6", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.25.6.tgz", - "integrity": "sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw==", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.31.0", - "@react-stately/flags": "^3.1.2", - "@react-types/shared": "^3.32.1", - "@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.22", - "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.22.tgz", - "integrity": "sha512-jLquJeA5ZNqDT64UpTc9XJ7kQYltUlNcgxZ37/v4mHe0UZ7QohCKdKQhXHONb0h2jjNUpp2HOZI8J9++jOpzxA==", - "dependencies": { - "@react-aria/utils": "^3.31.0", - "@react-types/shared": "^3.32.1", - "@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.7", - "resolved": "https://registry.npmjs.org/@react-aria/landmark/-/landmark-3.0.7.tgz", - "integrity": "sha512-t8c610b8hPLS6Vwv+rbuSyljZosI1s5+Tosfa0Fk4q7d+Ex6Yj7hLfUFy59GxZAufhUYfGX396fT0gPqAbU1tg==", - "dependencies": { - "@react-aria/utils": "^3.31.0", - "@react-types/shared": "^3.32.1", - "@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.6", - "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.8.6.tgz", - "integrity": "sha512-7F7UDJnwbU9IjfoAdl6f3Hho5/WB7rwcydUOjUux0p7YVWh/fTjIFjfAGyIir7MJhPapun1D0t97QQ3+8jXVcg==", - "dependencies": { - "@react-aria/interactions": "^3.25.6", - "@react-aria/utils": "^3.31.0", - "@react-types/link": "^3.6.5", - "@react-types/shared": "^3.32.1", - "@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.15.0", - "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.15.0.tgz", - "integrity": "sha512-Ub1Wu79R9sgxM7h4HeEdjOgOKDHwduvYcnDqsSddGXgpkL8ADjsy2YUQ0hHY5VnzA4BxK36bLp4mzSna8Qvj1w==", - "dependencies": { - "@react-aria/interactions": "^3.25.6", - "@react-aria/label": "^3.7.22", - "@react-aria/selection": "^3.26.0", - "@react-aria/utils": "^3.31.0", - "@react-stately/collections": "^3.12.8", - "@react-stately/list": "^3.13.1", - "@react-types/listbox": "^3.7.4", - "@react-types/shared": "^3.32.1", - "@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==", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@react-aria/menu": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.19.3.tgz", - "integrity": "sha512-52fh8y8b2776R2VrfZPpUBJYC9oTP7XDy+zZuZTxPEd7Ywk0JNUl5F92y6ru22yPkS13sdhrNM/Op+V/KulmAg==", - "dependencies": { - "@react-aria/focus": "^3.21.2", - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/overlays": "^3.30.0", - "@react-aria/selection": "^3.26.0", - "@react-aria/utils": "^3.31.0", - "@react-stately/collections": "^3.12.8", - "@react-stately/menu": "^3.9.8", - "@react-stately/selection": "^3.20.6", - "@react-stately/tree": "^3.9.3", - "@react-types/button": "^3.14.1", - "@react-types/menu": "^3.10.5", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.12.2.tgz", - "integrity": "sha512-M2b+z0HIXiXpGAWOQkO2kpIjaLNUXJ5Q3/GMa3Fkr+B1piFX0VuOynYrtddKVrmXCe+r5t+XcGb0KS29uqv7nQ==", - "dependencies": { - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/spinbutton": "^3.6.19", - "@react-aria/textfield": "^3.18.2", - "@react-aria/utils": "^3.31.0", - "@react-stately/form": "^3.2.2", - "@react-stately/numberfield": "^3.10.2", - "@react-types/button": "^3.14.1", - "@react-types/numberfield": "^3.8.15", - "@react-types/shared": "^3.32.1", - "@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.30.0", - "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.30.0.tgz", - "integrity": "sha512-UpjqSjYZx5FAhceWCRVsW6fX1sEwya1fQ/TKkL53FAlLFR8QKuoKqFlmiL43YUFTcGK3UdEOy3cWTleLQwdSmQ==", - "dependencies": { - "@react-aria/focus": "^3.21.2", - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.31.0", - "@react-aria/visually-hidden": "^3.8.28", - "@react-stately/overlays": "^3.6.20", - "@react-types/button": "^3.14.1", - "@react-types/overlays": "^3.9.2", - "@react-types/shared": "^3.32.1", - "@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.27", - "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.27.tgz", - "integrity": "sha512-0OA1shs1575g1zmO8+rWozdbTnxThFFhOfuoL1m7UV5Dley6FHpueoKB1ECv7B+Qm4dQt6DoEqLg7wsbbQDhmg==", - "dependencies": { - "@react-aria/i18n": "^3.12.13", - "@react-aria/label": "^3.7.22", - "@react-aria/utils": "^3.31.0", - "@react-types/progress": "^3.5.16", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.12.2.tgz", - "integrity": "sha512-I11f6I90neCh56rT/6ieAs3XyDKvEfbj/QmbU5cX3p+SJpRRPN0vxQi5D1hkh0uxDpeClxygSr31NmZsd4sqfg==", - "dependencies": { - "@react-aria/focus": "^3.21.2", - "@react-aria/form": "^3.1.2", - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/label": "^3.7.22", - "@react-aria/utils": "^3.31.0", - "@react-stately/radio": "^3.11.2", - "@react-types/radio": "^3.9.2", - "@react-types/shared": "^3.32.1", - "@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.26.0", - "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.26.0.tgz", - "integrity": "sha512-ZBH3EfWZ+RfhTj01dH8L17uT7iNbXWS8u77/fUpHgtrm0pwNVhx0TYVnLU1YpazQ/3WVpvWhmBB8sWwD1FlD/g==", - "dependencies": { - "@react-aria/focus": "^3.21.2", - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/utils": "^3.31.0", - "@react-stately/selection": "^3.20.6", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.8.2.tgz", - "integrity": "sha512-6KyUGaVzRE4xAz1LKHbNh1q5wzxe58pdTHFSnxNe6nk1SCoHw7NfI4h2s2m6LgJ0megFxsT0Ir8aHaFyyxmbgg==", - "dependencies": { - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/label": "^3.7.22", - "@react-aria/utils": "^3.31.0", - "@react-stately/slider": "^3.7.2", - "@react-types/shared": "^3.32.1", - "@react-types/slider": "^3.8.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/spinbutton": { - "version": "3.6.19", - "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.19.tgz", - "integrity": "sha512-xOIXegDpts9t3RSHdIN0iYQpdts0FZ3LbpYJIYVvdEHo9OpDS+ElnDzCGtwZLguvZlwc5s1LAKuKopDUsAEMkw==", - "dependencies": { - "@react-aria/i18n": "^3.12.13", - "@react-aria/live-announcer": "^3.4.4", - "@react-aria/utils": "^3.31.0", - "@react-types/button": "^3.14.1", - "@react-types/shared": "^3.32.1", - "@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==", - "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.8", - "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.7.8.tgz", - "integrity": "sha512-AfsUq1/YiuoprhcBUD9vDPyWaigAwctQNW1fMb8dROL+i/12B+Zekj8Ml+jbU69/kIVtfL0Jl7/0Bo9KK3X0xQ==", - "dependencies": { - "@react-aria/toggle": "^3.12.2", - "@react-stately/toggle": "^3.9.2", - "@react-types/shared": "^3.32.1", - "@react-types/switch": "^3.5.15", - "@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.8", - "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.17.8.tgz", - "integrity": "sha512-bXiZoxTMbsqUJsYDhHPzKc3jw0HFJ/xMsJ49a0f7mp5r9zACxNLeIU0wJ4Uvx37dnYOHKzGliG+rj5l4sph7MA==", - "dependencies": { - "@react-aria/focus": "^3.21.2", - "@react-aria/grid": "^3.14.5", - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/live-announcer": "^3.4.4", - "@react-aria/utils": "^3.31.0", - "@react-aria/visually-hidden": "^3.8.28", - "@react-stately/collections": "^3.12.8", - "@react-stately/flags": "^3.1.2", - "@react-stately/table": "^3.15.1", - "@react-types/checkbox": "^3.10.2", - "@react-types/grid": "^3.3.6", - "@react-types/shared": "^3.32.1", - "@react-types/table": "^3.13.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/tabs": { - "version": "3.10.8", - "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.10.8.tgz", - "integrity": "sha512-sPPJyTyoAqsBh76JinBAxStOcbjZvyWFYKpJ9Uqw+XT0ObshAPPFSGeh8DiQemPs02RwJdrfARPMhyqiX8t59A==", - "dependencies": { - "@react-aria/focus": "^3.21.2", - "@react-aria/i18n": "^3.12.13", - "@react-aria/selection": "^3.26.0", - "@react-aria/utils": "^3.31.0", - "@react-stately/tabs": "^3.8.6", - "@react-types/shared": "^3.32.1", - "@react-types/tabs": "^3.3.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/textfield": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.18.2.tgz", - "integrity": "sha512-G+lM8VYSor6g9Yptc6hLZ6BF+0cq0pYol1z6wdQUQgJN8tg4HPtzq75lsZtlCSIznL3amgRAxJtd0dUrsAnvaQ==", - "dependencies": { - "@react-aria/form": "^3.1.2", - "@react-aria/interactions": "^3.25.6", - "@react-aria/label": "^3.7.22", - "@react-aria/utils": "^3.31.0", - "@react-stately/form": "^3.2.2", - "@react-stately/utils": "^3.10.8", - "@react-types/shared": "^3.32.1", - "@react-types/textfield": "^3.12.6", - "@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.8", - "resolved": "https://registry.npmjs.org/@react-aria/toast/-/toast-3.0.8.tgz", - "integrity": "sha512-rfJIms6AkMyQ7ZgKrMZgGfPwGcB/t1JoEwbc1PAmXcAvFI/hzF6YF7ZFDXiq38ucFsP9PnHmbXIzM9w4ccl18A==", - "dependencies": { - "@react-aria/i18n": "^3.12.13", - "@react-aria/interactions": "^3.25.6", - "@react-aria/landmark": "^3.0.7", - "@react-aria/utils": "^3.31.0", - "@react-stately/toast": "^3.1.2", - "@react-types/button": "^3.14.1", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.12.2.tgz", - "integrity": "sha512-g25XLYqJuJpt0/YoYz2Rab8ax+hBfbssllcEFh0v0jiwfk2gwTWfRU9KAZUvxIqbV8Nm8EBmrYychDpDcvW1kw==", - "dependencies": { - "@react-aria/interactions": "^3.25.6", - "@react-aria/utils": "^3.31.0", - "@react-stately/toggle": "^3.9.2", - "@react-types/checkbox": "^3.10.2", - "@react-types/shared": "^3.32.1", - "@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.21", - "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.21.tgz", - "integrity": "sha512-yRCk/GD8g+BhdDgxd3I0a0c8Ni4Wyo6ERzfSoBkPkwQ4X2E2nkopmraM9D0fXw4UcIr4bnmvADzkHXtBN0XrBg==", - "dependencies": { - "@react-aria/focus": "^3.21.2", - "@react-aria/i18n": "^3.12.13", - "@react-aria/utils": "^3.31.0", - "@react-types/shared": "^3.32.1", - "@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.8", - "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.8.8.tgz", - "integrity": "sha512-CmHUqtXtFWmG4AHMEr9hIVex+oscK6xcM2V47gq9ijNInxe3M6UBu/dBdkgGP/jYv9N7tzCAjTR8nNIHQXwvWw==", - "dependencies": { - "@react-aria/interactions": "^3.25.6", - "@react-aria/utils": "^3.31.0", - "@react-stately/tooltip": "^3.5.8", - "@react-types/shared": "^3.32.1", - "@react-types/tooltip": "^3.4.21", - "@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.31.0", - "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.31.0.tgz", - "integrity": "sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig==", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-stately/flags": "^3.1.2", - "@react-stately/utils": "^3.10.8", - "@react-types/shared": "^3.32.1", - "@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/utils/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-aria/visually-hidden": { - "version": "3.8.28", - "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.28.tgz", - "integrity": "sha512-KRRjbVVob2CeBidF24dzufMxBveEUtUu7IM+hpdZKB+gxVROoh4XRLPv9SFmaH89Z7D9To3QoykVZoWD0lan6Q==", - "dependencies": { - "@react-aria/interactions": "^3.25.6", - "@react-aria/utils": "^3.31.0", - "@react-types/shared": "^3.32.1", - "@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-leaflet/core": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", @@ -6666,600 +4459,6 @@ "react-dom": "^18.0.0" } }, - "node_modules/@react-stately/calendar": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.9.0.tgz", - "integrity": "sha512-U5Nf2kx9gDhJRxdDUm5gjfyUlt/uUfOvM1vDW2UA62cA6+2k2cavMLc2wNlXOb/twFtl6p0joYKHG7T4xnEFkg==", - "dependencies": { - "@internationalized/date": "^3.10.0", - "@react-stately/utils": "^3.10.8", - "@react-types/calendar": "^3.8.0", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.7.2.tgz", - "integrity": "sha512-j1ycUVz5JmqhaL6mDZgDNZqBilOB8PBW096sDPFaTtuYreDx2HOd1igxiIvwlvPESZwsJP7FVM3mYnaoXtpKPA==", - "dependencies": { - "@react-stately/form": "^3.2.2", - "@react-stately/utils": "^3.10.8", - "@react-types/checkbox": "^3.10.2", - "@react-types/shared": "^3.32.1", - "@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.8", - "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.12.8.tgz", - "integrity": "sha512-AceJYLLXt1Y2XIcOPi6LEJSs4G/ubeYW3LqOCQbhfIgMaNqKfQMIfagDnPeJX9FVmPFSlgoCBxb1pTJW2vjCAQ==", - "dependencies": { - "@react-types/shared": "^3.32.1", - "@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.12.0", - "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.12.0.tgz", - "integrity": "sha512-A6q9R/7cEa/qoQsBkdslXWvD7ztNLLQ9AhBhVN9QvzrmrH5B4ymUwcTU8lWl22ykH7RRwfonLeLXJL4C+/L2oQ==", - "dependencies": { - "@react-stately/collections": "^3.12.8", - "@react-stately/form": "^3.2.2", - "@react-stately/list": "^3.13.1", - "@react-stately/overlays": "^3.6.20", - "@react-stately/utils": "^3.10.8", - "@react-types/combobox": "^3.13.9", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.15.2.tgz", - "integrity": "sha512-S5GL+W37chvV8knv9v0JRv0L6hKo732qqabCCHXzOpYxkLIkV4f/y3cHdEzFWzpZ0O0Gkg7WgeYo160xOdBKYg==", - "dependencies": { - "@internationalized/date": "^3.10.0", - "@internationalized/string": "^3.2.7", - "@react-stately/form": "^3.2.2", - "@react-stately/overlays": "^3.6.20", - "@react-stately/utils": "^3.10.8", - "@react-types/datepicker": "^3.13.2", - "@react-types/shared": "^3.32.1", - "@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==", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@react-stately/form": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.2.2.tgz", - "integrity": "sha512-soAheOd7oaTO6eNs6LXnfn0tTqvOoe3zN9FvtIhhrErKz9XPc5sUmh3QWwR45+zKbitOi1HOjfA/gifKhZcfWw==", - "dependencies": { - "@react-types/shared": "^3.32.1", - "@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.6", - "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.11.6.tgz", - "integrity": "sha512-vWPAkzpeTIsrurHfMubzMuqEw7vKzFhIJeEK5sEcLunyr1rlADwTzeWrHNbPMl66NAIAi70Dr1yNq+kahQyvMA==", - "dependencies": { - "@react-stately/collections": "^3.12.8", - "@react-stately/selection": "^3.20.6", - "@react-types/grid": "^3.3.6", - "@react-types/shared": "^3.32.1", - "@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.13.1", - "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.13.1.tgz", - "integrity": "sha512-eHaoauh21twbcl0kkwULhVJ+CzYcy1jUjMikNVMHOQdhr4WIBdExf7PmSgKHKqsSPhpGg6IpTCY2dUX3RycjDg==", - "dependencies": { - "@react-stately/collections": "^3.12.8", - "@react-stately/selection": "^3.20.6", - "@react-stately/utils": "^3.10.8", - "@react-types/shared": "^3.32.1", - "@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.8", - "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.9.8.tgz", - "integrity": "sha512-bo0NOhofnTHLESiYfsSSw6gyXiPVJJ0UlN2igUXtJk5PmyhWjFzUzTzcnd7B028OB0si9w3LIWM3stqz5271Eg==", - "dependencies": { - "@react-stately/overlays": "^3.6.20", - "@react-types/menu": "^3.10.5", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.10.2.tgz", - "integrity": "sha512-jlKVFYaH3RX5KvQ7a+SAMQuPccZCzxLkeYkBE64u1Zvi7YhJ8hkTMHG/fmZMbk1rHlseE2wfBdk0Rlya3MvoNQ==", - "dependencies": { - "@internationalized/number": "^3.6.5", - "@react-stately/form": "^3.2.2", - "@react-stately/utils": "^3.10.8", - "@react-types/numberfield": "^3.8.15", - "@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.20", - "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.20.tgz", - "integrity": "sha512-YAIe+uI8GUXX8F/0Pzr53YeC5c/bjqbzDFlV8NKfdlCPa6+Jp4B/IlYVjIooBj9+94QvbQdjylegvYWK/iPwlg==", - "dependencies": { - "@react-stately/utils": "^3.10.8", - "@react-types/overlays": "^3.9.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/radio": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.11.2.tgz", - "integrity": "sha512-UM7L6AW+k8edhSBUEPZAqiWNRNadfOKK7BrCXyBiG79zTz0zPcXRR+N+gzkDn7EMSawDeyK1SHYUuoSltTactg==", - "dependencies": { - "@react-stately/form": "^3.2.2", - "@react-stately/utils": "^3.10.8", - "@react-types/radio": "^3.9.2", - "@react-types/shared": "^3.32.1", - "@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.6", - "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.20.6.tgz", - "integrity": "sha512-a0bjuP2pJYPKEiedz2Us1W1aSz0iHRuyeQEdBOyL6Z6VUa6hIMq9H60kvseir2T85cOa4QggizuRV7mcO6bU5w==", - "dependencies": { - "@react-stately/collections": "^3.12.8", - "@react-stately/utils": "^3.10.8", - "@react-types/shared": "^3.32.1", - "@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.2", - "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.7.2.tgz", - "integrity": "sha512-EVBHUdUYwj++XqAEiQg2fGi8Reccznba0uyQ3gPejF0pAc390Q/J5aqiTEDfiCM7uJ6WHxTM6lcCqHQBISk2dQ==", - "dependencies": { - "@react-stately/utils": "^3.10.8", - "@react-types/shared": "^3.32.1", - "@react-types/slider": "^3.8.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/table": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.15.1.tgz", - "integrity": "sha512-MhMAgE/LgAzHcAn1P3p/nQErzJ6DiixSJ1AOt2JlnAKEb5YJg4ATKWCb2IjBLwywt9ZCzfm3KMUzkctZqAoxwA==", - "dependencies": { - "@react-stately/collections": "^3.12.8", - "@react-stately/flags": "^3.1.2", - "@react-stately/grid": "^3.11.6", - "@react-stately/selection": "^3.20.6", - "@react-stately/utils": "^3.10.8", - "@react-types/grid": "^3.3.6", - "@react-types/shared": "^3.32.1", - "@react-types/table": "^3.13.4", - "@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.6", - "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.8.6.tgz", - "integrity": "sha512-9RYxmgjVIxUpIsGKPIF7uRoHWOEz8muwaYiStCVeyiYBPmarvZoIYtTXcwSMN/vEs7heVN5uGCL6/bfdY4+WiA==", - "dependencies": { - "@react-stately/list": "^3.13.1", - "@react-types/shared": "^3.32.1", - "@react-types/tabs": "^3.3.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/toast": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-stately/toast/-/toast-3.1.2.tgz", - "integrity": "sha512-HiInm7bck32khFBHZThTQaAF6e6/qm57F4mYRWdTq8IVeGDzpkbUYibnLxRhk0UZ5ybc6me+nqqPkG/lVmM42Q==", - "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.2", - "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.9.2.tgz", - "integrity": "sha512-dOxs9wrVXHUmA7lc8l+N9NbTJMAaXcYsnNGsMwfXIXQ3rdq+IjWGNYJ52UmNQyRYFcg0jrzRrU16TyGbNjOdNQ==", - "dependencies": { - "@react-stately/utils": "^3.10.8", - "@react-types/checkbox": "^3.10.2", - "@react-types/shared": "^3.32.1", - "@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.8", - "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.5.8.tgz", - "integrity": "sha512-gkcUx2ROhCiGNAYd2BaTejakXUUNLPnnoJ5+V/mN480pN+OrO8/2V9pqb/IQmpqxLsso93zkM3A4wFHHLBBmPQ==", - "dependencies": { - "@react-stately/overlays": "^3.6.20", - "@react-types/tooltip": "^3.4.21", - "@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.3", - "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.9.3.tgz", - "integrity": "sha512-ZngG79nLFxE/GYmpwX6E/Rma2MMkzdoJPRI3iWk3dgqnGMMzpPnUp/cvjDsU3UHF7xDVusC5BT6pjWN0uxCIFQ==", - "dependencies": { - "@react-stately/collections": "^3.12.8", - "@react-stately/selection": "^3.20.6", - "@react-stately/utils": "^3.10.8", - "@react-types/shared": "^3.32.1", - "@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==", - "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.4", - "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-4.4.4.tgz", - "integrity": "sha512-ri8giqXSZOrznZDCCOE4U36wSkOhy+hrFK7yo/YVcpxTqqp3d3eisfKMqbDsgqBW+XTHycTU/xeAf0u9NqrfpQ==", - "dependencies": { - "@react-types/shared": "^3.32.1", - "@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==", - "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.17", - "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.17.tgz", - "integrity": "sha512-IhvVTcfli5o/UDlGACXxjlor2afGlMQA8pNR3faH0bBUay1Fmm3IWktVw9Xwmk+KraV2RTAg9e+E6p8DOQZfiw==", - "dependencies": { - "@react-types/link": "^3.6.5", - "@react-types/shared": "^3.32.1" - }, - "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.14.1", - "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.14.1.tgz", - "integrity": "sha512-D8C4IEwKB7zEtiWYVJ3WE/5HDcWlze9mLWQ5hfsBfpePyWCgO3bT/+wjb/7pJvcAocrkXo90QrMm85LcpBtrpg==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.8.0", - "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.8.0.tgz", - "integrity": "sha512-ZDZgfZgbz1ydWOFs1mH7QFfX3ioJrmb3Y/lkoubQE0HWXLZzyYNvhhKyFJRS1QJ40IofLSBHriwbQb/tsUnGlw==", - "dependencies": { - "@internationalized/date": "^3.10.0", - "@react-types/shared": "^3.32.1" - }, - "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.2", - "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.10.2.tgz", - "integrity": "sha512-ktPkl6ZfIdGS1tIaGSU/2S5Agf2NvXI9qAgtdMDNva0oLyAZ4RLQb6WecPvofw1J7YKXu0VA5Mu7nlX+FM2weQ==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.9", - "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.13.9.tgz", - "integrity": "sha512-G6GmLbzVkLW6VScxPAr/RtliEyPhBClfYaIllK1IZv+Z42SVnOpKzhnoe79BpmiFqy1AaC3+LjZX783mrsHCwA==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.2", - "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.13.2.tgz", - "integrity": "sha512-+M6UZxJnejYY8kz0spbY/hP08QJ5rsZ3aNarRQQHc48xV2oelFLX5MhAqizfLEsvyfb0JYrhWoh4z1xZtAmYCg==", - "dependencies": { - "@internationalized/date": "^3.10.0", - "@react-types/calendar": "^3.8.0", - "@react-types/overlays": "^3.9.2", - "@react-types/shared": "^3.32.1" - }, - "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.22", - "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.22.tgz", - "integrity": "sha512-smSvzOcqKE196rWk0oqJDnz+ox5JM5+OT0PmmJXiUD4q7P5g32O6W5Bg7hMIFUI9clBtngo8kLaX2iMg+GqAzg==", - "dependencies": { - "@react-types/overlays": "^3.9.2", - "@react-types/shared": "^3.32.1" - }, - "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.16", - "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.16.tgz", - "integrity": "sha512-Sb7KJoWEaQ/e4XIY+xRbjKvbP1luome98ZXevpD+zVSyGjEcfIroebizP6K1yMHCWP/043xH6GUkgEqWPoVGjg==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.6", - "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.3.6.tgz", - "integrity": "sha512-vIZJlYTii2n1We9nAugXwM2wpcpsC6JigJFBd6vGhStRdRWRoU4yv1Gc98Usbx0FQ/J7GLVIgeG8+1VMTKBdxw==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.5", - "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.6.5.tgz", - "integrity": "sha512-+I2s3XWBEvLrzts0GnNeA84mUkwo+a7kLUWoaJkW0TOBDG7my95HFYxF9WnqKye7NgpOkCqz4s3oW96xPdIniQ==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.4", - "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.7.4.tgz", - "integrity": "sha512-p4YEpTl/VQGrqVE8GIfqTS5LkT5jtjDTbVeZgrkPnX/fiPhsfbTPiZ6g0FNap4+aOGJFGEEZUv2q4vx+rCORww==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.5", - "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.10.5.tgz", - "integrity": "sha512-HBTrKll2hm0VKJNM4ubIv1L9MNo8JuOnm2G3M+wXvb6EYIyDNxxJkhjsqsGpUXJdAOSkacHBDcNh2HsZABNX4A==", - "dependencies": { - "@react-types/overlays": "^3.9.2", - "@react-types/shared": "^3.32.1" - }, - "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.15", - "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.15.tgz", - "integrity": "sha512-97r92D23GKCOjGIGMeW9nt+/KlfM3GeWH39Czcmd2/D5y3k6z4j0avbsfx2OttCtJszrnENjw3GraYGYI2KosQ==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.2", - "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.9.2.tgz", - "integrity": "sha512-Q0cRPcBGzNGmC8dBuHyoPR7N3057KTS5g+vZfQ53k8WwmilXBtemFJPLsogJbspuewQ/QJ3o2HYsp2pne7/iNw==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.16", - "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.16.tgz", - "integrity": "sha512-I9tSdCFfvQ7gHJtm90VAKgwdTWXQgVNvLRStEc0z9h+bXBxdvZb+QuiRPERChwFQ9VkK4p4rDqaFo69nDqWkpw==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.2", - "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.9.2.tgz", - "integrity": "sha512-3UcJXu37JrTkRyP4GJPDBU7NmDTInrEdOe+bVzA1j4EegzdkJmLBkLg5cLDAbpiEHB+xIsvbJdx6dxeMuc+H3g==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.32.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.32.1.tgz", - "integrity": "sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w==", - "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.2", - "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.8.2.tgz", - "integrity": "sha512-MQYZP76OEOYe7/yA2To+Dl0LNb0cKKnvh5JtvNvDnAvEprn1RuLiay8Oi/rTtXmc2KmBa4VdTcsXsmkbbkeN2Q==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.15", - "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.15.tgz", - "integrity": "sha512-r/ouGWQmIeHyYSP1e5luET+oiR7N7cLrAlWsrAfYRWHxqXOSNQloQnZJ3PLHrKFT02fsrQhx2rHaK2LfKeyN3A==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.4", - "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.13.4.tgz", - "integrity": "sha512-I/DYiZQl6aNbMmjk90J9SOhkzVDZvyA3Vn3wMWCiajkMNjvubFhTfda5DDf2SgFP5l0Yh6TGGH5XumRv9LqL5Q==", - "dependencies": { - "@react-types/grid": "^3.3.6", - "@react-types/shared": "^3.32.1" - }, - "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.19", - "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.19.tgz", - "integrity": "sha512-fE+qI43yR5pAMpeqPxGqQq9jDHXEPqXskuxNHERMW0PYMdPyem2Cw6goc5F4qeZO3Hf6uPZgHkvJz2OAq7TbBw==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.6", - "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.12.6.tgz", - "integrity": "sha512-hpEVKE+M3uUkTjw2WrX1NrH/B3rqDJFUa+ViNK2eVranLY4ZwFqbqaYXSzHupOF3ecSjJJv2C103JrwFvx6TPQ==", - "dependencies": { - "@react-types/shared": "^3.32.1" - }, - "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.21", - "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.21.tgz", - "integrity": "sha512-ugGHOZU6WbOdeTdbjnaEc+Ms7/WhsUCg+T3PCOIeOT9FG02Ce189yJ/+hd7oqL/tVwIhEMYJIqSCgSELFox+QA==", - "dependencies": { - "@react-types/overlays": "^3.9.2", - "@react-types/shared": "^3.32.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, "node_modules/@remix-run/router": { "version": "1.23.0", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz", @@ -7663,14 +4862,6 @@ "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", "license": "MIT" }, - "node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "dependencies": { - "tslib": "^2.8.0" - } - }, "node_modules/@tailwindcss/node": { "version": "4.1.13", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.13.tgz", @@ -8232,22 +5423,6 @@ "react-dom": ">=16.8" } }, - "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==", - "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/table-core": { "version": "8.21.3", "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", @@ -8260,15 +5435,6 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, - "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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, "node_modules/@teppeis/multimaps": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@teppeis/multimaps/-/multimaps-3.0.0.tgz", @@ -10508,14 +7674,6 @@ "node": ">=0.8" } }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -10534,18 +7692,6 @@ "dev": true, "license": "MIT" }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "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", @@ -10564,20 +7710,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "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==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color2k": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", - "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==" - }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -10634,11 +7766,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -10843,6 +7970,14 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "devOptional": true }, + "node_modules/daisyui": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.5.5.tgz", + "integrity": "sha512-ekvI93ZkWIJoCOtDl0D2QMxnWvTejk9V5nWBqRv+7t0xjiBXqAK5U6o6JE2RPvlIC3EqwNyUoIZSdHX9MZK3nw==", + "funding": { + "url": "https://github.com/saadeghi/daisyui?sponsor=1" + } + }, "node_modules/date-fns-jalali": { "version": "4.1.0-0", "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", @@ -10871,11 +8006,6 @@ } } }, - "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==" - }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -10925,6 +8055,7 @@ "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==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12110,14 +9241,6 @@ "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==", - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -12363,32 +9486,6 @@ "node": ">= 0.6" } }, - "node_modules/framer-motion": { - "version": "12.23.24", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.24.tgz", - "integrity": "sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==", - "dependencies": { - "motion-dom": "^12.23.23", - "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/fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", @@ -13051,15 +10148,6 @@ "node": ">=10" } }, - "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==", - "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/inquirer": { "version": "8.2.6", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", @@ -13223,17 +10311,6 @@ "node": ">=8" } }, - "node_modules/intl-messageformat": { - "version": "10.7.18", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz", - "integrity": "sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==", - "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", - "@formatjs/fast-memoize": "2.2.7", - "@formatjs/icu-messageformat-parser": "2.11.4", - "tslib": "^2.8.0" - } - }, "node_modules/ip-address": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", @@ -15753,19 +12830,6 @@ "node": "*" } }, - "node_modules/motion-dom": { - "version": "12.23.23", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", - "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==", - "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==" - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -17602,22 +14666,6 @@ "react-dom": ">=16.8" } }, - "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==", - "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/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -18139,14 +15187,6 @@ "url": "https://opencollective.com/webpack" } }, - "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==", - "dependencies": { - "compute-scroll-into-view": "^3.0.2" - } - }, "node_modules/seed-random": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", @@ -18440,19 +15480,6 @@ "simple-concat": "^1.0.0" } }, - "node_modules/simple-swizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", - "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", - "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==" - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -18992,33 +16019,6 @@ "node": ">=0.10" } }, - "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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/tailwind-variants": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.1.1.tgz", - "integrity": "sha512-ftLXe3krnqkMHsuBTEmaVUXYovXtPyTK7ckEfDRXS8PBZx0bAUas+A0jYxuKA5b8qg++wvQ3d2MQ7l/xeZxbZQ==", - "engines": { - "node": ">=16.x", - "pnpm": ">=7.x" - }, - "peerDependencies": { - "tailwind-merge": ">=3.0.0", - "tailwindcss": "*" - }, - "peerDependenciesMeta": { - "tailwind-merge": { - "optional": true - } - } - }, "node_modules/tailwindcss": { "version": "4.1.13", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", @@ -20091,56 +17091,6 @@ "punycode": "^2.1.0" } }, - "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==", - "peerDependencies": { - "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==", - "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==", - "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.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, "node_modules/util-arity": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", diff --git a/package.json b/package.json index 86310e1..5270a3d 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", + "daisyui": "^5.5.5", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-react-hooks": "^4.6.0",