From 85b9c11bf1f85206abe7b9988aae0617ce3d9d93 Mon Sep 17 00:00:00 2001 From: Noah Spannbauer Date: Tue, 2 Dec 2025 19:46:06 -0600 Subject: [PATCH 1/6] adding daisyui --- client/src/App.tsx | 9 +- client/src/components/logbook/Logbook.tsx | 18 ++- .../components/logbookCard/LogbookCard.tsx | 23 ++- .../logbookDrawer/LogbookDrawer.tsx | 6 +- client/src/components/siteNav/SiteNav.tsx | 135 ++++++++++++------ client/src/components/trackMap/TrackMap.css | 53 ------- client/src/components/trackMap/TrackMap.tsx | 4 - client/src/index.html | 2 +- client/src/styles.css | 48 +++++-- package-lock.json | 18 +-- package.json | 1 + 11 files changed, 165 insertions(+), 152 deletions(-) delete mode 100644 client/src/components/trackMap/TrackMap.css 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/components/logbook/Logbook.tsx b/client/src/components/logbook/Logbook.tsx index 2d4fa83..c621c8f 100644 --- a/client/src/components/logbook/Logbook.tsx +++ b/client/src/components/logbook/Logbook.tsx @@ -503,14 +503,20 @@ const Logbook: React.FC = () => {
{userRole === UserRole.WRITE && - + + }
{!state.isLoading && state.alert && ( diff --git a/client/src/components/logbookCard/LogbookCard.tsx b/client/src/components/logbookCard/LogbookCard.tsx index ac6f3df..fd3316b 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"; @@ -11,11 +10,9 @@ const LogbookCard = ({ logs, mode, onDelete, onOpenCloseForm }: LogbookCardProps return (
- - -

{formattedDate}

-
- +
+

{formattedDate}

+
{mode === 'flights' && log.tracks && log.tracks.length > 0 &&
} - - +
+
Details
+
Aircraft Make and Model @@ -63,11 +61,10 @@ const LogbookCard = ({ logs, mode, onDelete, onOpenCloseForm }: LogbookCardProps }
- - - - - +
+
+
+
) })} diff --git a/client/src/components/logbookDrawer/LogbookDrawer.tsx b/client/src/components/logbookDrawer/LogbookDrawer.tsx index a4a61c6..c2a6f78 100644 --- a/client/src/components/logbookDrawer/LogbookDrawer.tsx +++ b/client/src/components/logbookDrawer/LogbookDrawer.tsx @@ -74,7 +74,7 @@ const LogbookDrawer = ({ onOpenClose }: LogbookDrawerProps) => { } return ( - @@ -83,13 +83,13 @@ const LogbookDrawer = ({ onOpenClose }: LogbookDrawerProps) => { 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 && (
{ }, [isUserLoggedIn]); return ( - - - - - - - - - {pages.length > 0 && pages.map((page, index) => { - return ( - - - {page.name} - - - ) - })} - - - {!isUserLoggedIn && - - } - {isUserLoggedIn && - - - - - - logout({redirectTo: 'specific url', url: '/'})} startContent={}> - Sign Out - - - - } - - +
+
+
+
+ +
+ +
+ daisyUI +
+
+ +
+
+ Button +
+
+ // + // + // + // + // + // + // + // + // {pages.length > 0 && pages.map((page, index) => { + // return ( + // + // + // {page.name} + // + // + // ) + // })} + // + // + // {!isUserLoggedIn && + // + // } + // {isUserLoggedIn && + // + // + // + // + // + // logout({redirectTo: 'specific url', url: '/'})} startContent={}> + // Sign Out + // + // + // + // } + // + // ); }; 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..66c598f 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' 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/styles.css b/client/src/styles.css index a81fa50..624f9bc 100644 --- a/client/src/styles.css +++ b/client/src/styles.css @@ -1,15 +1,41 @@ @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 "@tailwindcss/typography"; - -@theme inline { - --color-primary: #000000; +@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; } - - - - +body { + background-color: #f5f5f5; + min-height: 100vh; +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5c59a2d..4e92979 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", @@ -225,15 +226,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", @@ -10843,6 +10835,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", 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", -- 2.49.1 From 9a502df48dd5176af31052cc72eabc4bfa50d6df Mon Sep 17 00:00:00 2001 From: Noah Spannbauer Date: Sat, 6 Dec 2025 20:32:07 -0600 Subject: [PATCH 2/6] adding daisy ui --- client/src/components/logbook/Logbook.tsx | 215 ++++++++++-------- client/src/components/logbook/columns.tsx | 3 +- .../components/logbookCard/LogbookCard.tsx | 84 +++---- .../logbookDrawer/LogbookDrawer.tsx | 184 ++++++++------- client/src/components/pilots/Pilots.tsx | 119 +++++++--- client/src/components/siteNav/SiteNav.tsx | 55 ++++- client/src/styles.css | 3 +- client/src/tanstack.d.ts | 5 +- 8 files changed, 404 insertions(+), 264 deletions(-) diff --git a/client/src/components/logbook/Logbook.tsx b/client/src/components/logbook/Logbook.tsx index c621c8f..40156bb 100644 --- a/client/src/components/logbook/Logbook.tsx +++ b/client/src/components/logbook/Logbook.tsx @@ -69,13 +69,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 +93,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 +104,63 @@ 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 - - - - + + // + // + // + // + // + // + // 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 +190,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 +201,8 @@ const Logbook: React.FC = () => { id: 'landings', header: 'Landings', meta: { - headerAlign: 'center' + className: 'border-l border-base-300', + headerAlign: 'text-center' }, columns: [ { @@ -193,8 +211,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 +222,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 +232,8 @@ const Logbook: React.FC = () => { id: 'instrument', header: 'Instrument', meta: { - headerAlign: 'center' + className: 'border-l border-base-300', + headerAlign: 'text-center' }, columns: [ { @@ -222,8 +242,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 +255,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 +267,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 +277,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 +287,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 +297,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 +307,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 +320,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 +332,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 +344,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 +356,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 +368,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) : '' @@ -531,22 +554,22 @@ const Logbook: React.FC = () => {
)} {!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 ( ); })} @@ -587,7 +612,7 @@ const Logbook: React.FC = () => { })} - + {table.getFooterGroups().map((footerGroup, index) => { if (index === 0) { return ( @@ -597,14 +622,16 @@ const Logbook: React.FC = () => { ); })} diff --git a/client/src/components/logbook/columns.tsx b/client/src/components/logbook/columns.tsx index 37315ce..5d21d56 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: 'center', + className: 'border-l border-base-400' }, columns: [ { diff --git a/client/src/components/logbookCard/LogbookCard.tsx b/client/src/components/logbookCard/LogbookCard.tsx index fd3316b..e3d5f6e 100644 --- a/client/src/components/logbookCard/LogbookCard.tsx +++ b/client/src/components/logbookCard/LogbookCard.tsx @@ -1,5 +1,6 @@ import { LogbookCardProps } from "./LogbookCardProps.interface"; import TrackMap from "../trackMap/TrackMap"; +import { Button, Collapse, CollapseContent, CollapseTitle } from '@noahspan/noahspan-components' const LogbookCard = ({ logs, mode, onDelete, onOpenCloseForm }: LogbookCardProps) => { return ( @@ -9,10 +10,10 @@ const LogbookCard = ({ logs, mode, onDelete, onOpenCloseForm }: LogbookCardProps const formattedDate: string = `${date.getMonth()}/${date.getDate()}/${date.getFullYear()}`; return ( -
-
+
+

{formattedDate}

-
+
{mode === 'flights' && log.tracks && log.tracks.length > 0 &&
} -
-
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} -
- - } +
+
+ +
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 c2a6f78..2242c40 100644 --- a/client/src/components/logbookDrawer/LogbookDrawer.tsx +++ b/client/src/components/logbookDrawer/LogbookDrawer.tsx @@ -75,99 +75,117 @@ const LogbookDrawer = ({ onOpenClose }: LogbookDrawerProps) => { return (
- - - } - isOpen={logbookContext.state.isDrawerOpen} - onClose={onCancel} + // closeButton={ + // + // } + // 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 && ( -
- - logbookContext.dispatch({ type: 'SET_FORM_ALERT', payload: undefined }) - } - color={logbookContext.state.formAlert.severity} - title={logbookContext.state.formAlert.message} - /> -
- )} - - - - Time -
- } - > - - - {logbookContext.state.formMode !== FormMode.ADD && - {}} 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} + /> +
+ )} */} + + {/*
+ +
+ +
+ +
+ +
*/} + {/* */} + {/* - - Tracks + + Time
} > - + - } - - - {activeTab !== 'tracks' && - -
-
-
} - startContent={} - onPress={onCancel} > - {logbookContext.state.formMode.toString() !== FormMode.VIEW ? 'Cancel' : 'Close'} - - {logbookContext.state.formMode.toString() !== FormMode.VIEW && ( - - )} -
+ + + } */}
- - } - - - - + {activeTab !== 'tracks' && +
+
+
+ + {logbookContext.state.formMode.toString() !== FormMode.VIEW && ( + + )} +
+
+
+ } + + +
+
+
) } diff --git a/client/src/components/pilots/Pilots.tsx b/client/src/components/pilots/Pilots.tsx index 03bd22e..d731ab8 100644 --- a/client/src/components/pilots/Pilots.tsx +++ b/client/src/components/pilots/Pilots.tsx @@ -12,7 +12,9 @@ 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, HeaderContext, useReactTable } from '@tanstack/react-table'; +import { Pilot } from './Pilot.interface'; const Pilots: React.FC = () => { const [state, dispatch] = useReducer(reducer, initialState); @@ -27,6 +29,8 @@ const Pilots: React.FC = () => { `api/pilots` ); + console.log(response) + if (response.data.length > 0) { dispatch({ type: 'SET_PILOTS', payload: response.data }); @@ -115,14 +119,19 @@ 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' + } } ] @@ -174,6 +183,19 @@ const Pilots: React.FC = () => { } } + const textAlignment = { + center: 'text-center', + left: 'text-start', + right: 'text-end' + }; + + const table = useReactTable({ + data: state.pilots, + columns: columns, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel() + }); + useEffect(() => { if (!state.isFormOpen) { getPilots(); @@ -188,14 +210,14 @@ const Pilots: React.FC = () => {
{userRole === UserRole.WRITE && - + }
{!state.isLoading && state.alert && ( @@ -209,31 +231,62 @@ const Pilots: React.FC = () => { />
)} -
+
{state.pilots.length > 0 && screenSize !== ScreenSize.SM && -
{header.isPlaceholder ? null : ( -
+
{flexRender( header.column.columnDef.header, header.getContext() @@ -572,13 +595,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 c45a983..d2cd4a7 100644 --- a/client/src/components/siteNav/SiteNav.tsx +++ b/client/src/components/siteNav/SiteNav.tsx @@ -7,7 +7,7 @@ import { Avatar, Button, Link, Navbar, NavbarBrand, NavbarContent, NavbarItem, D 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 { NavLink, useLocation } from 'react-router-dom'; const SiteNav = () => { const [userPhoto, setUserPhoto] = useState(); @@ -58,8 +58,8 @@ const SiteNav = () => { try { const userProfile = await getUserProfile(); const userPhoto = await getUserPhoto(); - - setUserPhoto(userPhoto); + console.log(userPhoto) + // setUserPhoto(userPhoto); appContext.dispatch({ type: 'SET_USER_PROFILE', @@ -80,7 +80,7 @@ const SiteNav = () => { return (
-
+
@@ -99,11 +99,17 @@ const SiteNav = () => {
  • Item 3
  • - daisyUI + +
      -
    • Item 1
    • + {/*
    • Item 1
    • Parent @@ -113,11 +119,42 @@ const SiteNav = () => {
    -
  • Item 3
  • +
  • Item 3
  • */} + {pages.length > 0 && pages.map((page, index) => { + return ( +
  • {page.name}
  • + ) + })}
    -
    - Button +
    + {!isUserLoggedIn && + + } + {isUserLoggedIn && +
    +
    +
    + {userPhoto && +
    + +
    + } + {!userPhoto && +
    + NS +
    + } +
    +
    + +
    + }
    // diff --git a/client/src/styles.css b/client/src/styles.css index 624f9bc..2e37768 100644 --- a/client/src/styles.css +++ b/client/src/styles.css @@ -1,5 +1,5 @@ @import "tailwindcss"; -@plugin "@tailwindcss/typography"; +@plugin "daisyui"; @plugin "daisyui/theme" { name: "lofi"; default: true; @@ -34,6 +34,7 @@ --depth: 0; --noise: 0; } +@plugin "@tailwindcss/typography"; body { background-color: #f5f5f5; 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 */ -- 2.49.1 From 1bfc9522331c27859c28155971f01bcb5ed8166b Mon Sep 17 00:00:00 2001 From: Noah Spannbauer Date: Thu, 18 Dec 2025 21:39:37 -0600 Subject: [PATCH 3/6] switching to daisy ui --- api/package.json | 2 +- api/src/app.module.ts | 23 +- api/src/config/configuration.ts | 1 + api/src/log/log.controller.ts | 2 +- api/src/pilot/pilot.interceptor.ts | 2 + client/package.json | 2 - client/src/auth/oidcConfig.ts | 4 +- .../confirmationDialog/ConfirmationDialog.tsx | 45 +- client/src/components/flights/Flights.tsx | 18 +- client/src/components/logForm/LogForm.tsx | 435 +-- client/src/components/logbook/Logbook.tsx | 65 +- .../components/logbookCard/LogbookCard.tsx | 1 - .../logbookDrawer/LogbookDrawer.tsx | 88 +- client/src/components/pilotForm/PilotForm.tsx | 488 ++- client/src/components/pilots/Pilots.tsx | 80 +- client/src/components/siteNav/SiteNav.tsx | 12 +- .../src/components/tracksForm/TracksForm.tsx | 20 +- client/src/httpClient/httpClient.ts | 2 +- client/src/interfaces/Alert.interface.ts | 2 +- client/src/vite-env.d.ts | 1 + database/flying.db | Bin 61440 -> 61440 bytes infrastructure/container_app.tf | 20 + infrastructure/variables.tf | 11 + package-lock.json | 3060 +---------------- 24 files changed, 497 insertions(+), 3887 deletions(-) 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/pilot/pilot.interceptor.ts b/api/src/pilot/pilot.interceptor.ts index 1e9cb5c..e742aad 100644 --- a/api/src/pilot/pilot.interceptor.ts +++ b/api/src/pilot/pilot.interceptor.ts @@ -29,7 +29,9 @@ export class PilotInterceptor implements NestInterceptor { if (req.headers.authorization) { const authHeader = req.headers.authorization; const token = authHeader && authHeader.split(' ')[1]; + const jwtPayload = jwtDecode(token); + console.log(jwtPayload) const rolesKeyName = Object.keys(jwtPayload).find((key) => key.includes('roles')); if (jwtPayload[rolesKeyName].includes('Flying.Read')) { 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/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/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..2cd3093 100644 --- a/client/src/components/logForm/LogForm.tsx +++ b/client/src/components/logForm/LogForm.tsx @@ -1,5 +1,4 @@ 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 { LogFormProps } from './LogFormProps.interface'; import { initialState, reducer } from './reducer'; @@ -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]); @@ -75,23 +73,21 @@ const LogForm = () => { control={control} render={({ field: { value } }) => { return ( - + ); }} /> @@ -104,21 +100,26 @@ const LogForm = () => { name="date" control={control} render={({ field: { onChange, value } }) => { - const parsedAbsoluteDate = value ? parseAbsolute(value, getLocalTimeZone()) : value - return( - { - let date = selectedDate as CalendarDate; + + // { + // let date = selectedDate as CalendarDate; - setValue('date', date.toDate(getLocalTimeZone()).toISOString()) - }} - size='lg' - value={parsedAbsoluteDate ? new CalendarDate(parsedAbsoluteDate.year, parsedAbsoluteDate.month, parsedAbsoluteDate.day) : value} - /> + // setValue('date', date.toDate(getLocalTimeZone()).toISOString()) + // }} + // size='lg' + // value={parsedAbsoluteDate ? new CalendarDate(parsedAbsoluteDate.year, parsedAbsoluteDate.month, parsedAbsoluteDate.day) : value} + // /> ) }} /> @@ -131,18 +132,11 @@ const LogForm = () => { name="aircraftMakeModel" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -158,18 +152,11 @@ const LogForm = () => { name="aircraftIdentity" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -185,18 +172,11 @@ const LogForm = () => { name="routeFrom" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -210,18 +190,11 @@ const LogForm = () => { name="routeTo" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -235,21 +208,11 @@ const LogForm = () => { name="durationOfFlight" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -265,21 +228,11 @@ const LogForm = () => { name="singleEngineLand" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -293,20 +246,11 @@ const LogForm = () => { name="simulatorAtd" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -323,22 +267,11 @@ const LogForm = () => { name="landingsDay" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -352,22 +285,11 @@ const LogForm = () => { name="landingsNight" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -386,24 +308,12 @@ const LogForm = () => { name="groundTrainingReceived" control={control} render={({ field: { onChange, value } }) => ( - )} /> @@ -418,22 +328,11 @@ const LogForm = () => { name="flightTrainingReceived" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -447,22 +346,11 @@ const LogForm = () => { name="crossCountry" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -476,22 +364,11 @@ const LogForm = () => { name="night" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -505,22 +382,11 @@ const LogForm = () => { name="solo" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -534,22 +400,11 @@ const LogForm = () => { name="pilotInCommand" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -566,22 +421,11 @@ const LogForm = () => { name="instrumentActual" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -595,22 +439,11 @@ const LogForm = () => { name="instrumentSimulated" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -626,22 +459,11 @@ const LogForm = () => { name="instrumentApproaches" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -655,22 +477,11 @@ const LogForm = () => { name="instrumentHolds" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -684,23 +495,11 @@ const LogForm = () => { name="instrumentNavTrack" control={control} render={({ field: { onChange, value } }) => ( - )} @@ -716,19 +515,11 @@ const LogForm = () => { name="notes" control={control} render={({ field: { onChange, value } }) => ( - )} />
    diff --git a/client/src/components/logbook/Logbook.tsx b/client/src/components/logbook/Logbook.tsx index 40156bb..380f043 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; @@ -124,43 +121,9 @@ const Logbook: React.FC = () => {
    - // - // - // - // - // - // - // 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 - // - // - // - // ) } } @@ -395,14 +358,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 }); @@ -460,7 +423,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 }); @@ -545,12 +508,14 @@ const Logbook: React.FC = () => { {!state.isLoading && state.alert && (
    dispatch({ type: 'SET_ALERT', payload: undefined }) } - color={'default'} - title={state.alert.message} - /> + severity={'info'} + > + {state.alert.message} +
    )} {!state.isLoading && ( @@ -674,14 +639,6 @@ const Logbook: React.FC = () => { title="Confirm Delete" /> )} - {/* {state.isTracksOpen && - onOpenCloseTracks(mode)} - selectedLogId={logbookContext.state.selectedLogId} - /> - } */} ); }; diff --git a/client/src/components/logbookCard/LogbookCard.tsx b/client/src/components/logbookCard/LogbookCard.tsx index e3d5f6e..98843d3 100644 --- a/client/src/components/logbookCard/LogbookCard.tsx +++ b/client/src/components/logbookCard/LogbookCard.tsx @@ -1,6 +1,5 @@ import { LogbookCardProps } from "./LogbookCardProps.interface"; import TrackMap from "../trackMap/TrackMap"; -import { Button, Collapse, CollapseContent, CollapseTitle } from '@noahspan/noahspan-components' const LogbookCard = ({ logs, mode, onDelete, onOpenCloseForm }: LogbookCardProps) => { return ( diff --git a/client/src/components/logbookDrawer/LogbookDrawer.tsx b/client/src/components/logbookDrawer/LogbookDrawer.tsx index 2242c40..d4ebe1f 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"; @@ -12,7 +12,7 @@ import { useLogbookContext } from "../../hooks/logbookContext/UseLogbookContext" import { Key, useState } from "react"; const LogbookDrawer = ({ onOpenClose }: LogbookDrawerProps) => { - const [activeTab, setActiveTab] = useState('time'); + const [activeTab, setActiveTab] = useState('time'); const defaultValues = { pilotId: '', date: null, @@ -63,14 +63,14 @@ 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 ( @@ -90,66 +90,44 @@ const LogbookDrawer = ({ onOpenClose }: LogbookDrawerProps) => { aria-label='close-sidebar' className='drawer-overlay' > -
    +

    {`${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} - /> -
    - )} */} - - {/*
    + {logbookContext.state.formAlert && ( + + logbookContext.dispatch({ type: 'SET_FORM_ALERT', payload: undefined }) + } + severity={logbookContext.state.formAlert.severity} + > + {logbookContext.state.formAlert.message} + + )} +
    -
    +
    - -
    - -
    */} - {/* */} - {/* - - Time -
    - } - > - - {logbookContext.state.formMode !== FormMode.ADD && - - - Tracks -
    - } - > - - - } */} + <> + +
    + +
    + + }
    {activeTab !== 'tracks' &&
    @@ -169,7 +147,7 @@ const LogbookDrawer = ({ onOpenClose }: LogbookDrawerProps) => { {logbookContext.state.formMode.toString() !== FormMode.VIEW && ( - } - 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 d731ab8..b61a48b 100644 --- a/client/src/components/pilots/Pilots.tsx +++ b/client/src/components/pilots/Pilots.tsx @@ -10,11 +10,11 @@ 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 { CellContext, ColumnDef, flexRender, getCoreRowModel, getPaginationRowModel, HeaderContext, useReactTable } from '@tanstack/react-table'; +import { CellContext, ColumnDef, flexRender, getCoreRowModel, getPaginationRowModel, useReactTable } from '@tanstack/react-table'; import { Pilot } from './Pilot.interface'; +import Alert from '../alert/Alert'; const Pilots: React.FC = () => { const [state, dispatch] = useReducer(reducer, initialState); @@ -38,7 +38,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) { @@ -46,7 +46,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 }) @@ -105,7 +105,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 }); @@ -131,58 +131,22 @@ const Pilots: React.FC = () => { meta: { align: 'text-center', headerAlign: 'text-center' + }, + cell: (info: CellContext) => { + return ( + + ) } } ] - const renderCell = (pilot: any, columnKey: any) => { - const cellValue = pilot[columnKey] - - 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 textAlignment = { center: 'text-center', left: 'text-start', @@ -223,12 +187,14 @@ const Pilots: React.FC = () => { {!state.isLoading && state.alert && (
    - dispatch({ type: 'SET_ALERT', payload: undefined }) + dispatch({ type: 'SET_FORM_ALERT', payload: undefined }) } - color={state.alert.severity} - title={state.alert.message} - /> + severity={state.alert.severity} + > + {state.alert.message} +
    )}
    diff --git a/client/src/components/siteNav/SiteNav.tsx b/client/src/components/siteNav/SiteNav.tsx index d2cd4a7..34f3e6c 100644 --- a/client/src/components/siteNav/SiteNav.tsx +++ b/client/src/components/siteNav/SiteNav.tsx @@ -3,7 +3,6 @@ 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' @@ -13,7 +12,6 @@ const SiteNav = () => { const [userPhoto, setUserPhoto] = useState(); const appContext = useAppContext(); const { isUserLoggedIn, logout, login } = useOidc() - const { pathname } = useLocation() const pages = [ { name: 'Flights', @@ -57,8 +55,8 @@ const SiteNav = () => { const setUserProfile = async () => { try { const userProfile = await getUserProfile(); - const userPhoto = await getUserPhoto(); - console.log(userPhoto) + // const userPhoto = await getUserPhoto(); + // setUserPhoto(userPhoto); appContext.dispatch({ @@ -81,7 +79,7 @@ const SiteNav = () => { return (
    -
    + {/*
    @@ -98,7 +96,7 @@ const SiteNav = () => {
  • Item 3
  • -
    +
    */} { />
    -
    +
      {/*
    • Item 1
    • diff --git a/client/src/components/tracksForm/TracksForm.tsx b/client/src/components/tracksForm/TracksForm.tsx index ac1b514..d52d2af 100644 --- a/client/src/components/tracksForm/TracksForm.tsx +++ b/client/src/components/tracksForm/TracksForm.tsx @@ -7,7 +7,6 @@ import ConfirmationDialog from "../confirmationDialog/ConfirmationDialog"; import { initialState, reducer } from "./reducer"; import TrackMap from "../trackMap/TrackMap"; import httpClient from "../../httpClient/httpClient"; -import { Button, Input, Spinner } from '@heroui/react'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faUpload, faTrash, faXmark } from '@fortawesome/free-solid-svg-icons'; import { useLogbookContext } from "../../hooks/logbookContext/UseLogbookContext"; @@ -28,7 +27,7 @@ const TracksForm = () => { } 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 }}) } } @@ -120,25 +119,22 @@ const TracksForm = () => { return ( <>
      - +
      - +
      ) })}
      - + +
      {state.isConfirmDialogOpen && ( { if (oidc.isUserLoggedIn) { const { accessToken } = await oidc.getTokens(); - + console.log(accessToken) config.headers.Authorization = `Bearer ${accessToken}`; } 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/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 dd824fd2ed9d80626050264b5fa8f5cc56471aef..7efd5187e49d5000d95ed55539df047256856010 100644 GIT binary patch delta 417 zcma*iPfEi;9ERci0d0lM=tdD05h_*iCzHuEGg%gK6=_$&jglsl1flT^X?udo>?^2C zp@Fq@XACVgSUReLejt#$&9WXcO6qgJH)5ra`;$U>N{@1 zI5cal88M$}k4W%~j05wi1VJ>$IZwFj1+w6|#!4rwwSP!0;){lb=LTNjxz2mV_h)uw zu2W{U?WnoVs$&?2iAw{Q=vPntATqSJBIo?*c&~lxNH_1eJR{)NwTyWTf-Dz6Y2jr7 krAd-;^eh9DRjZmkw_c`$Kb;G1$p8QV delta 204 zcmZp8z})bFd4e<}=R_H2M$U~1OZ?dw`Slt2^*0L&sPgMJ`Z2PFHt}+X8ki(mrY0qu z=^9w1Bruf8t>^B=IG<;5^rQ+WNKh( zV6K;)n=^TToXVsG77j-K8w^0i1~mT+zmYm~C?_#S^D;0nF!JXx@aF*aCGk(rsh=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", @@ -2533,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", @@ -4025,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", @@ -5715,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", @@ -5960,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", @@ -6658,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", @@ -7655,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", @@ -8224,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", @@ -8252,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", @@ -10500,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", @@ -10526,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", @@ -10556,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", @@ -10626,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", @@ -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", -- 2.49.1 From 9c68a54a5d0aa78ae573efaeda82e83452103f9a Mon Sep 17 00:00:00 2001 From: Noah Spannbauer Date: Thu, 18 Dec 2025 21:49:53 -0600 Subject: [PATCH 4/6] switching to daisy ui --- .../logForm/LogFormState.interface.ts | 1 - client/src/components/logForm/reducer.tsx | 1 - client/src/components/logbook/columns.tsx | 68 +++++++++---------- client/src/hero.ts | 3 - 4 files changed, 34 insertions(+), 39 deletions(-) delete mode 100644 client/src/hero.ts diff --git a/client/src/components/logForm/LogFormState.interface.ts b/client/src/components/logForm/LogFormState.interface.ts index 6f14e09..8a9f95f 100644 --- a/client/src/components/logForm/LogFormState.interface.ts +++ b/client/src/components/logForm/LogFormState.interface.ts @@ -1,4 +1,3 @@ -import { Selection } from "@heroui/react"; import { Alert } from "../../interfaces/Alert.interface"; export interface LogFormState { diff --git a/client/src/components/logForm/reducer.tsx b/client/src/components/logForm/reducer.tsx index 6b3143a..84f6714 100644 --- a/client/src/components/logForm/reducer.tsx +++ b/client/src/components/logForm/reducer.tsx @@ -1,6 +1,5 @@ import { Alert } from '../../interfaces/Alert.interface'; import { LogFormState } from './LogFormState.interface'; -import { Selection } from '@heroui/react'; type Action = | { type: 'SET_ALERT'; payload: Alert | undefined } diff --git a/client/src/components/logbook/columns.tsx b/client/src/components/logbook/columns.tsx index 5d21d56..34fb854 100644 --- a/client/src/components/logbook/columns.tsx +++ b/client/src/components/logbook/columns.tsx @@ -48,7 +48,7 @@ const route: ColumnDef = { id: 'route', header: 'Route of Flight', meta: { - headerAlign: 'center', + headerAlign: 'text-center', className: 'border-l border-base-400' }, columns: [ @@ -69,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) : '', @@ -107,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) : '', @@ -118,7 +118,7 @@ export const authColumns: ColumnDef[] = [ id: 'landings', header: 'Landings', meta: { - headerAlign: 'center' + headerAlign: 'text-center' }, columns: [ { @@ -127,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' } }, { @@ -137,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' } } ] @@ -147,7 +147,7 @@ export const authColumns: ColumnDef[] = [ id: 'instrument', header: 'Instrument', meta: { - headerAlign: 'center' + headerAlign: 'text-center' }, columns: [ { @@ -156,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) : '', @@ -168,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) : '' @@ -180,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' } }, { @@ -190,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' } }, { @@ -200,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' } } ] @@ -210,7 +210,7 @@ export const authColumns: ColumnDef[] = [ id: 'experienceTraining', header: 'Type of pilot experience or training', meta: { - headerAlign: 'center' + headerAlign: 'text-center' }, columns: [ { @@ -219,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) : '' @@ -231,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) : '' @@ -243,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) : '' @@ -255,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) : '' @@ -267,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) : '' @@ -279,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/hero.ts b/client/src/hero.ts deleted file mode 100644 index 6dbf071..0000000 --- a/client/src/hero.ts +++ /dev/null @@ -1,3 +0,0 @@ -// hero.ts -import { heroui } from "@heroui/react"; -export default heroui(); \ No newline at end of file -- 2.49.1 From d0c4fed31b870f39de150a9fe71b55020be7f568 Mon Sep 17 00:00:00 2001 From: Noah Spannbauer Date: Mon, 29 Dec 2025 18:57:44 -0600 Subject: [PATCH 5/6] adding daisy ui --- .DS_Store | Bin 8196 -> 8196 bytes api/src/main.ts | 6 +- api/src/pilot/pilot.interceptor.ts | 1 - client/src/components/alert/Alert.tsx | 44 ++++++ .../components/alert/AlertProps.interface.ts | 7 + client/src/components/logForm/LogForm.tsx | 24 +-- client/src/components/logbook/Logbook.tsx | 8 +- .../logbookDrawer/LogbookDrawer.tsx | 2 +- client/src/components/pilots/Pilots.tsx | 12 +- client/src/components/siteNav/SiteNav.tsx | 146 +++++++----------- client/src/components/trackMap/TrackMap.tsx | 2 +- .../src/components/tracksForm/TracksForm.tsx | 25 ++- client/src/enums/screenSize.ts | 10 +- .../hooks/useBreakpoints/UseBreakpoints.tsx | 6 +- 14 files changed, 150 insertions(+), 143 deletions(-) create mode 100644 client/src/components/alert/Alert.tsx create mode 100644 client/src/components/alert/AlertProps.interface.ts diff --git a/.DS_Store b/.DS_Store index e390b1b19b2950dcbc7511ef19c2f5a10c78992f..dc31f0fdc9adfe7fd62c2ebce32c7ac6db786edb 100644 GIT binary patch delta 59 zcmZp1XmOa}&nUbxU^hRb@Ma!?5++eLhGd2uhD?T3hCGInw3OoHr2PDx%{4-dOq=J+ Pq%u!z;MvSB@s}L{_{kBI delta 34 qcmZp1XmOa}&nUDpU^hRb&}JTi5~j^Fh5j;buI1@s-pnrXmmL7fISZKp 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 e742aad..8739095 100644 --- a/api/src/pilot/pilot.interceptor.ts +++ b/api/src/pilot/pilot.interceptor.ts @@ -31,7 +31,6 @@ export class PilotInterceptor implements NestInterceptor { const token = authHeader && authHeader.split(' ')[1]; const jwtPayload = jwtDecode(token); - console.log(jwtPayload) const rolesKeyName = Object.keys(jwtPayload).find((key) => key.includes('roles')); if (jwtPayload[rolesKeyName].includes('Flying.Read')) { 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/logForm/LogForm.tsx b/client/src/components/logForm/LogForm.tsx index 2cd3093..1ab9f18 100644 --- a/client/src/components/logForm/LogForm.tsx +++ b/client/src/components/logForm/LogForm.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useReducer } from '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'; @@ -71,15 +71,13 @@ const LogForm = () => { { + render={({ field: { onChange, value } }) => { 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; -- 2.49.1 From 835958b0c92a56029c97281c40c47755e3dc5913 Mon Sep 17 00:00:00 2001 From: Noah Spannbauer Date: Mon, 29 Dec 2025 19:41:55 -0600 Subject: [PATCH 6/6] adding daisy ui --- .../logForm/LogFormState.interface.ts | 3 --- client/src/components/logForm/reducer.tsx | 24 ------------------- client/src/components/pilots/Pilots.tsx | 2 +- 3 files changed, 1 insertion(+), 28 deletions(-) diff --git a/client/src/components/logForm/LogFormState.interface.ts b/client/src/components/logForm/LogFormState.interface.ts index 8a9f95f..449ccdc 100644 --- a/client/src/components/logForm/LogFormState.interface.ts +++ b/client/src/components/logForm/LogFormState.interface.ts @@ -2,11 +2,8 @@ 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 84f6714..277d03f 100644 --- a/client/src/components/logForm/reducer.tsx +++ b/client/src/components/logForm/reducer.tsx @@ -3,21 +3,15 @@ import { LogFormState } from './LogFormState.interface'; 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: '' }; @@ -33,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/pilots/Pilots.tsx b/client/src/components/pilots/Pilots.tsx index 2d51465..9326dbb 100644 --- a/client/src/components/pilots/Pilots.tsx +++ b/client/src/components/pilots/Pilots.tsx @@ -195,7 +195,7 @@ const Pilots: React.FC = () => { - dispatch({ type: 'SET_FORM_ALERT', payload: undefined }) + dispatch({ type: 'SET_ALERT', payload: undefined }) } severity={state.alert.severity} > -- 2.49.1