From 0956647dbc4739d397f2aa52cccbf5a6e7e36c56 Mon Sep 17 00:00:00 2001 From: Juan Date: Thu, 23 Apr 2026 15:01:05 -0500 Subject: [PATCH] feat: new ui with greyhaven design system --- .gitignore | 4 + CLAUDE.md | 48 + Caddyfile.selfhosted.example | 3 + docker-compose.selfhosted.yml | 17 + docker-compose.yml | 20 +- public/fonts/Aspekta-100.woff2 | Bin 0 -> 21116 bytes public/fonts/Aspekta-1000.woff2 | Bin 0 -> 23096 bytes public/fonts/Aspekta-150.woff2 | Bin 0 -> 21596 bytes public/fonts/Aspekta-200.woff2 | Bin 0 -> 21884 bytes public/fonts/Aspekta-250.woff2 | Bin 0 -> 22024 bytes public/fonts/Aspekta-300.woff2 | Bin 0 -> 22600 bytes public/fonts/Aspekta-350.woff2 | Bin 0 -> 21956 bytes public/fonts/Aspekta-400.woff2 | Bin 0 -> 21748 bytes public/fonts/Aspekta-450.woff2 | Bin 0 -> 22240 bytes public/fonts/Aspekta-50.woff2 | Bin 0 -> 21396 bytes public/fonts/Aspekta-500.woff2 | Bin 0 -> 22124 bytes public/fonts/Aspekta-550.woff2 | Bin 0 -> 22016 bytes public/fonts/Aspekta-600.woff2 | Bin 0 -> 22140 bytes public/fonts/Aspekta-650.woff2 | Bin 0 -> 21980 bytes public/fonts/Aspekta-700.woff2 | Bin 0 -> 22168 bytes public/fonts/Aspekta-750.woff2 | Bin 0 -> 22420 bytes public/fonts/Aspekta-800.woff2 | Bin 0 -> 22608 bytes public/fonts/Aspekta-850.woff2 | Bin 0 -> 22756 bytes public/fonts/Aspekta-900.woff2 | Bin 0 -> 22596 bytes public/fonts/Aspekta-950.woff2 | Bin 0 -> 22860 bytes public/fonts/font-face.css | 161 + scripts/setup-selfhosted.sh | 37 +- server/reflector/db/search.py | 11 + server/reflector/db/transcripts.py | 9 + server/reflector/views/transcripts.py | 1 + server/reflector/views/zulip.py | 24 +- ui/.dockerignore | 6 + ui/.env.example | 10 + ui/.gitignore | 24 + ui/Dockerfile | 23 + ui/README.md | 87 + ui/eslint.config.js | 23 + ui/index.html | 22 + ui/nginx.conf | 27 + ui/package.json | 62 + ui/pnpm-lock.yaml | 3536 +++++++++ ui/public/apple-touch-icon.png | Bin 0 -> 4979 bytes ui/public/favicon-16x16.png | Bin 0 -> 678 bytes ui/public/favicon-32x32.png | Bin 0 -> 1030 bytes ui/public/favicon.ico | Bin 0 -> 15086 bytes ui/public/icons.svg | 24 + ui/scripts/debug-root.sh | 47 + ui/scripts/debug-v2.sh | 63 + ui/src/App.tsx | 74 + ui/src/api/client.ts | 32 + ui/src/api/queryClient.ts | 15 + ui/src/api/schema.d.ts | 4556 +++++++++++ ui/src/auth/AuthContext.tsx | 28 + ui/src/auth/AuthProvider.tsx | 129 + ui/src/auth/RequireAuth.tsx | 30 + ui/src/auth/oidcConfig.ts | 27 + ui/src/components/browse/ConfirmDialog.tsx | 130 + ui/src/components/browse/FilterBar.tsx | 127 + ui/src/components/browse/Pagination.tsx | 74 + ui/src/components/browse/TranscriptRow.tsx | 308 + ui/src/components/browse/TrashRow.tsx | 101 + ui/src/components/home/LanguagePair.tsx | 97 + ui/src/components/home/RoomPicker.tsx | 33 + ui/src/components/icons.tsx | 162 + ui/src/components/layout/AppShell.tsx | 37 + ui/src/components/layout/AppSidebar.tsx | 331 + ui/src/components/layout/ReflectorMark.tsx | 22 + ui/src/components/layout/RoomsSidebar.tsx | 313 + ui/src/components/layout/TopBar.tsx | 99 + ui/src/components/layout/sidebarChrome.tsx | 330 + ui/src/components/rooms/DeleteRoomDialog.tsx | 111 + ui/src/components/rooms/RoomFormDialog.tsx | 834 ++ ui/src/components/rooms/RoomsTable.tsx | 344 + .../components/shared/NewTranscriptDialog.tsx | 237 + ui/src/components/transcript/AudioPlayer.tsx | 219 + ui/src/components/transcript/Banners.tsx | 51 + .../components/transcript/MetadataStrip.tsx | 99 + ui/src/components/transcript/ShareDialog.tsx | 520 ++ .../transcript/StatusPlaceholder.tsx | 137 + ui/src/components/transcript/SummaryPanel.tsx | 146 + ui/src/components/transcript/TopicsList.tsx | 277 + .../transcript/TranscriptHeader.tsx | 206 + ui/src/components/transcript/VideoPanel.tsx | 164 + .../components/transcript/WaveformCanvas.tsx | 125 + ui/src/components/ui/Combobox.tsx | 195 + ui/src/components/ui/primitives.tsx | 588 ++ ui/src/hooks/useRooms.ts | 42 + ui/src/hooks/useTranscript.ts | 235 + ui/src/hooks/useTranscriptWs.ts | 217 + ui/src/hooks/useTranscripts.ts | 174 + ui/src/lib/apiErrors.ts | 16 + ui/src/lib/env.ts | 7 + ui/src/lib/format.ts | 25 + ui/src/lib/markdown.tsx | 195 + ui/src/lib/transcriptMarkdown.ts | 77 + ui/src/lib/types.ts | 80 + ui/src/lib/utils.ts | 6 + ui/src/main.tsx | 10 + ui/src/pages/AuthCallback.tsx | 26 + ui/src/pages/BrowsePage.tsx | 321 + ui/src/pages/HomePage.tsx | 178 + ui/src/pages/LoggedOut.tsx | 325 + ui/src/pages/LoginForm.tsx | 133 + ui/src/pages/RoomsPage.tsx | 406 + ui/src/pages/TranscriptPage.tsx | 450 ++ ui/src/styles/fonts/Aspekta-300.woff2 | Bin 0 -> 22600 bytes ui/src/styles/fonts/Aspekta-400.woff2 | Bin 0 -> 21748 bytes ui/src/styles/fonts/Aspekta-500.woff2 | Bin 0 -> 22124 bytes ui/src/styles/fonts/Aspekta-600.woff2 | Bin 0 -> 22140 bytes ui/src/styles/fonts/Aspekta-700.woff2 | Bin 0 -> 22168 bytes ui/src/styles/fonts/Aspekta-800.woff2 | Bin 0 -> 22608 bytes ui/src/styles/greyhaven.css | 227 + ui/src/styles/index.css | 113 + ui/src/styles/reflector-forms.css | 53 + ui/tsconfig.app.json | 30 + ui/tsconfig.json | 7 + ui/tsconfig.node.json | 24 + ui/vite.config.ts | 24 + www/appv2/.env.example | 30 - www/appv2/README.md | 20 - www/appv2/dist/assets/index-BSIeQkMT.js | 282 - www/appv2/dist/assets/index-DT0hy75l.css | 1 - www/appv2/dist/index.html | 14 - www/appv2/index.html | 13 - www/appv2/metadata.json | 5 - www/appv2/package-lock.json | 6888 ----------------- www/appv2/package.json | 59 - www/appv2/postcss.config.js | 6 - www/appv2/server/auth.ts | 28 - www/appv2/server/index.ts | 354 - www/appv2/src/App.tsx | 138 - www/appv2/src/api/_error.ts | 26 - .../src/components/WherebyWebinarEmbed.tsx | 84 - www/appv2/src/components/layout/Footer.tsx | 16 - www/appv2/src/components/layout/TopNav.tsx | 123 - .../src/components/rooms/AddRoomModal.tsx | 462 -- www/appv2/src/components/rooms/DailyRoom.tsx | 284 - .../components/rooms/MeetingMinimalHeader.tsx | 75 - .../src/components/rooms/MeetingSelection.tsx | 363 - .../src/components/rooms/WherebyRoom.tsx | 127 - .../components/transcripts/ProcessingView.tsx | 28 - .../src/components/transcripts/RecordView.tsx | 255 - .../src/components/transcripts/UploadView.tsx | 134 - .../correction/CorrectionEditor.tsx | 139 - .../correction/ParticipantSidebar.tsx | 331 - .../correction/TopicWordsEditor.tsx | 170 - .../transcripts/correction/types.ts | 21 - www/appv2/src/components/ui/Button.tsx | 29 - www/appv2/src/components/ui/Card.tsx | 19 - www/appv2/src/components/ui/Checkbox.tsx | 25 - www/appv2/src/components/ui/ConfirmModal.tsx | 96 - www/appv2/src/components/ui/FieldError.tsx | 15 - www/appv2/src/components/ui/Input.tsx | 17 - www/appv2/src/components/ui/Select.tsx | 19 - .../src/hooks/rooms/useRoomDefaultMeeting.ts | 88 - www/appv2/src/hooks/transcripts/useWebRTC.ts | 85 - .../src/hooks/transcripts/useWebSockets.ts | 173 - .../hooks/transcripts/webSocketReconnect.ts | 5 - .../src/hooks/transcripts/webSocketTypes.ts | 24 - www/appv2/src/hooks/useAudioDevice.ts | 134 - www/appv2/src/lib/AuthProvider.tsx | 271 - www/appv2/src/lib/UserEventsProvider.tsx | 186 - www/appv2/src/lib/apiClient.ts | 94 - www/appv2/src/lib/apiHooks.ts | 967 --- www/appv2/src/lib/array.ts | 12 - www/appv2/src/lib/consent/ConsentDialog.tsx | 45 - .../src/lib/consent/ConsentDialogButton.tsx | 27 - .../src/lib/consent/RecordingIndicator.tsx | 15 - www/appv2/src/lib/consent/constants.ts | 12 - www/appv2/src/lib/consent/index.ts | 7 - www/appv2/src/lib/consent/types.ts | 14 - .../src/lib/consent/useConsentDialog.tsx | 82 - www/appv2/src/lib/consent/utils.ts | 10 - www/appv2/src/lib/errorContext.tsx | 91 - www/appv2/src/lib/errorUtils.ts | 49 - www/appv2/src/lib/features.ts | 44 - www/appv2/src/lib/queryClient.ts | 15 - www/appv2/src/lib/recordingConsentContext.tsx | 153 - www/appv2/src/lib/reflector-api.d.ts | 4421 ----------- www/appv2/src/lib/sentry.ts | 20 - www/appv2/src/lib/supportedLanguages.ts | 492 -- www/appv2/src/lib/timeUtils.ts | 25 - www/appv2/src/lib/types.ts | 13 - www/appv2/src/lib/utils.ts | 185 - www/appv2/src/lib/wherebyClient.ts | 26 - www/appv2/src/main.tsx | 16 - www/appv2/src/pages/AboutPage.tsx | 55 - www/appv2/src/pages/LoginPage.tsx | 223 - www/appv2/src/pages/PrivacyPage.tsx | 44 - www/appv2/src/pages/RoomMeetingPage.tsx | 145 - www/appv2/src/pages/RoomsPage.tsx | 351 - www/appv2/src/pages/SettingsPage.tsx | 258 - .../src/pages/SingleTranscriptionPage.tsx | 554 -- www/appv2/src/pages/TranscriptionsPage.tsx | 376 - www/appv2/src/pages/WebinarLandingPage.tsx | 273 - www/appv2/src/pages/WelcomePage.tsx | 252 - www/appv2/src/stores/useAuthStore.ts | 28 - www/appv2/src/stores/usePlayerStore.ts | 19 - www/appv2/src/styles/global.css | 15 - www/appv2/src/styles/tokens.css | 23 - www/appv2/src/types/index.ts | 5 - www/appv2/src/vite-env.d.ts | 19 - www/appv2/tailwind.config.js | 38 - www/appv2/tsconfig.json | 26 - www/appv2/vite.config.ts | 38 - www/appv2/yarn.lock | 3444 --------- 206 files changed, 18978 insertions(+), 24703 deletions(-) create mode 100644 public/fonts/Aspekta-100.woff2 create mode 100644 public/fonts/Aspekta-1000.woff2 create mode 100644 public/fonts/Aspekta-150.woff2 create mode 100644 public/fonts/Aspekta-200.woff2 create mode 100644 public/fonts/Aspekta-250.woff2 create mode 100644 public/fonts/Aspekta-300.woff2 create mode 100644 public/fonts/Aspekta-350.woff2 create mode 100644 public/fonts/Aspekta-400.woff2 create mode 100644 public/fonts/Aspekta-450.woff2 create mode 100644 public/fonts/Aspekta-50.woff2 create mode 100644 public/fonts/Aspekta-500.woff2 create mode 100644 public/fonts/Aspekta-550.woff2 create mode 100644 public/fonts/Aspekta-600.woff2 create mode 100644 public/fonts/Aspekta-650.woff2 create mode 100644 public/fonts/Aspekta-700.woff2 create mode 100644 public/fonts/Aspekta-750.woff2 create mode 100644 public/fonts/Aspekta-800.woff2 create mode 100644 public/fonts/Aspekta-850.woff2 create mode 100644 public/fonts/Aspekta-900.woff2 create mode 100644 public/fonts/Aspekta-950.woff2 create mode 100644 public/fonts/font-face.css create mode 100644 ui/.dockerignore create mode 100644 ui/.env.example create mode 100644 ui/.gitignore create mode 100644 ui/Dockerfile create mode 100644 ui/README.md create mode 100644 ui/eslint.config.js create mode 100644 ui/index.html create mode 100644 ui/nginx.conf create mode 100644 ui/package.json create mode 100644 ui/pnpm-lock.yaml create mode 100644 ui/public/apple-touch-icon.png create mode 100644 ui/public/favicon-16x16.png create mode 100644 ui/public/favicon-32x32.png create mode 100644 ui/public/favicon.ico create mode 100644 ui/public/icons.svg create mode 100755 ui/scripts/debug-root.sh create mode 100755 ui/scripts/debug-v2.sh create mode 100644 ui/src/App.tsx create mode 100644 ui/src/api/client.ts create mode 100644 ui/src/api/queryClient.ts create mode 100644 ui/src/api/schema.d.ts create mode 100644 ui/src/auth/AuthContext.tsx create mode 100644 ui/src/auth/AuthProvider.tsx create mode 100644 ui/src/auth/RequireAuth.tsx create mode 100644 ui/src/auth/oidcConfig.ts create mode 100644 ui/src/components/browse/ConfirmDialog.tsx create mode 100644 ui/src/components/browse/FilterBar.tsx create mode 100644 ui/src/components/browse/Pagination.tsx create mode 100644 ui/src/components/browse/TranscriptRow.tsx create mode 100644 ui/src/components/browse/TrashRow.tsx create mode 100644 ui/src/components/home/LanguagePair.tsx create mode 100644 ui/src/components/home/RoomPicker.tsx create mode 100644 ui/src/components/icons.tsx create mode 100644 ui/src/components/layout/AppShell.tsx create mode 100644 ui/src/components/layout/AppSidebar.tsx create mode 100644 ui/src/components/layout/ReflectorMark.tsx create mode 100644 ui/src/components/layout/RoomsSidebar.tsx create mode 100644 ui/src/components/layout/TopBar.tsx create mode 100644 ui/src/components/layout/sidebarChrome.tsx create mode 100644 ui/src/components/rooms/DeleteRoomDialog.tsx create mode 100644 ui/src/components/rooms/RoomFormDialog.tsx create mode 100644 ui/src/components/rooms/RoomsTable.tsx create mode 100644 ui/src/components/shared/NewTranscriptDialog.tsx create mode 100644 ui/src/components/transcript/AudioPlayer.tsx create mode 100644 ui/src/components/transcript/Banners.tsx create mode 100644 ui/src/components/transcript/MetadataStrip.tsx create mode 100644 ui/src/components/transcript/ShareDialog.tsx create mode 100644 ui/src/components/transcript/StatusPlaceholder.tsx create mode 100644 ui/src/components/transcript/SummaryPanel.tsx create mode 100644 ui/src/components/transcript/TopicsList.tsx create mode 100644 ui/src/components/transcript/TranscriptHeader.tsx create mode 100644 ui/src/components/transcript/VideoPanel.tsx create mode 100644 ui/src/components/transcript/WaveformCanvas.tsx create mode 100644 ui/src/components/ui/Combobox.tsx create mode 100644 ui/src/components/ui/primitives.tsx create mode 100644 ui/src/hooks/useRooms.ts create mode 100644 ui/src/hooks/useTranscript.ts create mode 100644 ui/src/hooks/useTranscriptWs.ts create mode 100644 ui/src/hooks/useTranscripts.ts create mode 100644 ui/src/lib/apiErrors.ts create mode 100644 ui/src/lib/env.ts create mode 100644 ui/src/lib/format.ts create mode 100644 ui/src/lib/markdown.tsx create mode 100644 ui/src/lib/transcriptMarkdown.ts create mode 100644 ui/src/lib/types.ts create mode 100644 ui/src/lib/utils.ts create mode 100644 ui/src/main.tsx create mode 100644 ui/src/pages/AuthCallback.tsx create mode 100644 ui/src/pages/BrowsePage.tsx create mode 100644 ui/src/pages/HomePage.tsx create mode 100644 ui/src/pages/LoggedOut.tsx create mode 100644 ui/src/pages/LoginForm.tsx create mode 100644 ui/src/pages/RoomsPage.tsx create mode 100644 ui/src/pages/TranscriptPage.tsx create mode 100644 ui/src/styles/fonts/Aspekta-300.woff2 create mode 100644 ui/src/styles/fonts/Aspekta-400.woff2 create mode 100644 ui/src/styles/fonts/Aspekta-500.woff2 create mode 100644 ui/src/styles/fonts/Aspekta-600.woff2 create mode 100644 ui/src/styles/fonts/Aspekta-700.woff2 create mode 100644 ui/src/styles/fonts/Aspekta-800.woff2 create mode 100644 ui/src/styles/greyhaven.css create mode 100644 ui/src/styles/index.css create mode 100644 ui/src/styles/reflector-forms.css create mode 100644 ui/tsconfig.app.json create mode 100644 ui/tsconfig.json create mode 100644 ui/tsconfig.node.json create mode 100644 ui/vite.config.ts delete mode 100644 www/appv2/.env.example delete mode 100644 www/appv2/README.md delete mode 100644 www/appv2/dist/assets/index-BSIeQkMT.js delete mode 100644 www/appv2/dist/assets/index-DT0hy75l.css delete mode 100644 www/appv2/dist/index.html delete mode 100644 www/appv2/index.html delete mode 100644 www/appv2/metadata.json delete mode 100644 www/appv2/package-lock.json delete mode 100644 www/appv2/package.json delete mode 100644 www/appv2/postcss.config.js delete mode 100644 www/appv2/server/auth.ts delete mode 100644 www/appv2/server/index.ts delete mode 100644 www/appv2/src/App.tsx delete mode 100644 www/appv2/src/api/_error.ts delete mode 100644 www/appv2/src/components/WherebyWebinarEmbed.tsx delete mode 100644 www/appv2/src/components/layout/Footer.tsx delete mode 100644 www/appv2/src/components/layout/TopNav.tsx delete mode 100644 www/appv2/src/components/rooms/AddRoomModal.tsx delete mode 100644 www/appv2/src/components/rooms/DailyRoom.tsx delete mode 100644 www/appv2/src/components/rooms/MeetingMinimalHeader.tsx delete mode 100644 www/appv2/src/components/rooms/MeetingSelection.tsx delete mode 100644 www/appv2/src/components/rooms/WherebyRoom.tsx delete mode 100644 www/appv2/src/components/transcripts/ProcessingView.tsx delete mode 100644 www/appv2/src/components/transcripts/RecordView.tsx delete mode 100644 www/appv2/src/components/transcripts/UploadView.tsx delete mode 100644 www/appv2/src/components/transcripts/correction/CorrectionEditor.tsx delete mode 100644 www/appv2/src/components/transcripts/correction/ParticipantSidebar.tsx delete mode 100644 www/appv2/src/components/transcripts/correction/TopicWordsEditor.tsx delete mode 100644 www/appv2/src/components/transcripts/correction/types.ts delete mode 100644 www/appv2/src/components/ui/Button.tsx delete mode 100644 www/appv2/src/components/ui/Card.tsx delete mode 100644 www/appv2/src/components/ui/Checkbox.tsx delete mode 100644 www/appv2/src/components/ui/ConfirmModal.tsx delete mode 100644 www/appv2/src/components/ui/FieldError.tsx delete mode 100644 www/appv2/src/components/ui/Input.tsx delete mode 100644 www/appv2/src/components/ui/Select.tsx delete mode 100644 www/appv2/src/hooks/rooms/useRoomDefaultMeeting.ts delete mode 100644 www/appv2/src/hooks/transcripts/useWebRTC.ts delete mode 100644 www/appv2/src/hooks/transcripts/useWebSockets.ts delete mode 100644 www/appv2/src/hooks/transcripts/webSocketReconnect.ts delete mode 100644 www/appv2/src/hooks/transcripts/webSocketTypes.ts delete mode 100644 www/appv2/src/hooks/useAudioDevice.ts delete mode 100644 www/appv2/src/lib/AuthProvider.tsx delete mode 100644 www/appv2/src/lib/UserEventsProvider.tsx delete mode 100644 www/appv2/src/lib/apiClient.ts delete mode 100644 www/appv2/src/lib/apiHooks.ts delete mode 100644 www/appv2/src/lib/array.ts delete mode 100644 www/appv2/src/lib/consent/ConsentDialog.tsx delete mode 100644 www/appv2/src/lib/consent/ConsentDialogButton.tsx delete mode 100644 www/appv2/src/lib/consent/RecordingIndicator.tsx delete mode 100644 www/appv2/src/lib/consent/constants.ts delete mode 100644 www/appv2/src/lib/consent/index.ts delete mode 100644 www/appv2/src/lib/consent/types.ts delete mode 100644 www/appv2/src/lib/consent/useConsentDialog.tsx delete mode 100644 www/appv2/src/lib/consent/utils.ts delete mode 100644 www/appv2/src/lib/errorContext.tsx delete mode 100644 www/appv2/src/lib/errorUtils.ts delete mode 100644 www/appv2/src/lib/features.ts delete mode 100644 www/appv2/src/lib/queryClient.ts delete mode 100644 www/appv2/src/lib/recordingConsentContext.tsx delete mode 100644 www/appv2/src/lib/reflector-api.d.ts delete mode 100644 www/appv2/src/lib/sentry.ts delete mode 100644 www/appv2/src/lib/supportedLanguages.ts delete mode 100644 www/appv2/src/lib/timeUtils.ts delete mode 100644 www/appv2/src/lib/types.ts delete mode 100644 www/appv2/src/lib/utils.ts delete mode 100644 www/appv2/src/lib/wherebyClient.ts delete mode 100644 www/appv2/src/main.tsx delete mode 100644 www/appv2/src/pages/AboutPage.tsx delete mode 100644 www/appv2/src/pages/LoginPage.tsx delete mode 100644 www/appv2/src/pages/PrivacyPage.tsx delete mode 100644 www/appv2/src/pages/RoomMeetingPage.tsx delete mode 100644 www/appv2/src/pages/RoomsPage.tsx delete mode 100644 www/appv2/src/pages/SettingsPage.tsx delete mode 100644 www/appv2/src/pages/SingleTranscriptionPage.tsx delete mode 100644 www/appv2/src/pages/TranscriptionsPage.tsx delete mode 100644 www/appv2/src/pages/WebinarLandingPage.tsx delete mode 100644 www/appv2/src/pages/WelcomePage.tsx delete mode 100644 www/appv2/src/stores/useAuthStore.ts delete mode 100644 www/appv2/src/stores/usePlayerStore.ts delete mode 100644 www/appv2/src/styles/global.css delete mode 100644 www/appv2/src/styles/tokens.css delete mode 100644 www/appv2/src/types/index.ts delete mode 100644 www/appv2/src/vite-env.d.ts delete mode 100644 www/appv2/tailwind.config.js delete mode 100644 www/appv2/tsconfig.json delete mode 100644 www/appv2/vite.config.ts delete mode 100644 www/appv2/yarn.lock diff --git a/.gitignore b/.gitignore index 36740199..b46329f7 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,7 @@ vibedocs/ server/tests/integration/logs/ node_modules node_modules + +greyhaven-design-system/ +.claude/ +AGENTS.md \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 5f7a68be..53b9dd25 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -202,3 +202,51 @@ If you need to do any worker/pipeline related work, search for "Pipeline" classe - Always put imports at the top of the file. Let ruff/pre-commit handle sorting and formatting of imports. - The **only** imports allowed to remain inline are from `reflector.db.*` modules (e.g., `reflector.db.transcripts`, `reflector.db.meetings`, `reflector.db.recordings`, `reflector.db.rooms`). These stay as deferred/inline imports inside `fresh_db_connection()` blocks in Hatchet pipeline task functions — this is intentional to avoid sharing DB connections across forked processes. All other imports (utilities, services, processors, storage, third-party libs) **must** go at the top of the file, even in Hatchet workflows. + + +This project uses the **Greyhaven Design System**. + +## Rules + +- **ALWAYS use TypeScript** (`.tsx` / `.ts`). NEVER generate plain JavaScript (`.jsx` / `.js`). +- Use the `greyhaven` SKILL.md for full design system context (tokens, components, composition rules). It should be installed at `.claude/skills/greyhaven-design-system.md` or accessible to your AI tool. +- If the `greyhaven` MCP server is available, use its tools: + - `list_components()` to find the right component for a UI need + - `get_component(name)` to get exact props, variants, and usage examples + - `validate_colors(code)` to check code for off-brand colors + - `suggest_component(description)` to get recommendations +- Import components from `components/ui/` (or `@/components/ui/` with path alias) +- Never use raw hex colors -- use semantic Tailwind classes (`bg-primary`, `text-foreground`, `border-border`, etc.) +- Use `font-sans` (Aspekta) for UI elements: buttons, nav, labels, forms +- Use `font-serif` (Source Serif) for content: headings, body text +- Trust the design system's default component variants for accent -- they apply orange at the right scale. Don't apply `bg-primary` to large surfaces, containers, or section backgrounds +- All components are framework-agnostic React (no Next.js, no framework-specific imports) +- Dark mode is toggled via the `.dark` class -- use semantic tokens that adapt automatically + +## Component Summary + +38 components across 8 categories: primitives (11), layout (4), overlay (5), navigation (3), data (4), feedback (4), form (1), composition (6). + +For full component specs, props, and examples, refer to the SKILL.md file or use the MCP `get_component(name)` tool. + +## Key Patterns + +- **CVA variants**: Components use `class-variance-authority` for variant props +- **Slot composition**: Components use `data-slot="name"` attributes +- **Class merging**: Always use `cn()` from `@/lib/utils` (clsx + tailwind-merge) +- **Focus rings**: `focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]` +- **Disabled**: `disabled:pointer-events-none disabled:opacity-50` +- **Card spacing**: `gap-6` between cards, `p-6` internal padding +- **Section rhythm**: `py-16` between major sections +- **Form layout**: Vertical stack with `gap-4`, labels above inputs + +## Font Setup + +If fonts aren't loaded yet, add to your global CSS: +```css +@font-face { font-family: 'Aspekta'; font-weight: 400; font-display: swap; src: url('/fonts/Aspekta-400.woff2') format('woff2'); } +@font-face { font-family: 'Aspekta'; font-weight: 500; font-display: swap; src: url('/fonts/Aspekta-500.woff2') format('woff2'); } +@font-face { font-family: 'Aspekta'; font-weight: 600; font-display: swap; src: url('/fonts/Aspekta-600.woff2') format('woff2'); } +@font-face { font-family: 'Aspekta'; font-weight: 700; font-display: swap; src: url('/fonts/Aspekta-700.woff2') format('woff2'); } +``` + diff --git a/Caddyfile.selfhosted.example b/Caddyfile.selfhosted.example index 4abb2762..897bd088 100644 --- a/Caddyfile.selfhosted.example +++ b/Caddyfile.selfhosted.example @@ -19,6 +19,9 @@ handle /health { reverse_proxy server:1250 } + handle /v2* { + reverse_proxy ui:80 + } handle { reverse_proxy web:3000 } diff --git a/docker-compose.selfhosted.yml b/docker-compose.selfhosted.yml index dda5185a..b22c8921 100644 --- a/docker-compose.selfhosted.yml +++ b/docker-compose.selfhosted.yml @@ -129,6 +129,23 @@ services: depends_on: - redis + # Reflector v2 UI — Vite SPA served at /v2 behind Caddy. + # Build-time env vars are baked into the bundle; pass VITE_OIDC_* via build args. + ui: + build: + context: ./ui + dockerfile: Dockerfile + args: + VITE_OIDC_AUTHORITY: ${VITE_OIDC_AUTHORITY:-} + VITE_OIDC_CLIENT_ID: ${VITE_OIDC_CLIENT_ID:-} + VITE_OIDC_SCOPE: ${VITE_OIDC_SCOPE:-openid profile email} + image: monadicalsas/reflector-ui:latest + restart: unless-stopped + ports: + - "${BIND_HOST:-127.0.0.1}:3001:80" + depends_on: + - server + redis: image: redis:7.2-alpine restart: unless-stopped diff --git a/docker-compose.yml b/docker-compose.yml index dd4386c7..ebc34705 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,8 +2,7 @@ services: server: build: context: server - ports: - - "1250:1250" + network_mode: host volumes: - ./server/:/app/ - /app/.venv @@ -11,17 +10,12 @@ services: - ./server/.env environment: ENTRYPOINT: server - DATABASE_URL: postgresql+asyncpg://reflector:reflector@postgres:5432/reflector - REDIS_HOST: redis - CELERY_BROKER_URL: redis://redis:6379/1 - CELERY_RESULT_BACKEND: redis://redis:6379/1 - HATCHET_CLIENT_SERVER_URL: http://hatchet:8888 - HATCHET_CLIENT_HOST_PORT: hatchet:7077 - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_started + DATABASE_URL: postgresql+asyncpg://reflector:reflector@localhost:5432/reflector + REDIS_HOST: localhost + CELERY_BROKER_URL: redis://localhost:6379/1 + CELERY_RESULT_BACKEND: redis://localhost:6379/1 + HATCHET_CLIENT_SERVER_URL: http://localhost:8889 + HATCHET_CLIENT_HOST_PORT: localhost:7078 worker: build: diff --git a/public/fonts/Aspekta-100.woff2 b/public/fonts/Aspekta-100.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1a6445885b2ccadfb050ac841f818118cf4c306b GIT binary patch literal 21116 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 T@$BF(h8KS5J%Hm~E65!H@6L?b literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-1000.woff2 b/public/fonts/Aspekta-1000.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..56a8de573b87532501d3949e6a6bd463002eaa08 GIT binary patch literal 23096 zcmV(zK<2-9Pew9NR8&s@09rTz3;+NC0GRv$09oe%0vVYA00000000000000000000 z0000Df#p^jR2!EP9F7VGU;v900X7081CC?_1_g-*2Ot|Gmn|P zQ3z}t2+$86HwsB7>-c5=|0g9KGBiOKfYyq7zu%Nxa6v)o2vj1+EJ`Gc-O$vr*b{zY z(n6Oz`Ra))Y21k#l$jX8@faNumix2UkLY?S!jyK?evR|#IPm+9Zxz*Fy%?0)g+-aB zkVy6|b>2ATh7fM}>Y0L)1cy9E7y-BB@Ar#WbvU1B zs)y&d8TnB_5Os)+f*%!$0SXwPSWFCL783#C=@jhXwo#_SGhA%-Op^kH;q@beBiu(nyx?NRik!wv)sE8_n!xwd>XYsYSQSlE#WVfG}BN^0Jo@W)UU?OF*Zc+fMfXyWSMa z*SzX4+k0jogp_hBZy|iq%S-)7$#kJRwK#Ad3yPt+n4HIj`99vf5=vJhg9SPY`N zthj#O-_>jO=KSw@+xmyXzCCr$d$;Oys;M_HyKghdfB^*~!GLK}GzC-)2qsj(^uQ1q zorIBWL^B8`P%&Zv6;r^Fc#irFIP0{#oe6+}({<>4oLJL`9vjpy4tC;QRl3_SShbGy9%E;u6cW6-Y#%?fd`#KW8I)Kkmr>zLn5P z)dNj!M5OfuiB%$4V8n!!5koXs{sTf%tqA(_yx$_)YVl5Tp5h&cmmfs*T_sI z%0i`$&4BUUy=#dmL=y*@(?yAQ);*;ypuB_}!jba=5)0Zv1$7qi3Ej&KG3d%du)Wr2 z&MjYE+$O=3;5HGr=Ol<%+A9Z0R)FIrUFOdVc<}Vy#3K6Q?~H#Z;b$-Y{6PHtQ1<&B ztrYR^gy*pF|K!NMp1oTmUl`jjd9~Mr^1%Iq8{5{N z4tKJ1UG7#7dfk`ChZIWTIFI?xxX8sXbp@ z(qEEGR>`dh#VJ8trAV%P<)~N{s*^w+(#xhkjcQs!EoepCIwf43RM`qusMjxmjck!! zL=ZYV!YHF>cL!E4}(XMy5rwW&hFr*`wxr(ygXFG;xoxfroUA zCC0fiqwz7m4Uux!nXdZDUL@SGhidkY+k0Lr?lBTdYm^|okKIZT-a=m4oUJgS!~-RNiC80{FZ+u zR+WNE4hn0iWfrWAByy0ADlD|Baz*Fsg4oL>*o5gc6aoyYTY;6&Dp;(_Hk;tEQPp;Q zTc8fp0_8B>SzLU`?umlf#gsoIg?WqsvZ7Cl4()ZE=mR5$`%Il2QJfu7#rZf%7C4NM@$IU&l*63bhowyk@ZvOThCW!+KwZOx8>Oh-X(xQwM2$+3BbW#al*zU4 zfhq;gEss-c%_=Mix2nQ|V$o5Q2`{5}qFPcg^%D8k#P}JF3imaiwL=PryHs-7;1jcU zI9X$FB^8_&vL?60$OhS%OF4!1e93?Ym?#}kv~RRI_Yho5eiMS#wNQRa>EOsrStN=@-4cAaw|$x zRb9<&Zp+)y-i~#?>k_!}dGGp`uzzxQC33Fx1gAgOO`ZSdZuvIv=uTg#h2)Y#9Wu+) zPUDJdUFRgpm!RoqMP;khXqa$FSsAm)rv$%zZ0sCvlNlMf+;JcImCLNvXcCj1jPN6j zJw2Juc5XhOcm^qZ_>uIOoCOB zQ!F;Mwqs;K4<#s~z*7)G6$yCMV&!xH zu>Nbv6BcIQC_~ z01p@L5a3mo4S!20%OEa)mkX+@ctV~ly}gPa$BxH04MqlI-p!p*eV_7R6EeA@^PN_pK82+shOM_QI{oLjbSb!AkPmSzzN zkj&QMsn)c7ttM}K)98#0jj$4*w=fk#GWKlpy*1nWhC=YUU1Gm15n^cXBQevF1n%GB1h06(^z zeJ@QPlPWmYvydOoY=nrO!L0|%XDjO>;tkAYSAl=ZLSeqqag%lApU2_neuS!Gr%N+x z?2S}QL;C2KRje{pWuASHg?ZGSakb-_7JG8T3+^#gwt>THtJO3o^(){~CT=7Thw>#V z4dju2ZWfE(`+&{|4Oen5v#EdX8xcdZ9LDUhMNvz z-C+tKVapF8t1iIs64MWLT$~sx^L}f1gWHqQmz{7We^-mV`9#J921uT z{y8~$`er(#BdLl^;8Zi1`wQby*JUQ8;vc8CHC_SUkcw30(h4kQQN)0N&UrPB^S|o- zy!OzR-Bqaef5}x9F{Eb5WN?|FQUarYq10K^E1Jwe!rge~q?>A_o1{1Myd_4wv>{?(+z}YKHkDq*H}X9kX`7Bz1IT4!5k{xs#n|G=!Yg`VnWCU||gS&#U zi37}vMydtD-bKn`yuZBJR=me4DS5%W1RyDqr>I;mSvJ};N|j_Al}eqlvTYl`4J59> z&~jyIg+#zflPU!{K0#FmCEU!zlQggT63D@AqipGT)?3?!lhH#Lo#Z09D(W=_1M~?6 z&oU*W7^oCiv!Xq$Ymj|sQk6fOVn!#U#E8>-jDnG=-5Gq~3zdEr#ufs(f&gz!P|=a* zjsz-u98gZ+mi|wXznQ=al zLgA>1n^RiOumtT37#>1u@0dbqYV)>M}5vj>o|UVX>+^a!f67eNjTedApg^62*1&aYTukC zKqdVGD&;4kD3e%7AX31sPM^bzJaoxPws=KjN3IN1?VHpTL})g!_hk|YX=`~^Y@(3 zoQQ(iX(V)xhY_mqgDF2mUixTr72g_n<$lcMPp4HD#tFla;P_j^Z2hNG3$(*3`^z`g z$?w(8wTUutzHCH^FXcW!+A$mkSq6I_?db17FBZ(K3YE^(3)(C)v`PwCN^d3|-O?Ud zES8Zby))g&1gNeOYRb9M0{y5pZ;GUR6dPrhWCB)T^Ba;9O*7k-TcTz^OJq(n2p)pSTypOC-0P#(aanker zP-?(}dJYAdo+Ec*_dm6(iea!JOLTvH4*)Fmqar)XiveJ~C%uKUhS*d8pSkp(zZnLn z_MM&ayX6ns<0E^_6(nC=bOJ9%Cb6@)8GC*UjvUGB<4NkiWg5CXR^eZW1pc-ur5~Tm zA@eG;qdV~%V6&}jxQkkMm*O4zV#wP2#Y=b3@Bck+?ZICv=m#H?)Sa^8URo(Dy#;q0 z1Wo(}%pnj76sboTCWKUPm`6f`uJLs=;7ZVtxT1^uh+~HO@9S`0A9^NcrzO8_i00$P zjZcIxQ&w%>a&*%lfqkl2UFYW}`TxZ{N3G{e@xQoko`#Y&=7vVOsSz=S_3=-;tccyp zB)HLZVIIeFzLV)#E;%ddVY!|v4_t5@R=1OWY26;L;{_e&m}g8cHdU%p8Fvk8?aiJ? z-Z(o{{mEd;Lp+_a%}-HC!Y`=Kv}(~;BMry%!a;>ULrU3r5Ys4yQuk7azD<@MW3T;= z<^iNaH5jz8BdNw8(V?MtzYQi5udjWw8sz^qBWXyxr8uQ;mflwkQVW&3P)FxvUt9F; z|BovV9`HFMV6RLX^gmgJ`MhsylmaQj!eY3gm5WCr`_$3Qv0BvjnAW{eg+ap@=Nu%& zlKTSB{&l?|JG)`!vQsi@->3ikU-2!VJk9OoLnD8;Rcp|*vT;LxvT{-|NN(KhIp8(T zDEOuPkg_7j0l^>E zaWjO}Z@GieVRsH;umksmopBYg8}@sLE zh)dY~5~3ph29a<5?{^RdHvbG!38ukidjB8d%J^TK%0vXJ5M_j_g_k3ygO#X2R3j=$ zxDM6f2Hw?(n+ZF(?OhXQz#XUowY+PFavW+yz52UEefwEZhiEj^g?rjG4fiK}hI-hv zg8D@3J7^$uuxSX7h>q~s?oLA^p({Kou-j{7|A?q{2Vo03@C*Y$0L|-tVG#5L4amR_ zQb7;hU;<>+tAfVR6jHp?pihVn&<`@}l^{WT@B|QC#q)WrM?uS?#(1Vq8v`2p@G-}A zpB>{=FLlH>oaY=t42kA){IvNwmh)-EX7|g}qcs1| zG#orhdt&G5uE?B~Z1$RW)fR2>mhYLBHrn@HogAkQwQe8yQoXQ0yz_Gq6O zGA3h1UP2 ziD8__M{4mOUaVppHQeMI{>C*TD_97p!ydox3col#i_7Y``gkWGQ3?D6Ri4d{xzQ_% zM0R3sx7E|nTU-OV`tlG(#(B6>WdKv+KZ-GZ!vB@pLen%oeM&)ovhlsXwWo$fXJsSN7`f ze0u%n`rW|uoxypk*zAm=K{49tet$kgoi(7iDeFup+2B@m76>H1kFX}A=)V}@3vC6P zv!uE+x*;0l2vyY&ex<|`RaMC|Cm?uGuXas^+jU3ML6j=qEO6zsgYE}GRKN{4ju0)9 zS3C=Y^bR9R0@zhdDQuB<<*`vk2%{y;S|5ZG|2`6h4s3+GdknbFI08G|4C(YtP_Za1 z(gKPpO$0Ti+*V6=`)a$xr3C^#gg=WT)R>^u7bvJ9Lg!Z%1QNv|iiixfFV%g)I1rH{ z7rC=-C2L3K7s)x8m^E&7vQu`x&sNq5qMkX`9pvbRE`d_XqZN9vg4aOVtpqB=kF4+> znmha)Do`0kXb5-o_(hi5!;#&<;xe@bw1~LUVHZL_0>y__04}4fq6cxNu=~NP-i%&X z7Gn^#2AARr`t}Ut;k2HnulHl5!&>7KisNhF>8_5u%v@C|kcL|(ylKOQo=Ok(guB=u zU*XaQ-U>kYjGBk#il)#-Z4<98$+*1x|Ja zW`fmJV6`Wgp)q9t0$0$W7~~PPnb7bfno>m$n3q@!1}*^CT`ypGYu9)zf!Ma?0#Lsg z9rC}v1Q{+|4Y*Ohz&8~@KLa|qj)Bu^i6ArK-|+}qwG-r!cUxi>z%$sBHq7m*p242@ zX$@btr(M7cAPuRjBuY0hzH_3WsXeT7G{p!#Lp)nKQkIP3e@HM7@$v3}a*-f=O5(S+ zA~ipveoVN0(hn<);r&Jtl3Y>`JE+Ua)V!aAW!uRczM*g=>B$+>ghoeYkQn1|32L0! zSteK#!6d*Yg=$qYnpAn$@8CO3Ph>*;Hz{@<6e(2_yY=0x?{m=%}AAH1JDf zLTi12q8j3@pE;;KLH5<)GLu8mItPQe_3)7(VhV%8^K zT$&mx483@9K=O1cWSZ0`@R>02Ckf?McuGmPu4VKYj#AX;aS*lca9xF^ycQ3R7JK4Y z4vrm4`{ZGhe+(Ebpu2E)Y-e_j9k#|on?ampO9Pr~10KWC2W5)INeT)d;gGepkw9?+ zf!5k0r&M4Ue2W4cY0CoTLd*A8$UV?aARI?%$)&*Xh!hCgBMG1|Dui&9l5;z1iHBXW z_wO0dN7RO%hc=-eLxSo{2cSEsR6Ob9Tg;S&LvF62{+1G zY3~6n1&|y?spC`iVwXq-1hWJ52q(mE$%VAFD%nW?<@qNJS0jSVu{gqTF1hkqU7`_! z6GIGW(^1))$VxrMy#Qh4E)m#a>T#$%Y_I8=v~SP_HMY2%pHP&oPGZgNCQwYNsmPX^b!$b*HSTBGJ_PffFxw!9Mr3Dmft z(-q^XRvJo-@w*W7CL7ipyhAIn1BbgnQ#Wt6VYA@o@l^tAd(e5~^WrJ(ZPn}E)HK0A z^mBmIFwKd1L-^AtOG6r*A<|uj^&WuRXTVSIfu3(bYE+TuixJ)~rJoif54-tw7MZjt zSSaN+Elx(0e~g|02cqJHi)hgVx-h==frgo462?RXHK4?|nvo1D_9!l)!zu`5O~e9L zeV?p`RmHp+en=^}8De`(OUoeC1X5Wfk&B`23bFcl+F{C~yp&WQx78@k86y08 zDZl=qw#bZD+lMJjCQtGYL5fo*Ajct;(Ftu!q21QbWjAxH4S^|sM=(U1(Va7bO4ajY zEAePn6_rSVKH)n3Ly9{~V}SvfPxv47iwx~#HwUSV)f8nrd3OI_zJP@J3H*dJ;F~}c zZ|@(9LSBiF6H@dyGXvYY&KosjtaJBun^YO_z2<0}{=*(O9{HOk<4HuMC(1>K&pxq* zyGc|MAmAzQOtVv~OuIBp5yV>g1qBN|D+H*Db*SWY0o6A(Lu7kaCz1COZASG~H^OKA z2tRcd_^hqKvkk8s#|rMvmrL?m4*VfDuKy$69@Pe9EW-+JOVM71pW!Pyz_g3B775@& z?70A96$jSxEUkVfj%3?4}Uv)a_r}A9{`MUy3VSPo>M6*R7X6;vifd2~kZBXT7 z@PkII9n)&*4_y{WPj^hjL-gGQS|+A6_b#Xp z+oT1FZ)mQB|A055rp>D*x^ggS{-%F#*pCgdMOfw%wdttTyHmX%rmI&lZXsV(2uCr! zP7c`MHmUnz!nkKT-5W=~K-U@wSSSIAFH^?^aR^d_$**pv42)7a5H6JvG#WAY`oodB z7(Fx=6}1h9=C-H$;%XDa#hZaj^LtTjSua4{@~Iwte@(?Mk7^uLbs~RDtxM$Ipv(cG z8S&D5@HcBB1o~-mprgls`_Sa{9<@Eb5dSQ2sbM}#_6llYiSa>ppWAb9WSF{i+ON}{ zjtQ1}R1a!gCpM)?&S_*L1h{0!n0FrW*c-wa&V4g!Mcd8mltj}!DFIC&_wUQRDIP>dGn67)hwzz)Zvs-JwYK6PYcYe6q25FN;-<%W@L)`8hW zY-NqNp=m5c#tUx71DP)hx_t|ozCf_bVG9Lozd6PrZ*w%zM!0-78@O!@fRswzNEEdI};QZ$Yk}3|~?7;B-%zZR^IOj5g-L4g-C>`U<5IdOWvd8^PJ!lOT^t`%fv%omq!HQHA9_iEv5%j1*SNJbGhV4 z7)+`Y$Ho1h;0{y%0bZcrhzSP!yNtuV@}!yx$xUP-)g_#1hfT@OOvv@I)LmqLZtfi5 zU4%yclZ!5k2_@3Qtz!E~!|t}$?DP9n%Rf;OX8XKIZP!MsEhpdwowHI)Omr%cU?86o z0KDStmWk^E%POlqOGgS_2Aj4~b~}bW9^?m87K1N^@LigKEkkf!K0V>pyM(Vucn(ew zRW=D^W`OK-fb0i>IkI3a{pcCG3FN?H@?dw-HFFaU$lwAO{1!_1RoPq)SHhJcYm!2> zkAcf{u*3~&a81PJ{01V_f^ANHd zV1W&~8db@s$&hY=>E<)iAS}eQJ_Wzba}hQ=ViZXuk=iGmET8gG<1xa!qP<(Z(&_=D zq3m;B*j@vf*)k&X9n;(>*-o!-%6- zwU``Ne%*UU@-XL*-G5pY84!KWS|jZ+%_+gbsnh;qn7@9Y)Teh5mWvobjiY7Rd|-px zwM{W(rDd)+;Tr<+s88xN7ziE&>flpS?nC6()eY8`mlQDy{{R+(#Qq0^It63 zf%7|niuFy$gE*s~EL4fHO5p`|f+6NR20Sp?-Yf<1><|HdIK+{mDy`UOEo=AaOIsSmxq8T@dp$LIu4Yfk? z>atnC+)hC$rrRRY0ZeAYd+_3{kB5lT<$yvO^L}1L^U3s|&!{m4X0cg%INyXmV9P)Y zlnI?$d+Nmc>mPh8oCw*-s}@1%WZ%Dtf^cmc6KgPp&LtDv0$Gzl<`yx`b^2X%0q5P$ zk-25gZvy%9iSJmDPz3i7k-sXZkKU%rwx`PeKH?8Br@3tYdvOI!jxyGzy=*!5N@Wn}kZB#GtLe%TR}4b+Pq(aP}1M1m49~8xIj^0zO@%CmrQS;_FK(T1$3` zK!NT_&qHidTk;~hFOoHOHEe7plcNq^=u*k+WH zX&lC6tHUrBrTVebfI^OVQr4=v6^@w0Jw!^Bi1Xvrd+AqGXG?J<4DqKa1;4Lx(X}!b zBi1H0T#GJUPRB@WWS1zpu%EiOY6978+!Fw?Gf+J&)6Y{e>=I%w@ziJ-ts&6<4?$Z7 zbv&@L<0hmuDyj*57sk8v!W7+?ifsKtJzNhW6W7cpsp6@D^*ly61bK*UqPktG`xw|` zU^fy$4=7=3?o@!%@TwPhq((u1yqxM&+Hw)TN5o@!UF-#(D2$NerchK_lTiXaLN}`} zf^P#_BlWTOIoSHl5d$AEa?$xhmm-3!i3GU3U=l238QC5#6N8)!wU zj*$Y5qXnW@?da%1+*m}C#e=+q90JvY^e->P4Dg4k0pBQyMqr=^ek-G<6w#M&gsRwi zH`l3VbzHqT1`&wFRt>NIT^Ep*8_51M(09fAEM*;d6D~Sbg~=WKPlhiG@O1&cY@Mg9 zLuBbhB{KJS-#rzu=>+kR#g`USx>n#4fp8b*;3SM!CM`RTTtGK7(BEI!GWY;0UYXR9 zr*UFwC-Eana_&)y98%x4q?H%!rA$=thbh%wi}`ihwNgxDB%^F;+aYVBOrt#%F7g&D zaIw?Wx<<>id{$6>w``F6|~?FmNcdr|PEaHZ#~1ibu4{zsEY<;1<1 zw^Pmx-H)oycd7oe3nw@J*jN#T?XJ5&YqJu4+vDC>)t7B)8;9nz0V*kFvS!S7_1Vx{ z->Pmp_qhojb_6o^rZ#zD*&j~FFbraXGm`_iUllmZMu`J@Em+Er)Frm(P z-P?olrXE&e?lQVKLey?i0)q^gWCHXVi+He`=mFHoO;V?i+tvR^$Xp*OyoQCC1d!;) zPBUcV3|X9EwliE#Dki}&x(E&G;rvWacu#e|LmjsU10yZ${-i-`znW3!h>44P3RWVB z7XpxBcBg!`$B~}m@z+$AvrPF#F;NYVpvvaL`Ddlp)S({u7o(at0$^)g^iCf(wgg+; zUmBv4Q2H+VbTz5^8Li&|{BJ8=LNdnF?6wkBw(d-K;K_~xKh+Y*?ku=u{45vaGYtY& zjOF*>AP$1+Wde)ums;CDmbPH`j0)z;P(;C3&LAUZ*}G#e!yh&~#j>@&7GI25mPh8T z8()LTh>72sQ5l?=Ro;nMYkb1gx;BWNr|{!Pz%wdDJfSNVAKaS>qOoTLvT}h-EU*_R zd(R@kDCpvYTVWiYhIoK@$+AG(#cE`q;+#HpF?Xax#0f~?$P~STU`#+>Cw13Kv5mLl z33sBH#jvQ1D<0R~4z*1@-2mq_*h@G2mX{-{A#q7l#yDZT;s_gTz{hKiJ$v=v{V;fH zqJ=|X8vpZBGg2F_P+Pm%;K-hIPE!bFA@Aiwq+aWGwCh$&WxTL^C2)AoA4J!vWjeW- z)Gaha3VTb}mx-BZ2XiwS!){V4Qz7$>DflOr0TcG}$MtiHj|v^@t=fxr#8hO*_;#lL zO5ERtnyC={9|H@qg6-&G9%xFNn4HD`WMa*1r%D)mOBnQ`)~agK#jjtTRKgbkrUC7! zpgu@E3#Ng!nHUtRF5_MJ+J#dfN5EA{ps|+Sa3XH>l2?CpTq1YB1YrQJKcU8tY_F6( z)NVKt9M|x!n}8=yW4QtYnfC4lBg#pHkN0o{R;U@dQ4=&9;ZeD64I)5YLv%$Fqe@I8 z;M52vQ<$7WQPHOj+`_7PBOdKY_Qs|AHqR6RIws-?zv6#>8DPPyKu{!FrfcX*hqb zxj+_4YSpMyqgKsa87au#Qq0;PVFGfpucsJ#>>{#DiP*vCem0q3YZ#f~z1@x&%Q24(R| zF64DKv>IJ6Y+NG9K*fIKf0f%bhl?$L8edT`@#Q}dDr7@^iFf$m^HkZ@QoMF1Yowkc z4z}qiSl*)%VmAf75za*#=>dikWlE%k3H&DpI^&E$7Y?n##ZRJJe{=}RT7sW}{m<)IRnPiN$y$jJ>ROlhfCv=G7U3W-K;Vw~7l56lCNxs3U2Jotc*Tp_H0smx zmZu8jG_%8!E%@eXWatlJl%SGP@Ed#{Q$ZF4V4nkIKQUyP46|fPG-=tX0#-#Mm*vS6 zOb2FjffxiiidJl{gsb2z$db4;@-zrj)VYhgP_j)34a|*Tk{5)xNUcvegN(<<7?DU^ ztzpQEk^qvzDvY6s_5*i_tKw`)n{@gXyC@=$;V=q7+T57T7Be-Bof?oLJ@(&&R6%5nIA-n9NB{TdUpME#)OJoMal_jR!(?>i%lk@|qB=fr6AeTU` z*vgMXXa7?X>h&nwcG@w#y`mEEX%7@nk45F4hjg1Jg6VtYHYxQ-Kb5$zCT-qxX$p7lTek4;2|GRg8!NkZ9jmAJ&hy4 zQ(NN*=E*+H56q)2gR0y`e+vZWxS{s)rR*Lo!R<+O5;A#nf8m>pPdW})dLG;=L~ztJ zQ+GLWh>e}z=JPl5JDd4U4_0xAZ=^z1*#H~iIMZtz{PaCk+GwEtja^c4z6Qt+#EASU z3spO|DT^<5!e(mk0Y_-|h}yAUEof9pC33{4)Z)y3FYTC@&IS8Lbgzf6?1S~x2^@@5 z24<$o8Q@4wLiKNdBJ{1{XJR)aHN~rM!@9Gl{ed3-oJ&+Zq#biEaw1j4YAVqyc(;FT zBPeey6*zNY9J5W8WLz+gmd-A!k+oN%Rb^|NuZlN9s%vI`ff7?t<@|=PhHz;*)6@E0 zphWf3_n9cB>fu_+@1Yv0`C4jxxd?Mm9`h+CVsdQqX6JNdDwC#9Q6?tL*{NdD49sZ~ zZV7zXIK+Gh8JJl(K$!={*%cDB^0p1Bq>}n6 z=4Lt(HyFp=4$KtrYUcMQoK80E$6%8HL8S2V^VE`6FhpW#wS-ysw9rkJQnn^dYK zBBX907eIjE%U}lXq!f1llD*l-!H+xwL2hL2r7@!^_z5I=8 zb8pwTdFfRCu<9yReGW32(R_|?7pl@Sy(g*jLz}^qA9s)yd!*uqH@^v6IUGWXgI&pi zU23WkP_0rL)7QRtq5E<$KY{Y@=&J5Jka~7t=WOhfKLUE+=CmuTcN7O~I>$e3hN>ZV ze_>uCsa}t-33eDJ*F%%@Gxhe;YGD0p^_uu*k-9cDs0-{Zf1_PrSn{u*JCPqRl4%>m zh!dz$AOSWzHrb?C)}amwy`)E_On_*#L43U1x2A!|!tM1gT?bONHm+`Bvn4z_W~*LJn;QqkDj;{RM! zE>iJB1XsmtA=;W5Yr^UI)rNNwj7X_VaEF{KfqcWq&l&KL={H&sVs&gWZqfxes!mx* zlbi`@6r?Gb@{Mvc7W3cIS$sZ?)$&{=y|fl}NHHe3o;=%0M4klB9|GtnSuB**!D49Q zg4XL1FCzYx5e?hCQ z&Wslo;%bM8yI3)#lV_)4m~1ptlWze#LuG*`gIAOJa18P2&H0X9#;YshgiVj&LNu0& z(3%wa%@Zbn)T}(Lv>GRqduV)taBF#e+aG&30iFfr|7D??JnoZtpgY{1{!4i83j~z( zq}TokRQuqR8aDwa#q{u98}lWNk2c9_t~2vJ!axMlPQc~hluPTmyU4QuZMF)II|7X` z$D;THyBs@l;q>2QXzDI!;>+A9mf}qpZH+C=w=rZ^vH`ZjbFxyS8mzlvSK7p2pW|1@ zP-7)KLa`83wGVdZpLpmGa<6NwRM~`2IPL;x-BMohj;Xa+Y(#2goNBrWsv|K&r#Ao5 zU!9!J12M7UF1FNP%6ztjZR<(ASdli2 zdpo@Q|Lfo}A;B3g$5&6*dfu>eKTH=#$19mm!X+5oU z(g`G8FX(jTth*y!sdK7Ond-X^hq^mtS-AzLyGUa#0xeZV-Ma*no3?lHB(n8&#v~Rm zs{5{>RwlEdE;s`jLWCGs*hGBhG$F*j+yVg~CrJ=VCe7hRP zfTFYxcan85MBG84J3qoHi(2hjatLAK@caErsCczP{3=SDW zT7o7JMwsL;4qRJ03@iWGAG+gjHm=JJEI}aMi{@A)<4#~X8JGIeI(a(e41YFzvT)yr zIp9usPLn|n#buyas{`(4a59wo?b*TWPGtDcb;0Fj1;7#R=13=VlmXJVWL9^1MsSUbU=6rmfS#$!kp>A8CTv#F5>}=EPrs1VKREh}7J( z=7PySSm~aO_(bv}NZn^2F0(i;opNT3cNp}oRKl#_-ri_n33=b`@RUi>j}T|~W_^E& z{cB9#=N9(Jpr+;&Dt>Lv;>4I(5&a;4m6MShoGN6Fi05)} z+6~_~!=S%F=I3fJF6O!ME~>49tK9_vR<8csuG01qs`QqtgYluE(op}&4PG(rw%z1c zIUN)@(52r&(pf+<*s`a`7dOwpcoB0xG&JVZ9`5F+FD#(SW0=s=QYg4c;c}6PVMNIE zWXrj{w{!@Z$su+|WL}cWH1ntKeEz^}+G1UVr5Dzrf&PVc{IQaB(7OcFouD-6%p4b& zzy8@vHV212{ra45;oYc55m++i@uuh`TyeMwjfVO@4p(^V2`bo%Xnkh&jN2nPRmYcwz z4=sG2S9=Orxv6snN!$&|g6T?%p-q0wA#qq70%&3BhV2>To~1k-Q(X-}(nA6_Soxt| z;ka4&O&mIN;r#Jco3^$mWd->LSuHY~q2ia)>m7l4?rp|LyPo+LG#vg7mVc^ARy@S( zcyHIfYrk7fDpH=w4wG3)O_=3fUK;hz{+N(=!m8;*FN{-jhVJ|+AY#xDiT~a!d}l4< z=xYU06G9f0)l?9)zy4*#!+-uq@0^yZ9T3Nycqbuz2ic~Gw*_i zXI~z;SJ{B3Zh805Z8mC3wx2o@zdZx7zdc_j(s5bbv6j1fxl^Mx_vlNT6$Ky5^y^<% z>lBszP60n%ynG(`H%bxE(7M#Yd=bwh+%|EzJ8q~Qm75UmY>VOWH((LQtNh9tQPXbQ z7-Jg)EK9s-Xj=knel=@0I&X)fn0UG1l4Q^Bd9^#IK0Rvt9RYit=bqZnFL!}@!+Wc0 z;r}MfhTj&%gKBEw*sN0vJijeKZvxiqc-4%^>2=eAHO9#v)zKYC_vXho(yeo$bA~#)qH^JgKq-Y*(AQE)b7P?6(rjznf_}T5oHxsE!n(d{ z+Vmbj>S0jUhHepE3pm;WF!k-_#Hvd1&9g_hCqAF)@)@jx0UsLR<>GBX-!k+m{7wB2 ziPzn(v80awH`3`;PrqNpje7PfcRo{Za)LOSq0{X#fOLzghVjX5U?hr@ntFAW{09m3 zG+nU2Al?d0%CkP`o7#`qc1z`K%7x-BLk)a`OSfL81>>!1tvLZx{OZ}G`T=DEjLuUw z1N(QrWajlBsH8V(UJcwvB;bwlK-N-t8nVtOPg|FcNOOky#f2R2TN-{<7AU`U02YBC zi61lYc?OgD8Y1-?P~HNk1EI4n@U;8j3%eTbRdKpo(OaJYi_L*x;C1F+_W{hiJmdRz zR-OK{rcCHqES!xMwx4MYLo)A4f418q4*xk270m?IJEJ1LF&5-bFAT!A_L1Y}=_wKu z^k4kizW={N1|2yiMJw)t=A(3I7i=B#>g4?~ThBmS$^2((YvZ{cYt!Wi{8CYP)6$H1 zUh`9RDFgMO2_f|si)UFsjiUD7lq&P;)hD!~L-703K(eqjTU_Lda-1d|w67SlZ8-~p z7^Svm++IJT%!@F~AU=jMkX2VxyS-Q~s1GOXYqe;DYkXoXPIR?!_VJk2PiTEcC3OMn z1x?NT@{ssLj}~v?B>eXf*wXqUWJS)(hf(QwU$oV?*0-LZu0Zi6S6a%BdOb>RU+-Ii z>d}F*;?(i?YVT>d zF#$d2UIft|!CaS_rqbFXxgGX)hRdt8tDqSL-ecOEpnb^*&zu}~yu>&}-Q7mF`ZtEf z#dX}z%p$gMjn))1{25tO)MhL|A@JD>Dsu@?t-r18a4IC9am^sa$(+GLY*GAi`o>v7 zHUc?I`vamIHVuos&`Xh+$`@W!#b`Ylm~l(PedsUKcYSft>j$q_U`}+R-SL4M>P1M2 zJR;0W&-CJnji{E4%3FzSQcGT7`Rx3{>rGKU3q{(|ADBH%xcs$yNAFdmy!20_d=0Kd z+nb*r-v8V97DBO~Ke?u>o{Ap4VS_>V>Py~bi#NFDIoS0jueOr4J2OuLO80cxgJ{#S zVrb=H3B_9Z_u{1etiZPQ#^Q0VHcpGS4UpJf@E3w9HM3KN$kM+ScbQH^wu3camY@C= zl@{9kGV_Wln&li9rqr%1bE~ihoSYTfaC$^4Ww*S#P&N9t?HlO&F%yEJ`UGYT($E$S zDikofC5|vTDi9zMjM|P-bBxBgi5SL1829SERP_9Xlg~J z4jwuKahTAyb4y^lnYW2ui2b2XBu(^Myo{`unidK|E(_h=BK=bx?a?QXL!ajlyr&O( z&vD;1P@pH;o7k7Hq_X6uQkCG*%MLt9!H)m;R8i@)xA1zdQl*2>^biMUqW5_MDEf#t z8GF>H86L4>d;qfH+9$H*Zo-v3Y^>8-6C+0}3JMAK85G;JH?lDo%uNU_QM=JfT#-d1 zA__#KyeB$|!yuYGl4{+Y(1Ub3{4XT+(DMsUIJ7@RT;BaN1=%JK4}G1+j}ij|+4wq` z4gsPVB%+B@;23-YQcqg=g~pt6uBPYB7w;?yo>$RgEDX$al1|bCT96(8^@$B~%{)mu z;fm2hcBzXh6HlVfs{N@<-1qYAh?d)fotX|rAPW#uU6ip-tO6~@p_K78NYy(38m;_} z|1Dth!@w98oct5ROPP?g5J(;-tYwxfh8SeOiB9Ff6C)%ez#`8~%pCoW7Q8n# zP1AQ1y-g3`{NHa?O-sv%NlPLcIgYY|Z%Av;i~8UEo8n*Q;zGu4H-J~{6>;(K$HfTA zy9`0`oznl!FB~p>Bf|@cJ?*s-p4^0|FgbtSfL{?m2FMe&)oasDc3RYu06#9?YX$Gy zjnRbv5_u->9l&%|+^N!9+j*?s988P=-w5lgz4BMR#c=D6BLmCfkCz`uMus4Hv=vcT zr@=H(^e0&N{joQhb?Xwph(e;bk1%iC;@t>O_rAarj%@UV?@ipk``=7K=JU{Q+W2^G_>9hD2yR}Jl=mTR$u!8Tdw8us|#`O!bKc&;Rnuw_Wx-ApZPC|{2lh#e*xU{;lJIQctV8=8+n*`xq8lg1q%};PO=k_<|pjuz2HU6yyRuAaHVsud5gAW+je%> z_Q9BvNghQCR*G_!s}fbIQ8F1cs8g!+!k+{R$)$`+#HcXiVt{ED*y4b*pm3OkBTVk~LcQ z_jEeOn`n|1j6cC-)6Kc@c^2L7&R;BNtoE|C&_fviK!qqqNlJMlY2kx2$y;9WdyJ_d zZ^Pe^#}l^Mryvt7@>F+=KK+ho{U7y=e-f>S_v!yFycZ95In$|e%wliSIR1?1O7 ziJMIa#Gn_WIJ-$_k7qdTia~FJ#dQhrxN0~{G0=`LDEk=*Yc7yMWEJ--fx}WC9G2Md zHitZT!g28jB@ndbdlW%GXsIB+0a@XvpFSd_5;!AhyfmyNONx8R`NgZoGg%r;GPF2U z8otg%Iz|hm_##51F@z~54)YLIN!q&pg%~!Kb@F==itY8h^`3KajU_|BW9*pYeIPs3 zdNOUfRZUJEXK9C0`|(?qjz6#0{5eN7yY|JO)_%$)rv&>^A?FH9aw08K89P*xBXh}V zIRxiPKY|Ohq;pAH4~wm7iQEdI>!Z ztfg7+9Mwng0t;&fv~bkve~r}A~A-*Vu0!3n0zjoK+r9C))!(B z^L%K_>2q3ptLtqI{?j|+*sGt#L0pr+6Vwf!Y*&{K(0-L_H)RwTi_NQ~W3j}v{ge!A z4RZ0Y1m9bDa4HTp;E&!e9h-lmq!ot1e1k5V3w8F#L08aY?usA>b)NINad<;Q&M3-f zhWlgx6r7AxPOqMHD1GhAGiAFkUiU}flozb7d(bBFTk)HB7Zg1cm#`%|xQappK5ulM zMrxY29jqt2v zO|xd5zGx~9mMuIW-!G01NQ#I0`oCi#v-p5W&?k$$MICu1!EcNkQc{f$sL?I8K1ss~ zc~FFesZ8<_(eub_fb0SWJ@w6u1*+%@&yK|+s7Re`gENOJsyO7t7=w!hK<#XCf1)3_ zLw`VkXmFOr1XP*1!u%ZUKm=QwG%KE+~ z7m3hWz~FajbO9MbB9~Sfybi?B8V*ppg!6(J3GV6RHU8|WM|>Yk&F?e zqmrL724S%s=hM$8Ll$|lG(q%4@{qTpldB<=2cy@1tapI>T3I_*@bji>sFmkei5);J zI^%kv^5{sK{08(A@-(gIS?JeGL(i-tWXVKWy9_v}NT0|i9)v{4Q6^6acYE@yl9gye zXo&hfiEpV3^<{lil_=o8%*fCC`;iRIJHf$ch5J$bTj}3@ws}s9;8v}CB4k#|`}W4J z%3^&zK+9K=^-yO9OL}=rvPzW8G=K#}BgOo+=l41qpi7Tqy(_5*@O&Ox3OMd-mVtG-PyR>n1eO zSlTfX&KdzFfsKJ%fM?r9W+_e0qBhaz)5FV1KjWd-kpq{Z&i-F_ajg^o|L-g;RY3f$ zr&y#{DF6ioR+>acPC>7VzW4hdSRZL8v*%W#-n4|(ypSTix-mIur_SNFMA3XXA3pbQ zGCTC39eJgt=}UQiZW04BP*DD7mRJth~T32LuU9j|c$8*$ER z53T^V^I-iSumeZ{0I=~?&R;Udo~$>f9@?8NTY53Y@~RvlH#0-^diF+`+Mo{H)vUyv zv|uKsw}w)dhqLmT+S=C>uMfS^keZumOP$U3)a!qsm`;vHudtV<*2QUQ&$fGF@V(wD zrV>Tq+?>O6};ErTVN>KqjO>1y};yx z9+44b3JJ91VW2)wcSQ=i6vs^oCV~P0bC*brk?~(6lBdA4;3Avza{7wg!K2b%kc}G! z0LG;G3(-7Q*w zgMeM(nK>aqfgmg|Nwc;Lc~ph!Q_Vm<))b2=2rAN2)f8RUktYLF*~UJcS2fs3%^m*` zvxlH&&jsKqh(Z(-do6V2Y?XC zzh&9DS`Tx~KI8Tc%Cn)QqNbsxqi4&Gy~|k+nfU=mDTjxDlQbQ5{TrMgM7@7t^F=i9 zC&N@U`k(98P+^K@Dj}rBLPW(Pg|>)P+9$+RCL~neB&Azjm`_i{M0zI#^g{>*u_6+* zF>VG(4v<1C1(1vaDS+0}1{kRX7E%Q)t*U{}QUfe2wZL*x2P`l3zzWh9SW(&mD@l7` zW$6H{!uW}C1XhKsm=%we|0+Q)lN!`n>FUwSQ8Fk;ijy$A+$8ow3D^|=*W##l%rBE| zu*o*N>~qL5r=54nHMiXJ$TP3J^U43ld}(%ABR7(#k5o!b;Lq z*_8B|YRHkEuWS`s;OuinvQ0mnP?W8jq%0!Vf--xm_SSrCKzMHgkVB3VdxSj z9K%#Ik(ekqN$9vrXOb|VuoRcV@6;`Vn$&Ku{i!(D8fv_?8EHG9KamJ9KsyN9KjsL9K)1jE@CcW zE@Q4>u41lXu48Tx9EFGkq)4OCM02Wys_2x@B)9Gqx!d94opYYT%hiUtiYZm767}M$ zTF+818}aq2Swce?Af+*lms-wBnZ>(ZZbO|@iGm&dXa&Okx9tun1_4fp%52Z+cHrf2 z2gDW7t)_aBu&_#hTkUiv?L4nYF{l^@3u#pEf(^`8dv}V#g{VP+ykvezqAc$ZzU&6o zTM0{*m~RJIon)v2x<_1$=RO%24WKZAz%zb8*s5xiv!8(~bL4L)nhBxX%Rp5KxpEoc zTMAtJ3_kmlBt>e@5v0mO?vFwIWCblL)=E<&DHSWMxZ$CyiPT7gL~>Ie>WVdp>19gt zFv(q$0ZDz}_ths??(Ii5D&D`26d9w~zg-0)p-j2+)P!+(Gs@A4*vZ33jvhN-d*R}x z%U7*B*$cN;BH6GN=% zTB{_Hmv+Hj@BQ_e&*WE7p_z(H(Dy@5%1W!KzG+Rbvj@HIYokkC^x}77ch2}&D$!43zFe6!;6R@g%U={gBEqLp#$@=7|U@A|M-3yCk`;!;5Zlgi_aLL?~)DE_%wse zm)M5bf!LAQso1%oGeH;ruZ(D8F_JX1)GEcH?slhxF1qhyB}b}JpU(#YUNRZm^E8wXOkUd9(h!=r}%Z~QR4>}=J^I#}@u;G|RaYZU;vWA}fXFQ4@-dhE7v8@ml7`tUn7 z=I4;*MGK^=*`+rAJ!-+M~LOY%G(a#XWjIBe)tbs0@(>4~bS87ig zLlVRKuek2Ed!BgjV}?`g#~`Vpj*dC!Rl8cV5NVK-*4y#=r0Z6VsK0LU;OQu7={X7D z#h0H%69t>I<^cN=-z%-;@yb}`r@!XaS}h;&$tW0GAE z>y#wtB{(6?W!Y}XaZ|2aD!H$+2Wohxsm~0)F!`?DFThV`KTPursukbLAZl5T~p5+q4ull5tT)JY*ojr&Q#XfE_ANV zZArcVf!figO4(V-LkXk3Opc3oREDc6x+C9RRXo(l2S#5t_{|yueIsIULHb9+zyb}5 zVrU^oqw_E(&${KzmOV#}t!rKjTGX|-P9?MZy7GBEnXAQuHC?LW}^1bB!ufp3;{{#w)xziMWyu0$& z*Osz?aa_l6~gMwNVq`k3w4go6Iaxn?sm`wcNde9 zx*m++Enn-z5i-DE7i+>O3UiE(6P_-RT_YRJ_7#Z2F1-t^%hDVFR*WYg#fYablx zJ-*aa^=FU`tHn;Tx36y(n^HH~ox55zI=Ii9osWV>UOT<)`YRprd(=W-OrQBIuFbZn zg=hfRC4+fq@|ntJI?Fllw~%AuEJoa1F7;*;d$Ai!U4@n@xD9FgG}o1+bJEV%SIV~J z24VqaDhQZqMSphdK^3YX7pmc*GvRegxZJgF+@e@D}e@ByG4*jv=RN6XOgTgN8A4+y+)8!M{g#{kbNk+6&kfCaQdZbLuKf}XWm z5~cA_S#z_Thr(tBH!GX9GVE*CsqRm+o~0_ycJvv!t373=_9NiYTo7xvAW?G`Nj1+v z_V59R(moG-`mBjXHZ|5}CH&XESp~xi$(<7^rdfmF9idv+nirs(b<_hrs5qSv*?FzI z0e&7U#mvWkF#<{FOl)syVx1aEfo8Q^z+3sLG=`zsNarAeqLzGALTuI#t`2UF*BN%3 z`3_wVv`!lBJviD&&LmL9FGk9HJF}{l^N5gs7ACcU%*=Pl7>4q}z>B@Z*vWy3KWXqw z{c!Q2WR`&rVlSP1>~!I;ycLI8g)@c{F^7yy2M1JxD>q`Sh%7j$s}=FESW_SP#e*2N zzF_JF^DkITe&=V)zihp-bxz|-dFMc_ap16w=WH5{d7RT;Q!Hj XIkb_z94Gcc3kbXwa8WCb#1sGkjLO9} literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-150.woff2 b/public/fonts/Aspekta-150.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9dbf77391c5d5cf4d14f61633da6ec72fe1558ca GIT binary patch literal 21596 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 H6#xJL;A-Xh literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-250.woff2 b/public/fonts/Aspekta-250.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..aa4b382ee012984a75be8db091892f39f64e00eb GIT binary patch literal 22024 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�{L z>z>f4Wh<<%I{O+qdgR$N*OmJE<6pFCGb%Pxv;F}V=hx<WN1N+CLpVp=VFmu(d4H0z=lPWgaW@N)T5=i#+n0P0nivuj!EZ`!)PLIJe0?#G?0wk`bY!-Jc)>^Wd_ zr5+xl5{SABjiES&bqV65hQCJ+Q31Fs*vC_}!U35bnG)cwOhe4ZDsUEhjO29W-y-d!01t z2Lmu5-#?ruNE$E*Casq%3-^`gFW%K>la{>gn{_*E+qZ4lpTBK+>Kau#YxJP>&G_@I ztikq#(z%ny?@O;VByMHGv};7^0S%(#jGhxtG3S$2NC_0YAGfl#Kc7$x z?ZK>yv$jCYMWS!z0!|VG1PJ<((hZWPkY?Os%iOoz(D_YuHD;aZlo9y=bRhrN${Lz9By}JU zJ8=hm1zt;d*yN_|?B^rGwsoQOUd1*yt!JR`x_%#?b}-I%zvr``A+JS>$2ZhYQJu(@ z0_XBNCO>08*Z;g^iET})5IOZFqljJi$peXY>#COjAHVEBF8Cg{AKdqapRL+giB*pQ zPh?rS{0+XsCmQlKb?5fhFSz%i)VrBvC)TmKCuWsiu$`?bfB5iX6gjPZ%y@G7KYV+3h=EmSsv;nv#qu zqzpibDQ=o_XY)~nGi=n!-!V|ZMuRMP9)UH6AOt5}NOtQP?qp9Ag3He9GG3oKxeYET zrj)8fn9q8MfDm%0#tSjLiN1J*^spephe<){S1&q=!Lm}i`6UIi-~PD)*RjiRJUYhw zBN%-iQSin_QnLAVu86~nh1SXVKe66h4M;=GPKy-aH3wcOYe`-Ymbu?Tse%kbO&^L2 z|JazTRf)@IO!{W5oy1?<2V<_LySVL4_EX!>TesQ33D#~?b*9@+3ETJJ9#DHp!8a>% z0t{~~nf&|s(9BlkLV>9~;v@qom*n)+l66bdP9;V%IE;c0z93vN;buF2wB$3G;If$= z_{NLS9e(|K3@3?BjM6&C9H^R~RH z@cEE8dFSV?`S1}W1H2Ve&eEn;vk4y|P+9_c`po<6sR_#~sg*IAHcZG~1{;Sc31EX4 zF1!-Bs*Y;H^hB?bC_+q6eU{G>5RF6>2*X9)m7)z-iaHwJ%2dWI7VaZQQ}jfdAp}Lk z6;Zk?qGx_dc@bj(AF~vcuBg%g9E1G+#(5Pbt<>Dn>UePq5N)SVB1+ z9sxI0B`2Uu3XwQd_yW;j;;={=OcDstL-pgvi8z9OinB0SFhPjnjNYjWphw<`YQak| z;ptPU!o66P$QKwnGRZMmrFHW24Khjs6NVDRg(IP^suSPdQS)AB){`OvtI)y3UG*Si zO%!cF1b1nbK6!O-xAZzWEw9Un7`yt=h-k(4mhTncN@D(HImPsbhPmzbxJ` zs;9}w#KJ#p7p%upOrlI$2p9+~)vS2kdBBTwzQP`Pk#FG%&;{69dQOpnO~`V1g|p6V^q~yV z_HsnUGvKwU5Y`)}43|QmE@|*3AJ(l!i1K%GyTjJO%N;?+PSv(kvUbL4-A>ZzCB`_|t{guPG; z-z6=3eKulKw`?1>Wk+^(H+Fw7_F>;A&WCaE3=9l-$ata%7&0tyB997&Sl|wTO`3-v z$WUj%{zaT>50*;K1)@d z225LX$Z6L+^uiBIwnJp{7$j2E7)dh@A5;8ErxGT5Jc*~2X8P$^xZDxewEE?C3txp; zQNGi0ofpBETCD6}hJ(B>oF@Auf}feB`TNy*&ew1+V}O)=Xb2r ztj%5SpO@<_7BDBoQosU<{}ZlfczH`ide{uo<<>j19b$YU&~wi5wS|X+4g74Bi(2R6 zkzJJQV=}zP^x5zd;9tTwBUbo}Lq4^Fn`d71Y8*rx;euHWC!HHoVTVW4vW5=xzgU^o zVACW|mnb){*A|@f;iiu(S^*v~kF;>CWjyQn@c66f4QN+fJb=dHkdzJh1h2!B2q#R* ze}dKr5q6Fd#=Dg-MnV6a6x4VqF5)ypZJTsU!x;DCm_!zfe+-uc&2|e-h)X5i13`;~R@rfg9mCpX6E8nXwB0DY3v+ygdIW zwCLjUhX}4P6_MreqFVALiq*VS;W9u$`U^;sqfrD3k|aMZ$-zc~YWZR0-n9;F>+aOU z9jrT%CmqqXJFzqlaaX01!I(32ySGj=G?cDu{PT<*0;hC0mL);)6TS;R8>(>AsY-LP zn~VQ@K}m~5d>71VO02+pS$;*i$mcZ|JR4#-%@-;~UNa?vekrwIv=bohs zQEG^>@9J*hF1Vt0){>dYQx1>EcQP596ZzcwUx70j6;sB5`Bk~#Ii*-%|1QjAgHoeX zqWfD^MjJ$z{$eTMkeQ`v%h?ug$}pGA`w>2KdauI&Zs%Yjy@k*7968T}$=tA43vSjc zTFPjJ4n^1+K|4jQU|dJ$wkiPX(W>#m3eYyhg5stR!it9#ZtP8Ow{XVJ3e|zI1C=oN zK{<5Foi;d4J+mOT^iw-W`b4?R!m#DFhr~sG*X+`MJg_2Q-U)LObO-NmG5pRRzxQ!Q zCVKjZVBy|pr4qRh!&HKdG6~ zO^sw6&bt`b7#)5P-e05U6!KgVOJwr1b?0Rw<8d`EcZRKe_*uC_zG$fo+_b{N%{qk+ zHFh3}dbS|nh?}oKN4UXpm6ud+)zIh0TRLABGkUDCY0+chKax0C)Hf73b3en@s2sCl zmVh1OkTa(f^StcB)HeDknbqey;pPptd-ByZ@x4N?5V!}nmbcE`0S<8xn_@Yu^+u$* zziz9+@p<)T`j6ZW&WfD8wKNaOu*GLwkH=QV%YUkcQn{uP9uutjt{6AzQI%$W0Y+uF z?JC#!tsLWp{Cw>RO>`j9mlLpK{IlKu8D$^@)R=zXdolq#NZ<&<3Cj@6{YLz)dgN$h z&CmoBy&D`&0@lNT0)o6#Zw}mQXVSpxl!%j0*uK*9q3-h2ryE>(j4RCiw&`bz_j2^>|0kd}3joLgVXKos3K`^3BVE61#gF`FLDF!v0z@Aw2(03bkjonyW2`6~|1@&B z735cLw{DZ3`l}n=SrT=HW)l^S^2$p`Y*dvhK3#v-oOKmLD)`%0pUjwKOJUc{3UIHZ zihy*l0l)#4T<>>ofJ{I>pb?-2pj~tST>!lR0}#UiqXC70X@EI^MU|dnKnY+yV&D`Y zd^9WqEtJ4)=nuuzXA6{pvnGHQw4enoXraf>5}Eb#3$(us;=}Icxm18Gx7p7)D))pq_%#JcPh0@xOY9o2A8tDE zqK%-@aN$r{1w8bcq4y1-ir^Po$UAif{X(Yt-u*Q8Vh*Z zHK@=SK)eSYWHj~I=4zt{+9NxbJ<^^E^~e^Lc*xR_UX%LRVLI!>WUgi6_S(Z%b=(E% zo_METq!KODXVkgqlJ(nn+g=J7kx;@4AvK9cNGq%t4i+*ATZ9sXtpYZkQ4|MI7y-lx z0C~+oDIB6LTcAI5EdO2rg*UX=IzWj5O)1IwYOu&IWw&Xh&khRMLkS0{;0QIG;LIf^ zJ=gL)5jTBYKmS2hUv&FJrn8{Wm)2c-V9>Yjt-E0Kf35kTun%S#CK^ka7?d!v*v!OX zFB6aBOajV-5^<|Qlo?N$D7<4V_`yU|42_{`8{-3n41h%1xd1{6IS4sGOj$dCWEB7f zYY$K|MhP&QbpR-1RRHCzBS1S=4N$>40kmhGflAf|=)k%HRk!N~bc81>CicFbDB~q1 z{%B$Yg#v%Q?0Y>sy4j?YSx)&7rVqNy&xvFq3Xs3#DYMa5JMDGQQKy}E$u+m!^T;!= zyz|L7zx+#3P9@cJ%_D8P{0q)lM3&-8%33uwrOK46o<^E!rJYW?>7}1RhADVP^zKYC z!yF4NQEZh`>ut8(Zu=c}+-c`sa?LIGJo3yd?|kYTq7X3=F$pmlF(s4aOo0^B5YrJe z5Hk_85VH|;kb0ya(jOUs3`7PYgOMRf12Pn8L|j6KAx+3|WCSu2X+}mNEy!qOOrCo? zWE?UcnSe}0CLt>!laVP%E3z`ON@Uf@YVo=6)6R*^jLeP9ip-827CAg}MC8cGg2+*k zh4DGE{z;LOBlkw`i`*Z1Ao5_3eH!H9$Rm+QBg-Q%MqY}%9C;=3YA?S#@_OWr1l$;e z1Cm+E(Nqie8P(~C@|t>`Pf>-#DdCfQ6@^v9!(^$J+C`U2{$k6>UtGNpQ+$05D50UK zN^Xqtr97*pRiDEju13e4E0rA1M1Tr`(EUE&6=6mI8U%4X#P>?S{8a%(4xCqAy-7fk z*_it35ON@&^^q&Le{5Ze;(8!c+ywZwrV| zNI^tnyzJrCdeVHOf*cbFaF3@&2=b-9uK`#@{|4iEPXjPWM@|FpR?Np>K=3Pdj(XGFjJQ72nlORmC^F0N(ko2jS#G%_M*1z0D|o8PnJP|okl~Bw-Q^$ zzWV9E;9Lbpg&$yOgmaEH-t3+r1dc0@emX|3?X}N-2OM8U&=-&9hmSQoFCY2)cv*>zuak+xnR}NdNSL zbNYW8woa)Zz)S#yLX-#S380~pULZ?)gIX#Z5wPBfQnKnuiJBT}`Or1iXL5ZP-1XjH z|8vQ&phAl(HbXxGo7%F})mBH{4Rgh7U;DYxMJ|3PcIP->wL+qls3ZZ0;hscyOLt!v zpbOPS>8h%sp_V!uYMhCt+UK+Gr(UDi>UDZQeX!oFFIxw;=dIh%-*5hL^>5p#UG#F!Ghh0# z;6+pwAK#4w68Q`v_k`}I?)WqL>kK-x&Z@Jir-e?27@^P-!2R#Qohv}!?O$(S0kIx%I_J^@v#Tzb=`wXQ)~dk0Zu!!;evIcR6>^~v zYT-QBX%;c_;+DB4Yqt*Tv>pKv-PUhIsveOTut6KLVH>f6jb7m;kE ztq*Hy+Z?lqRY7bg(spk5_CEI3*g#Lsj5Svuy|mR%Q&Z$?DNl2C)icWsGd0pX37p`< zQ$@jld+)SJ9xK(<{PTO%=Tjsw#@0~_owRYHxqV~uS{v+s9wTLj$yZ!= z`we^Ly^jUX)&7lipd;OK&%5>p>5yQv> zP)0dD$S|J+mU6XkxGn0di_6v82*-@2T5aX02=OsA7 z>ayx?u(_#*TT-A8S-o?e>=1NmlTi1c%K+Pjh-PB zy4v+QyG~2U*}k!kJh$bFl}gT+M}w@URV75LMl(>2w(P5jwhVR5s;FKq^IkrTn~rrq zSV)`UbI%K$TYl20&-Rh$%c?Rr$+`^*^Efh#Ex*WBWS&XH zvh$uV%c>XG`@9w_$T=+w3p*plsdHO0iCi*oE12z|v2MG(*Dq{|a0>Q~PSVHhamEcx zU*psiAChHmUPtK>y8iyj{!AG@> z`kWhFNOd#X$2KFcO6glj+_3D7SYwsG+4`B3dnRrU!piV@Ir~ii{OmfZQZufXr8-T@ zIHGx6=AGautJ|@n? z1C+*HFS7AwK*ds%fKqz^ap0VU$JhiFpAs;^Nnp|_wX~g+L2E20hle6gg(|jlj>z_n zQzNdL)VZUX2yr22VFUu&rfEc6iUdB2B={bZ;ve0m445mShKfzd&b-P9RKR~N;OwDW zK@X+=E8-jwyxp7%{(HbWLU#zYmOV7bQ^=;QeLNd0#pI*^BtayNPM0QX&AAk4R=EYd zmQQJvx>izIzaf1gt4VHj9*J zqqJ(Ybw|dE?J|v+N=b{Ktf`m1eh|?hnIiLKfowxIkWok_%iVv`OyZa%-mG5~lbDvw rRZ;I>F_S>12W4ZjJOZt8TR&e9JzM)c^w){#_~zFD*7g5~#XSH3#$n@m literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-300.woff2 b/public/fonts/Aspekta-300.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..455e882b84b9006fb2028a3760d718d52ee9127d GIT binary patch literal 22600 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 literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-350.woff2 b/public/fonts/Aspekta-350.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f2e25ea415a2aca24be4fd2aa36f477e9963ca38 GIT binary patch literal 21956 zcmV(>K-j-`Pew9NR8&s@09C{Q3;+NC0FER809A7U0vVYA00000000000000000000 z0000DfzT=%R2!CV9F7VGU;v900X7081CC?_1_g+I2Ot|ujR(-%#tZb^*0M#Q{*sPH z#ISL|9$VNo5@Q=Dsa)Cr{|QOu5R=+cEpT&^C3nkZ2-Ph;AUg`uY-+WSNtuE0h1gul zo#u~fHKh}uF|B1vB+>ZbXj&(5=V=s(iL4xJb_6>sZpTi_g*0wLIqE@s&w65)UcG3e z_JRB$B(jnubUjhSsR{54Aq#_wQbU)g595o5TCodlEEKG+B!ru+Y zz~ar*j7E$8V_nCOTk(`VN>5E*G}@)8-}}FwJ?DocEM$d|DV9h5!cho|5+FQMpak~a zVK(!Ytt%Ce0O$4d7m*T$2Ef2M z@o%7;FFGIH-~n{_$9C4=`*-D(8JeHQ#6vQ8ew%j>_=MG{n1vXHtZ)&TuF9-MxvKWR|F&$Esk$G%a%w;Cx<*uqi4ZX( zS!0wjg_y7gV?7#i#46k2_3)ZRhl7Ra;Q(@uDQvl0lQEl(`u|V1^>44DZn^5rtF;z) zRloJ^f4dARprV*E<~$+8J$9 zbs(wt0ZIoDvJaqS7*0y#;b*51a0f|4fYKWPC67R9JcM)pF61s&A(ub>w_ko+hg?+e z|F>VuyLSegMFz1@Ddl}ZEm0C}#b^I|0uND>sFs3v&NhhukU2!)Deg6WnTV{fEP$pJ ziq%f7+&S!((&;8ZnJ*%T2c;{vBj?8#+m;5!i*Xp6bvRjGd@YRv1*0a`WG1_N|2Nd~ zv}4}|u}gwymt7x`5`qMg;O#)TluZ_gg2U)0f>S|wEI;U*BzFsC57cz!8fMDwE$RCq z)HcumfIQ$H{CNlvVaJ_A&+lzf{&^GJ((fOYc_2Nv|5Y7R>+$~*Ai)w2w0s1M6sw9l z8fl@uu6i3}jLBwMXoYpQ*e652lP|biy=8|WAg%({xshM-jr=TK=DZbS9 zl+(->wx-SPY=6hfskoD!>vFexkaxHKyZjviBNU>-1PAM71>2#Qvc@hkvQ%g>V2cy3NhOCODrumNUM5J8r$&b}Zh7HB zkTRHnX=Ij5K_!$^SuH`Lq{>mGhWeUnBa-OiN+Ol4@+qpca7i*X)=CE*47q^o>~hL= zqZaJA>VaoInr)diwma;+DXX6N5GZBB7;oY!r5+?oqI9zeIowF2i!J`dk_{O>tK5o_ zQuQ_0(|8N*l&V~-VOt$`RlLj!s;sHb`kN?Hx>C(fy6&m_LCa7ArJrNrrB+;hz{sg{ z7O%I}=#$Pk?~59bs}NWTRI`Kk!CaIB!{Rdo#YVXC{vx1 z?EbwfR6$%2>MScL(MlGSYmGa(6Kqkm$`VSMw59p5l4?aPemJWr$`ugy(WJs%x*{FU ziw_l57z3yd8dsiXsm7;wH01LvI9an645RUSETZ)~uCo4>T(?}b4)+KK8T29Aa2@uc zyI7TM#kFfI+{jX{PO$*)fFtchf*``9lHFhmm*!|uV8T`iU>nR5!r_j`v_(Q7;z>d!3VHV5fcFM zOSlQ~5e_&>!j;5~93*j!Vi9l@3wBP&!U$r*a5#-M zBwE6kCkeKp$h{}+6YS2(6Ag`&9n+9oBt0zZ3`Tp(0~u&XYGE-vLsoOr1r!VONaM#= zpo!w2ro~EWO;}g<>rk|k<9jkl)nwE}qKjZUw-^v%Zy{_DBqjQivm$|UPtqzoVnWTm zMR0r)$!8=3N(}RhD1qR}N5I#7oTagH;tV%z{fn_$Th#{5;duA zcqLRK3`i9S_(CKK!!`#&SQNVrED5-JMXz213~>n7X9|=`FiAV~5J;~&Tl#A+8fSTR zQwa-LZ>&0g0)=jz42&9Rs;>z=y1Cj$+t>DUZg}9iH{7}N&p?j?GZdeRFE8y8JcU^vl2T9aG4=d~tA<2F%!U2%GVFqVPzWh- zRx?{s(_orJtLQ#@i9Vz6sFvDvM~I4t9DOi!BKnLu@+W09F#v(Ygp-iQZosrvyCMo& zR_(g$_?3G^5U=QP^9ZxmA3cmxRv=2ENzln3 zcXd^hw5@{*5r>ue%X1s0e|}^rt>_v6lb5O^#Av|_UOGPu>zEU|ZI$i5YtWvNBGcN%xi;iG`)$J+EktibI>d9OF%F(#_#UUocXn@Wvs!3cnii zGReIFW`E%ni=Sa*4irva0!1+^Cqet~lAcTyGE;b!99vDU_Nxf|1oc$#&Si4e!56za zn6dIrIg04=@1Z?h;m_*vmGWM;BrJ2%l|0Z}$%AZjuX)twYn?*}uH1i%#M&>-nHE!q zjBOpIT9sb1R*kEb%Q<~0tVNlY{JK?NmS1jpa&*T~0V!{iHdykjR-E}`4@Dysv_m@^ zbbbRfRG9$`b_ji(@5PW@#9=)QkYLJZ#&Mu~0~1Vu0yrbiJC??-%)vr<0Su@s=vc%H z*$abLfUD#1U%=g>|sNn|Bao|H+w4$obFp2S=0x9ls-iOST7?1_P~q&#@il6wa$ znZ%0b@}eiZgGNM|wHr>Mo5a75WJ4)T&Q!Eig^r~3$`i(HMS0hZbJ)*odAV`&la8mf z$qBi93}3z*{ImjX{nPB(B1j2&3;Su&3gtYxw|z5NuYZKke9I@}bw#UHA+*~mW1u45 zm>r{hLD<0T+EfP48|58O9J_OVvqglk;__$h<9kDe9Y-};+LPCS-0#z_6?gR{^eynY@S3*V?0nOlxP<0wR4hJ75ruC;3M>sSvKWI7(Y@~xnQ||PO z+QjRg{aN#2Piuc9VAvb;SeJErvzlW_e6fYemwcw#sYOty9|!dplN{f|7x-n;dkF7CI7OYcRcc2LUSeu^4YA-9~Hp$L!Q zo74F3Cs6-0tdw``CE4!l)UU_eRQ|m06BZxKZuereUSQEvBmO}PBD}O?mX0y|vly)Rr=f4U1e|IAbd_>r!O#v z2{~gpUp~)v!FSHm-_4;`paq;CHW+sLm)YLbU<(RvfWbRnhG52n!v^t!^lL7oKC{C+ z-bsO#cM?!|$Q-0DO8&fMrIHt0O+0xc>qDNbX?6Y+@ndg_L0_Tk+I_d}PAs~#J1VQT zI2Wg?AWcA&CO&Vyt+;dvu3Ttd7MzT6MA&9_6MTx# znXScqi`FfmR|}^nmDJ)wIyD$^SI?*vN#f$Jn8Eqp$Lwp?i;c*5r2n=({_ifSFQ}1L zw86rRlWY;?HbKTG9OgD-wcFe8en8@Y{*hxgUK`l4k+!=%>j(`BZy!%zeqVNG2yc`i z9mOhcZRLA4LtfHaIn6Q6j>lX1H)takJMkM^Jv`2OdH90hKwO0f&b3Rm@G=hISKH zud>Shmo2$FOHk-j-MW)cq1W{9yZMAB(TwLe_e~!;Z%UAmKv||m<^#(3G^|?_+$GrX zX&s>DW@T_a3#Aqep9}m0xk*Vf7GsYhEYF>R8iA&&WMlKdjIFfU?Xf^?aM2{*(0%f+ z{L&iv$?8kd-^&JxRS#TkAn_0@%6LUln8bHVP^|d&9FP=0H-K}+v0V1{1bnJsc5<^J zB+@}A&{EwQaSG8U-Uz}zfx}?H7@?+ocHqMv?;|YUCOg}tbAzZ*rR zfabHwJuf4Bs@DoSuAoiFz9{Q1YXi!tdz`zgE*6xhI23fYLuN~&s6T2iuaTO=^ z>!1E(bRyIz)})uvh*{HoVn|eHS~%LG?-tlG=$&qc|M%5Hno&2(1D)w$^vYqs{^?9b znlI#=^4t)V{QU;C*AwwDjZjTZ?HiDkBqQISa{qO0%aLq9x8}yiEU&3h+;|7NPdKByqsiz zN%*?hjaV~Ntmc&`a?wN8NYoE`SXxo`mI!NH*5$9(IL3&LSp6ap??G6;ktxO{Llt`f)X>JWr$36^ymA(w6* zghB>x3z>0;$Y!Sv!}Ji&9wOKmAx|U+h;j}sG3>FB7c(fZnXmu~i6+Y$V)h`G zymS%ie29BY(I6g*u{4wn%LfT^PC_D{+DH=TFHMGWyZ{wgIY<$gIdSQgJ5-00_$Zu; zPsADf6wZdl)Zkg#OyhYtkGu?NDbRn$a#I%2dY7!jopqo^h-Kt^wTP_jpM5Up9m z7N-LYPN~fWrHhIR2zhB&=uUK96iZ+yq>D{f7d(lckCA|}MDG`v22)}DP-aV}z;q@t zrnHOqSS zmQvanCn7(VQBzX3bU!xIE25Lchj}(Q;+kb&LJ~Y-NHnX+u@a}1d47pz zoKMwS>dkN-jrUebwe>XGY9_OI>>+=-@8659ve^MQKIy#M9OXDCx&8eip6BJ>@`bPc z#_#$#&+sBI^M%;zclFi2*Jt|NU!P-^04oWK3}I2JvEmX}sHK(OE}%b*!H$cP#oNfX zbKhRELa{$$8$&w5vPfknqLp5`E8l7%eXagQEn#Vrlcy3Xd!$t7DVtJN#+s!kbVSda zS64NwKJA;kX;1E_!J13cwS(4XJ*L~ij&9U?wNY)?J$;++@q=FCw3^Q658aO`|@eujsqEBNJ1c-HGNn*ZJ3k!EcBgKA)c}VO)&!I#v}`Uu`9;pMS+$ zozL{7pZsQ-n>lBG@2oEF^6qc4KR0AaTb}N*d;hMcY>ip-*4xRM@~NB786SC^SNj{a zq+3MP!3>;50d7EyDLf$-X;{0{5L!dU^ne-c#jUv~59fLO7mx7Qb{bovt&MGn^pmL~ zkq4?FXA3)pq_|VMmriA1nN-%7%DORC zY1-~}ZMZM!&b@t~*4swdcsG+~#lqIk9gQz+vR04Nu`> zj49^$;6ffuzz&=s0a73Xa-aZ8pbV;D!f-}#8>1P^cqTKQe=wgS7V!qlSjF3HU^Ck} zOq*lQKMDWuzttEYJ-ANx+Y?2w@-M>rvG&Ek@{eI%l2x^4c$4}0Jd|TuZxPE$Z&(}z zrK858tIQ-u3xqp3rx&tE<}N6Oh9zc%aamlO1=(_I417ieL-jWpehzjL)bCJ!*09oS zGZQt@WiBRjxR~{>KsmVKxg4`@eyZ?|GLuSa^og7g(g&NXQF0VqGIE$X9tL@8FzI{K z0YUbU#zDhWd>?*MbGDJNr{ktvh#S<%=#ZFYN93lgqOYA%ErlI?A5UUb_6>v8WrHsW zb&>-Vy&KxX@A_CuM!oB18CY97Aa#65-wGNz(RemVo{Ohm`b(z2h8(6TH~fvwnK@4t z5fFv5jIY)egP1b?uLfnz`O16nU_2G;<#e}7HTj4ju3Z7Cmtp;zmS%B~CL5tWM(FDh zODzm<;_pn+yd6w{7mJILzBG{U{CC3zOn?_*8a-Z1o~Kh45q%Mt;W2%nR%HVbJyI4a zmTiAVuTLDiuNq<0@aeqHER zm6*UqI8Cb}_+Ye-9fbJ&QS;z~i6|Tg0V4+E{x?rN_0M$jT3M*YL>Eb0ou$$(z3#` z46_^(0D4ZQB&4IeN%uJ{DpI6$wvN+ADorF4K%6R+p9 zJdEFCqX&L~_;w7IGl~qVyVWi83mX1_OGLuQz49duU<@WA{7lL{^ZnD@Fuj^cZy0ky zJ5B{hBNax<(s=4TV3a&4vbtj*rWWZeM64|!IP*~vSx*o}I=CDZ#c*L68cIXNmHVLo zqe>E#BuFLOw2P8fG6=lD3vhkUg?uJMhhB#r0)P&^S|S(o8K^7NJzt%Tb@yp-erru014<8LwG4ligo6FIfn6Knm7Pub?H3e|G567& znLEhGN>I93UgvQe;Vp&zYdZ^ME z3;Aq=t=XDEt8jN9Xyd&dz)y#`4OydcrIM$ZiV#_9nw&Ek<{cPOaDs*i;Co zu@()&9-C#qrRRN&?XeIp6lbJ!(hI1~`$+Q_z$leD-b1526*LxgE`A8}se=*&27F7e zGV*||H^upUy=o)IimjW!otVJyy6aeJ9lvrupk%ED8D1t|a4m2yLbp(NLJl-6&!QWY z(CXy+FL(iN7~)tpj7r0?b)1$V)e*l$tq(Mf9t2=0v^n1ceIO)*)8LBsuN4&g+_RdxIE(cGY0@S- zSh#Ct%dq-ufG; z=F%T(Zn+$(PRq)^c6+<0)wPxR`NB6{CveBRGopMMUGAWBnZ%EGt!p3x^}y1+>G1v$ zK*>pt*f=%3v*BVVb+JJvw+L;v@}nMC{c5V+PHF6bN(Iy-N<(U(EIbLT0}9)l?5p9y zewOV=w^Cf@dxwG zNAI}xXne%kGjh8gZ}U?;J74YD%Ezup_?#V-s0IS&@n4nwNJ?SNt;23RL=mfDaj<7T z|J_(Ze@MhY8Yu6shB5UKg)`_5Y}!;Tw{(j*Qcp+AU+SZ9tqnz^r{5V!+4);NZOko% z=n)tVUq=eOsGIy#M6IhQ4Q{%Y{>5Z@VfhOjl+Pkcs@Bmd?Mkks_G-XLmM&m&l*KvmLHb~8jdoZQ2>DorBeDo$r z?>4Hols)a|h0FnNJeIP*D0BAZi2rR)+U?VjTMhym`{p)hP*V>~y zj4A48F0LL>sDT&Z0((M0PbN?Nq7Q?DAvM+CU2*#AJW^vt^(AU=K8wi|PYNW$y)^y_ z>DCUYp8uxS(bLB`L?TO+>!kVni(q+_7tYNjW~_;xg)-*Cj9VSr{+u<5wHID;AxN2xSx@CW=3_J?~x z^Rr#0{+TYzH(wLJ`xe)B8FZu`RPgWRr3Xy2GVH?uE$DRr zBn}o_DJgJCYdpiy8F2PbuWn)l+)`eE4QxAMwKWUB8a0BHB99GOwF01*RtT(-cm*ZgYH0k)&tTv2unYBB{@9{|Kw3bsqK1&48ahtKsY z#_rz%*rIt7x_~9X#wKEDEN7IRNH>`Fvv7>YiL*;_ML2eGseY^Emnzf;IST{?ZbEg0 z(iNlLu=O%l1=H}T+d-EQ@A_%zvlnLc>0*TC+E%dA5pa0zLO25$t+^9YaQ49Eu4e#u zwI^=Q?+Lc1Y+fMbZ-ClF=~WSc_hK!F>yguAvcligEV6GXeASYsuDQi+7Dad%d}m^*{a zWE6ryZV+wQASoGwYYDPsC35CmZ;I|IXA0LLWr1+DUS`DCt>VXQw%EClk6p@FEc8|^ zb(3X9NK?_;g^%Cp8hGn$HCbW1)9Y-tZCuu<;#O>A(r#7fm^_+)*5c_9m(6+b?E1?# z(y4AZ@_7W5PL6%A@N6;Hw7@6_oI%6;S7gP4bl%%(3=Xxwa^z1YBziyJm+#3yKjE;K`mfW%0sK2>t$l-l}D;N-7$16ba-j9LUTpY0>vTIC|=$LzQ%B>m!K zfKN1+-aKVP5k5N(ere|>cEcljZwkqc-f5{AG_Rf|KFd~c4BGEu(`KCYiqsE))N1J* z!WJ>88n1#3c11L@?M7MG(EwioBiMs76U8LWhWWh6G_7}%Nkk1IkNL`Kxs@ocIMp+|YRiO=$a`{+rnF%D8%^XS}6H_YijJ-0h%e)wgZzd?$tQv64gl>hTUR*DwHZviA0a%kcTz74fS$?q*^^w;Bix(wHiRDR7qS)wQ zr>ev*=0FO$W-(8oB5bb6%naa#Yxl`*~|3Ty8> z4EcJ|aVW6>&`@q(Q^S)DMb%_`Lh=~dpV(M=xM+0G z(B@WR@+n=$1vWcb(mz`hEb`(#;%~mm*+3*mvcCZOp0BbqN(i>J*O~h&57#wuVb<7W;riDbd~QE`RaqtV z<13^SJlKzGzT$Ue4qI7_yzf59I#WJA3XV0ZPQn+;5Yw#kb$)vm^h4I@hY7#`C~O=C zk}VO*s%?Z#!c|f|cLjO%uiptvlMr5DTaR}JAleDx9f*oF?Zk;6;EC_O zv~Mc@ji$Tg^P5<)SwcU4O1IXeyA*n$ zZmo)2%d_*9+rc=Z=p)99#U=Ii#e+MyA2}@N{TZDf8l;udI{W0c9@$%`r7zyPeUTO8 zx*K6#cjDy66D??-`XhzE$9`gzX64U5`{cU6vib9(ukn<7oS$ z?pE`!TKkzEX7jZQ#TvPMoNm$HP3zEvksSt$ou zi3Hh739?ljbSveI5f`~U=HT#QNg=Wo0-G~A!f`R3I`5=9Z?I8syT>@+!0I_T?>ra! z_AFdf>$rFb;U`Z|7MF6M1D-f+aZw6&Oou_u1+In>QRLG_Z#vO1o2=Mu5mrbSa~Wyk z9A=WluyvTYJT9Hfv!#h{YPS2UDY0T6lbG9*{Jc6oa-Q0biGPWc^knn})(t(i>%Wx2 zl5&`{4=}MCyn9ru;#0eCyraO|89~3DG4Xu}n-NF-zMVGA-CaTe?gh<#^jA1()CHs9 zmRO~iM_yoegar44mI#31en*oYR9!XLKgUEs9c4(O{12z}VXKVbHMu9|tnBNDd*Jm)&YQssVl}BBJ_i42REWaER@EsIx`- zK?#9}(D>nmw-Mg<7C-GRuPx3Ee|mKr_8ys(K_(62Z<%_o#c%12vAURv#v872Qy8+AM!av5!7&HVHz=FRyiTz$ zbP4&)i#u6}0h*^SogA&Me?=ib#z%>Iyspu&Q3QK{c}=xq3NJdGo(~xPNYSF01isJ! zgYc2p6x-GW@TN>atf%`$oQ#bIBSaI@8%dlG$Y5sQRLKwM+4z=!JRmh%y2gwc)vf-K zMv&t3A{j9D8#N@m*+~B@iwKDN6Qk60sx(bFEij&1SEL;X>Z6k88CxM>+)0NkZL5to z>cZpjjg_ZA_qwyq=`PvMl_AJF%jiXk&2OZY;|YT=TRQp=Y;J(z+d*_)tCwrws_Fd|z&xFl3F?>HQcmgZU=Q|Ab8O zEI}x0IUJ6zmg%VrMfE6YuzsZD@uT-R&V*FolJN;QMhnT%utC@3Z z7ArW4i~XGdCs{~4yZS^$o zW1o|bj<1uRiBIR_L!>pvs;@L`fTcXvz2v}bjsCLqF1gJY_^|>10Y}RDR-OW{9c2B0 zUsQYLR`zVQDJ0|==H+gXBU%Jmo1)by1K~wz{#hq7uC^)jUPPuWKNxtA{_%NW^v&ym z%{nChL&tlwA;D_v&ZoYw18JZXevILkznoq+7ih1TXR&q$yR*0qa-C}*2TY?T<^NcI zgPjSgcjdQd(EK}Ka8wzIe;B;k)IQAx^_64adTC}yC!}uO6f$@_fq%132=FrEBF%3m zu!@i=ciSwv{CZUK@x$mAL&MEmR(qQeDAGo|h-V%SH$HeE-DYX!8o7~7uH?V7vD+R) zZiYkKEej$dGDRG0a^sCpTcU$ z06fagA2dc*L`Ph8uby{Jm59ZRyO3-<8wBbDtQb& z4K&o1^K%X!Kb}K^C!9C+G0x>#^QP^413bC0Kv|;n$&<+I*AX)eN!A7yl+IF#P>Z(9 zyA}8L%a=}`yo|mzu@>_khFr{=pYIlR4{^oK`w4qxI)1v1kgUzhwbN93AtEwTvI4f@ zlrIqS3`b;P>cNG=$u0IYZS7I#nzqJ2+?86IRw68e!?;-Bp-wXg3!Y(ryAzn^ff*{i zP`2w^3r;}Z4_IbYgXzxKPnpL>-HQRlxd#O}sapMR2y)XflLTwvlqpDXiL*T$sC!cO z5>~PN4&d#bo=BDqxFeFy>mB7zEEZ)E!6G<7IWXUs6%;jRV^5&c< zn9%vL`=EZu=(&5 zKth?W_1j+h2vjeaPkxxDMh8Ps%_eMZda|_};ovQdHsP*#Y75K9WS+~wfUw4xGBbSb zIzRF7cw?pbHt|$eb{iymF%ooLBq^4nJs{am9V9FHNW~XqQXzK8z*n4f+itG}KIpgX z>1Ts*Iv9H*V+ODJF6RTkg|9;VwwNE_(Vg~tK7One=Jy~rlUk{t8+aX_dKthCC?da< z-WK};=8ApmaXM2@F*5%fr-+B#jPVq|MZY>rUQL5GI&3t-lG zGkhOIL2DMZ!;FLY9!9bO1uX)+jY)%xaq51Ejb>bQK^#Y7!E%Q473Qk@S8^Sn1+d-H z|K;mh@s?kVfmGOeIP|p6F^;h_2d!)_$AsR=^=ha^bu`$mSFOZ4g5x&O1$%B((FnTV zU_9Z7=^)EMWP}{Ka_K@wpOGcO;!zLPz&bf?D~EB$u|L4F3yi>#izN_@bind(m~Uu& zBhp3o`?ueQbXOwBW+c8*pp>NH-~iP>hX-IQ)5_{exNddtEf2gzbX^jacXQQ~s(-&s zOuQUkh4qUGwjoim6_%O0nQ&o@UQG*q8?w0_{E858r0>ghVHavl z$`s@dv)V8|`I9J0D(|B=3VOgUGY^AG^CnN9s0uEl(!JpG9 zytIwhT;TWlEVXo%G_u7YE3Q@bpHZ1Kiko(ONVQSp@~cPO>uGaKT2=8#b5K;wfl*c| zg~fN^QM{~qQtHksFq1*z2pna`2P)FWS&&%JM}j{?9@vhk{nl<@N{nF@C;LTRygQY9 z0?9ZA;wIDec6&$Ja4iSIK722^(p^hz{j)Y{AOfm&pWrt*%J#4xt)}O)GqOcz`3#(q z9prlPaM|@pDXDM0RWOuC!h(;?2*w829nJ*nXtr!^#?QgP|2nE4o|pmO>0^_)7z$&Y zw-2iOdPzKCB7@$9F&mcNzEd=P>iLpQn8yL%lu!a$gEw8?GT!w!_p^Dgk)gStj&)T` zmoI^fO+zib5v>iPoc;+`5l9b0I8%3;Wnuz+Q7k<)!ZXp4rxP+*M&h?-6kJYsLv^>L zF*d+!OSEeY5!RJb(Zyw9PxjEI0hlWOdx*Nb6c&ysHc1U_1xq>aC+@w@Bb_ntL))W0 zcxDk}m)|svJ{hWy@w-e8V;8dB?snoKW~TltlP**G!1RtF{at)o=_vUg_&s0YE5Jw! zTSh=iX(+&N94Xj>l4#qW5q6F&SV1qxa$&*aU+urS^Uozs#n);Yxs%~-x&(5;z;JH* zLDjYJ$b~Xh!s;tYiHt}}@g<`=43~cb-9FmDerMlds5@)p>;tMbTI3?zIg=ot&VRAr zJNoWV2KRR*bI~@=3ef$I6_+Gz-I|o(O|m}mt?H?;s0G+!5H`_3q8&J5$i$wbOnUu# z*+DuTr8hytRE9CiGKMU=JBDmggWCcpuhyf3Yu*V5}C#2LMei5M%k zxmn+zS~3XBq{8tO4aWzlrhaNcs*F<~xPz(okcz?}j6W^#wIzgoA%z-p&zzc&=d{8pdT-n`}al=GJy5}9rzs|j0TyU$Ucz5(E0)HuK#vGf_b8JVw z4bL+&E-a`jZR{aZnw^)G#*ItfCx{Xjv>zk3VsvlP@l?mIu}EoE4+U=^JE$Gb$ID%% zu$JLZB-i9)jJi15FUwG}uCID4OYn z>LMCQ@WLH!5#PB;24OKrl2Zk|z(n!DK&iN^_Ga3S3uGrYbZ~p4J6H|eBam&^w1U*)g55O6VU#3T$JCc z>+BTPIg^Mf-W2d7K)`uF!r1Z7p7?}4yQ8a~lMm$199-4{K11od2DzP|+QG72CdIEx z6kIsuwu3u{k4lD+JH1&9q8LNqPS-ji_jbt5WcVOQI##zY^oH4DXf?`pJ0V1V07ZsB z5OAFHZ$8}J#4(UNO71ndUJPzQr1o}&_59LPyaQvqUe{9atr&h!3)~r6(J$YN0RFlb zW$dwkobUEBk&mX1PBU+V`v>=yv^Qj2v&$#LFC4xo;uaQMx=G+Nt*XMTq?7rG?3>ed zTv*}C^V*THEutjt-os?ap$iB1b2InkBog?bC_ec@4H<|LHT)ZPNeye&A_Vj}_eS*< zWAMz9jjw!BK+A$BeCPg=y0SmZzO@bf8FR~pT;c_+&eClL!pbZ;VjEN}EPuVM;TpGL zZOMpFqjG`&wN$4ob84COZWPSPmWx(|jiL*@DU&oKd0~qH3$5je?;M=+i?VKViT?@y zgnb$McCNTZLcQF;@en)>&DfuL)irN^RT(K_Q==lha#XaoRlKD>a;shTp~ZY5*bmB^XDxU6>>!zO!~exKm= zv1eC3@_U43Bk-AT!0PiK9)Vh$&s(LuRZPG+3*SN6S=s{57^u`^ zPhsAqPi#`Cf^W(B9>?a!c=XV1KL}|lni6B@VOP~r1-m>`4fw ziR%FO$!k4 z7yI}6aXF|)04uRw|GkX1MXBqbfrp1I3=xgB<46P7r{d{FCzI)BuCs#I-FSl*z@Ept z>4XeYr07ntAILAuA+}FoX&&b|DvrKzFlk0|p!jj-qt@6Z6><(eDpI;{>>B6F``TW< z91TF!Cyw&E$JV?+1P_sBhRdx>!fyonG6ldC_=lUuyB(3rL>1Q52@twUQ&I&bm;L|3 zIh6lyp(nr^(m(}GF1{Pwu#*{dc6Y_}Hg^nfKsqywTdEGYOWA$qc$no39MP0rFtLDQ z@-obELKtjZhPD2%3)rw3DS}tQ1(=Nc&e-)7s=}k z{s9%%&AZ#`A^iimO$}B*rs?!-j=26@{%umucpx_Fa5xVwv75e@NCK1wG;#bbGZA;+ zeo90rl-fc3Q&wZuelJ_W-P>X&;6ag$Z<7K`-;XUD)uD}B9-9DfAzMJ zKgFJeBNczr_G&|okHmE~FVu0vY@LJq?g=aKL$EpA(sVWq{-RsRv8`dhUg3_kv>ykX z^;STKp_Y&|;7rOJb31+7t(op^j)J-tU2~+xTI3^nV+U@`bRY8s)Ge!P)>*;Rw2A?p z6=LeZZvw+X{{Go2%XjdGWEPy1|80caYN6GAfjL&lx4yg3k~E9&_-gyr?*Ez4D{th` zgl(UEwFwY#!RdLkej2I~2eXG&W3HaFAZM|8)#5oMd5)824+Fq66wFx;-fBpMd|{OV z!2yoW*Lh}e)vBs8^+YgXjmx6zA`#>Vd8UK83I!#|iJ2eR!JKf{RUoJMChnr)3KTOa z5>;7WKI>v!6&Vr%!%uRv&?OEK`HX_6hz1T1j+8*fi`BfJPW-a!tJb)2^x$2$suC1Q zxJU?i{~b+)d?dt>n>_?i#VT%I6>JcbBhd1pA38L*K}n$Fh#*N9RpUsX)zNQ$1|j3R z(9jNH&o}K0KTvHE3fk0+17kyO`QB)!gyB!qeox>&~yJ zDm7O6H!4GUNxv@nifUyVC$kgm5&s*XX)@?=VtbCqz?SSenCy35)9u1WhToa?uO_~m zWSPX{{@FNsE}p*PX3@je-P|F*?P+QRV-&{OaO={sL@e0am4WLbZJ0|GB=<@&oyQZ|Cg) z5vQoN$S2zO2=;Oh7`yHq@)hv_bm)c2x|=OR%b9O4Q1f7sJ@IssP##!@ZcY2IUzTiJ zKY_NH%TEIf^pkeBmWy?bo7dhpV4&q))ohqpJJ+Lq?17=i14I>T0%ss zp@ClVtFD>WIva8Zk2~$6TW+}TrE%Mx@!H=g$)%EJpiqg@NH>qLBa1(gbhB@SG}YT+ zGc9&hvSu4y6fL*1YHO>v>Ecyubl%HgCmq^1HNVz~DRWofXv<-vj5oy$|I04Qxyg1w z5}Zv?$YzqMQMeTCA<~*oW|@U3$AEc~5G8BHtKggUPErm{c3l%$*i1AXUOS%ZP257{ z*3BgjbBU=FZj^*JXO64F@igL;Z~ta8L;JO#L7rO^Aql6@EO1NP?ovffu*syZwyf`N z%U^riOvE*vAq(XeJrdpiCl!f4DHOX$mEu44^$bDc%jVN@d!oha85?tl%)f9y79C?~ zpIYOgv}(q?4V8pK=?r{G`~!m0(-Rv7w-KtJv{x45%x>y35{{jF z+m4GCGEqQ(5I6;^?Cz-C)=$zJl>?i}1R`N#DnC}D(y+xmR`(3*ufD&=R;xneGh&nD zOev(E5hrnJf+eGG+FQ>GJAXKej>eZ@5j+U*gAahBUMjN9!sQro`kv3#bH1QQNL>H7 zHbp`2Rq(MuRll-Gkt}Q#-aSpW+bLtLO~ByN1Qx2A`=fsRTs>n3Gj+b8lSORfuEJUl zejoBwt|Yl@flil5J_(2+!VX6guy9g`2m;L{TJ^+2?@|02t-0Slr}+9U{I6TM-?#j& z)t`ags8DOqM?3};D)ddk7MtpgR}>Ak*ZfbDDCuHxLRQpp%4k~_9F$CbmVPr<&93F= z8SY7FG|7%CNjQ3Mx@c?L?Ec31(iUr)Avt=%c~#j0!O_sdB=$Z(-_B>HN;Qia zCGo;9+Ygaua%JN+n+#nOz9P6#GjIaEwMlUV*K;K5%{~IB_y@lcD4Q1q;xS;75g>j2 zDkW4^vyi!1-3PTzaYH9`a!~*wqHw{K&x{K|w~z^5fC5}93OoV{b;5-eYqiNntnl=q zjNp*fc3HpQdMtZ>jo2}AovbTrdO|x&X#ww?dt-$yzbO08oT>^){sFZ=D+rkW=nfZY zVL=Fsk``O zw%Z2g^qm?{8Xw!_9#rMz$IWT;xFYt~CO;#=VwUGb1XB}e-0UH6XQLCw_lmv_Th_7Y zP$^iRF3$)=*1)?atcwmEw^I=(UkOqgWh$^0d86kig89hN%lfQIf>^b)mf3Nj&4rGu zCN{;x=%COgpsklrNM%xo0bhz1N)hVK>VhjGQEbx5;;;K3 z3>dh~6I(+xR}O|6l&0X0aPrCoAz+O%yfZ{h|=JF~K!&yRLCl7=~uWd#%>D=)TB1s024xMM5 zkG=f&e5uN_w$WkA)q;+EugcodYXSe6fqhw5ilJv7qA$x5_Z-DwgS=-fujPkQ^E&Fu@)1N zt^%o#P8>@Mq(BQTw9sPzM~TRE77yGd|24Ft=S5Y81X$Rd)KG9sGd=a}o5G*EQr)`a zj?le&Y{~tT>IrT(UF!V}2L0z;)JrO$ zBZ?c1y{Gr2sa|d9$K7;cQ}!)L{Zt}bj2u~ADT72O9Cx-8=%*%XYA?_Y33HR?4l)jC zqSAooh*#r|!wSY}?Wlk`0P+o@E?Nfnp*)r9%2Xey9^APAD068jMrowf%SmJMh zZDAQWA^-^l_^5~EvZ|_@ygqNun+B^^M~o70Xh#3bj7U}u-K&atWF7X>CS+Ap%fBOY z2xwr(8Q?B}ghAzX=$PQwLYVfzI**qz~lroRvB5F zaWv8zdm9HDg&P};5{*p;W}7IE11JmtVi|zEBXI<0RL>)rjlsUxmJuO9ua^NDjP7)# zO|4JlV55vhx{SjS8IL@ffC`z2%CaQfszZ7_kEd#L zPymooOBn)$d^}4?0I^dgK&lF$P&GhVM+5L|wE(D4OMsGE0aU6rK$Y46RI4peqjo?G zwFg@6&H-oz7y3z`FDr44Jmao?t8Cp_U$&*(e;ar69k-9~?cLRjFV2KQd)AeHa8w|F zX=a~8j>(dzNSV{lyX2Z%?s?>ySKj&Ln_vDVC{aUe+UJ}$UA_etT4XOyndI@$tLKz! zp82+=khZqHn0A&>N*V1ft3zo{kQcVJm91@KTie;54s@i9aw@2#icWXFOI_<$_j=T` zUiGd|eM8Je%tOpaEI=$oEFzFG8Jh;RzX%pRzp_D zgm%|WkPVSdk&TdzkrR=Vkdu*9kW-P3{7ktN7dWErv& zc@cRDc^P>Hc@=pLc^!F!fP-KW03#DA`;t=!)S?wC%baU_8glbA@XRT9VWr_PR4ZpO z)s={=frxLIBcT!Pme>T1Hixkp&6b*~%GDC{VrlhvPF)ggl>tlmL;d@~?Gbte;D{h9 zOhVJQc`qH&~pIgNVWNL(bY!Pm0SNNSH%_9$ywFPjl@30`M4S_&1PtuK+y3 z_{9|f-y2U=Ssf#_b~);Yb|BRy>j|SuauHWY3P8-A)_{5&q+irf zUGGb5hC$%{17o)Mc)H^i@qT_mUjO8UHIVBgw8y0(RH72#O#nicHG+_=G33e>lK}@z zjwKHtB}oSpZ0psJwuP#`p*O_$YTGqL~ zjc;;9)WSU<=#Sv->h0m}4Y+ts-EHRN6&5dg=?Eu$0yybZ^$rC9ZZP!k&w=jl*S{yj ziF;x}_~BQ%!QUQcKJ5MAl><7X2csVh0q*|-?wkP=yZuiWe8d63>1?YHY^sDX-mbN?S(ZLV`p%4L)pg@Bd63Af+6+S}5X#AL3-aPcf6wLr5OfbU&03Z+` zg9$dc;6n>Nj4;Fc%X5PBhm`sJ=8r|-M-Xs%-bc?FTbJC{{%BRhODVdT!aH5_w&hnu z0d47GOIudkQpsQgJ1*P>_6)BX7{{^dYW5Eg+iqG1UG&n=2%}6e$;|o`+0FzFTGcd? zdmWUM#*AN~(iPX;cFz;~$qN4?sckYJmTRI>6$6xK-XXuibo+*v^d zOIX8^9}nJqB#99(K|?Jy)=V4CJFB%J`Ws}h$^O`Ab-(qw>ut7Gy3D%&-{^7YoOH%n zkG=NP3-7#aiMJ^!sGvk=3anv)P3-ODWH)DfIM~J2K5q8&beOLU{<7#C5w1w60uhSo zl}T|ytW%Pmm*@nO%WAm6?4~rg)OBAy4>a*iN1t`_MOWYT@Jn|;b@M|X{~`3x@KiA% z8iq9wLsP++7GO#)rka(fIeD3#j)b-1oYvHH15-wrLe*T;${Qi_HSmZU8+bXYg;$-a zqO)D-T!%XndjATQ(V-5qwVl=hL2^Ya7o}8HSJiSyZFkl8P&*%V_Ek^6^^Jm&sbPF< zqhn!g3yn+N#1@&Bn*iCSr!^z@29?yV;!7y5tF38W8`{#=Hn+C*ZER&L+ST6D+t=>) z$EuGA0SLF>_q;MMYxSQ@_5y$>FXzW^*73i6=v1(_1C$U6L)?-OOCWU7 zVHVC7q{o>bcG|*x4an4?1&X_x257`V9Y%=F4=5{p7eZ$N?*_6#`*;!K=3RwldvW{<;*<|7PT^dP=aQMW zs$87nSgk_Rb5xb}x-vcNt#RcEn$>()H6dc$8O^8GLY-wE3ob=$IG^+S8wo++TzO*n zlS4yKdIpG8exbmxw~eHe+^AwPr*G0!LF{LB=De@0X6-X@)mpjAHifGEK7{pH1Mrsh z0$VA|&0i$mNB#lS1DxPnv&Xy`!0#CMhByH@dftYjG2R5YSC~uIhYueu;ZP|)GJ`7kPG@wgp_{2e4O`FVP74H1PNyY&=fS(Ipj#qW zOAW_Wb%9sJwY4oZ@5UDR1z=D(hk*5&0!lfaV3KBL%DVC=P5@sBI$)g>MB_{eg{A$y z-0>K0L|QhAa7C|MFCviz#Y$y42nomY#XJfsWg;8x2^xnhbIBOShxk!}Tp- z_qO<9a{W+h$H^^D4Y`H^uk2==uKBedK+=N>QVFSBhVDkoiqS0_P`YzV7`0_0muX2X z?d!$>Vtn_+yJz1$_wFs>U6Aw7^mP literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-400.woff2 b/public/fonts/Aspekta-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..764b50cd42c6d0bb0c7550b05afb13af480fdcf5 GIT binary patch literal 21748 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 literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-50.woff2 b/public/fonts/Aspekta-50.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..fb1e140cc859dd0e3ec13f3764646ab34e62c6d5 GIT binary patch literal 21396 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 literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-550.woff2 b/public/fonts/Aspekta-550.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5d84c2c3f4fda99198da524bf436cd75b97e5075 GIT binary patch literal 22016 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 Db|=?3 literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-650.woff2 b/public/fonts/Aspekta-650.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8f72f5169dd961cf98771e3b7807c75f12f03453 GIT binary patch literal 21980 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%0DY(2i0>5? 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 literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-700.woff2 b/public/fonts/Aspekta-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b9342d88dff664a40edf29c8a150b6f6c56802b6 GIT binary patch literal 22168 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 XZ1&TB{sgvs=OKW-{tpwY2mk;8{c4@c literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-800.woff2 b/public/fonts/Aspekta-800.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..72fea9f31d58e9bcbef9fa2059f6352f8ec70d50 GIT binary patch literal 22608 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 Dz`nm6 literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-850.woff2 b/public/fonts/Aspekta-850.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..df40fbf730a48a59d6cedc64b2f343e35621ab3f GIT binary patch literal 22756 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 literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-900.woff2 b/public/fonts/Aspekta-900.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6e97574ea5cd7892af12fdca8ba5b5ff43e81929 GIT binary patch literal 22596 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 literal 0 HcmV?d00001 diff --git a/public/fonts/Aspekta-950.woff2 b/public/fonts/Aspekta-950.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a463756b8273a52731cd6ce2d2c329dc628c4a5a GIT binary patch literal 22860 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 )e*bw2Z2V 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 literal 0 HcmV?d00001 diff --git a/public/fonts/font-face.css b/public/fonts/font-face.css new file mode 100644 index 00000000..b116bb27 --- /dev/null +++ b/public/fonts/font-face.css @@ -0,0 +1,161 @@ +/*! Aspekta | OFL v1.1 License | Ivo Dolenc (c) 2025 | https://github.com/ivodolenc/aspekta */ + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 50; + font-display: swap; + src: url('Aspekta-50.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url('Aspekta-100.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 150; + font-display: swap; + src: url('Aspekta-150.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 200; + font-display: swap; + src: url('Aspekta-200.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 250; + font-display: swap; + src: url('Aspekta-250.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url('Aspekta-300.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 350; + font-display: swap; + src: url('Aspekta-350.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('Aspekta-400.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 450; + font-display: swap; + src: url('Aspekta-450.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('Aspekta-500.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 550; + font-display: swap; + src: url('Aspekta-550.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('Aspekta-600.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 650; + font-display: swap; + src: url('Aspekta-650.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('Aspekta-700.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 750; + font-display: swap; + src: url('Aspekta-750.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url('Aspekta-800.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 850; + font-display: swap; + src: url('Aspekta-850.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url('Aspekta-900.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 950; + font-display: swap; + src: url('Aspekta-950.woff2') format('woff2'); +} + +@font-face { + font-family: 'Aspekta'; + font-style: normal; + font-weight: 1000; + font-display: swap; + src: url('Aspekta-1000.woff2') format('woff2'); +} diff --git a/scripts/setup-selfhosted.sh b/scripts/setup-selfhosted.sh index 8676ee29..b2d096f8 100755 --- a/scripts/setup-selfhosted.sh +++ b/scripts/setup-selfhosted.sh @@ -1494,6 +1494,9 @@ $CUSTOM_DOMAIN { } handle /health { reverse_proxy server:1250 + } + handle /v2* { + reverse_proxy ui:80 }${lk_proxy_block}${hatchet_proxy_block} handle { reverse_proxy web:3000 @@ -1511,6 +1514,9 @@ $CUSTOM_DOMAIN { } handle /health { reverse_proxy server:1250 + } + handle /v2* { + reverse_proxy ui:80 }${lk_proxy_block}${hatchet_proxy_block} handle { reverse_proxy web:3000 @@ -1532,6 +1538,9 @@ CADDYEOF } handle /health { reverse_proxy server:1250 + } + handle /v2* { + reverse_proxy ui:80 }${lk_proxy_block}${hatchet_proxy_block} handle { reverse_proxy web:3000 @@ -1572,9 +1581,12 @@ step_services() { info "Building frontend image from source..." compose_cmd build web ok "Frontend image built" + info "Building v2 UI image from source..." + compose_cmd build ui + ok "v2 UI image built" else info "Pulling latest backend and frontend images..." - compose_cmd pull server web || warn "Pull failed — using cached images" + compose_cmd pull server web ui || warn "Pull failed — using cached images" fi # Hatchet is always needed (all processing pipelines use it) @@ -1737,6 +1749,24 @@ step_health() { warn "Frontend not responding. Check: docker compose logs web" fi + # v2 UI + info "Waiting for v2 UI..." + local ui_ok=false + for i in $(seq 1 30); do + if curl -sf http://localhost:3001/v2/ > /dev/null 2>&1; then + ui_ok=true + break + fi + echo -ne "\r Waiting for v2 UI... ($i/30)" + sleep 3 + done + echo "" + if [[ "$ui_ok" == "true" ]]; then + ok "v2 UI healthy" + else + warn "v2 UI not responding. Check: docker compose logs ui" + fi + # Caddy if [[ "$USE_CADDY" == "true" ]]; then sleep 2 @@ -1979,20 +2009,25 @@ EOF if [[ "$USE_CADDY" == "true" ]]; then if [[ -n "$CUSTOM_DOMAIN" ]]; then echo " App: https://$CUSTOM_DOMAIN" + echo " App v2: https://$CUSTOM_DOMAIN/v2/" echo " API: https://$CUSTOM_DOMAIN/v1/" elif [[ -n "$PRIMARY_IP" ]]; then echo " App: https://$PRIMARY_IP (accept self-signed cert in browser)" + echo " App v2: https://$PRIMARY_IP/v2/" echo " API: https://$PRIMARY_IP/v1/" echo " Local: https://localhost" else echo " App: https://localhost (accept self-signed cert in browser)" + echo " App v2: https://localhost/v2/" echo " API: https://localhost/v1/" fi elif [[ -n "$PRIMARY_IP" ]]; then echo " App: http://$PRIMARY_IP:3000" + echo " App v2: http://$PRIMARY_IP:3001/v2/" echo " API: http://$PRIMARY_IP:1250" else echo " App: http://localhost:3000" + echo " App v2: http://localhost:3001/v2/" echo " API: http://localhost:1250" fi echo "" diff --git a/server/reflector/db/search.py b/server/reflector/db/search.py index 09a092e0..f8ee46b6 100644 --- a/server/reflector/db/search.py +++ b/server/reflector/db/search.py @@ -175,6 +175,9 @@ class SearchResult(BaseModel): total_match_count: NonNegativeInt = Field( default=0, description="Total number of matches found in the transcript" ) + speaker_count: NonNegativeInt = Field( + default=0, description="Number of distinct speakers in the transcript" + ) change_seq: int | None = None @field_serializer("created_at", when_used="json") @@ -362,6 +365,7 @@ class SearchController: transcripts.c.change_seq, transcripts.c.webvtt, transcripts.c.long_summary, + transcripts.c.participants, sqlalchemy.case( ( transcripts.c.room_id.isnot(None) & rooms.c.id.is_(None), @@ -458,6 +462,12 @@ class SearchController: long_summary_r: str | None = r_dict.pop("long_summary", None) long_summary: NonEmptyString = try_parse_non_empty_string(long_summary_r) room_name: str | None = r_dict.pop("room_name", None) + participants_raw = r_dict.pop("participants", None) or [] + speaker_count = ( + len({p.get("speaker") for p in participants_raw if isinstance(p, dict)}) + if isinstance(participants_raw, list) + else 0 + ) db_result = SearchResultDB.model_validate(r_dict) at_least_one_source = webvtt is not None or long_summary is not None @@ -475,6 +485,7 @@ class SearchController: room_name=room_name, search_snippets=snippets, total_match_count=total_match_count, + speaker_count=speaker_count, ) try: diff --git a/server/reflector/db/transcripts.py b/server/reflector/db/transcripts.py index 3d137413..4efe5c8e 100644 --- a/server/reflector/db/transcripts.py +++ b/server/reflector/db/transcripts.py @@ -446,10 +446,19 @@ class TranscriptController: col for col in transcripts.c if col.name not in exclude_columns ] + # Cheap speaker_count via JSON array length on the participants column + # (same column already stored on every transcript, no extra queries). + # COALESCE handles transcripts where participants is NULL. + speaker_count_col = sqlalchemy.func.coalesce( + sqlalchemy.func.json_array_length(transcripts.c.participants), + 0, + ).label("speaker_count") + query = query.with_only_columns( transcript_columns + [ rooms.c.name.label("room_name"), + speaker_count_col, ] ) diff --git a/server/reflector/views/transcripts.py b/server/reflector/views/transcripts.py index d49aa5a6..419a657b 100644 --- a/server/reflector/views/transcripts.py +++ b/server/reflector/views/transcripts.py @@ -116,6 +116,7 @@ class GetTranscriptMinimal(BaseModel): change_seq: int | None = None has_cloud_video: bool = False cloud_video_duration: int | None = None + speaker_count: int = 0 class TranscriptParticipantWithEmail(TranscriptParticipant): diff --git a/server/reflector/views/zulip.py b/server/reflector/views/zulip.py index 2cec6de8..363c2773 100644 --- a/server/reflector/views/zulip.py +++ b/server/reflector/views/zulip.py @@ -1,11 +1,14 @@ +import logging from typing import Annotated, Optional +import httpx from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel import reflector.auth as auth from reflector.zulip import get_zulip_streams, get_zulip_topics +logger = logging.getLogger(__name__) router = APIRouter() @@ -23,13 +26,18 @@ async def zulip_get_streams( user: Annotated[Optional[auth.UserInfo], Depends(auth.current_user_optional)], ) -> list[Stream]: """ - Get all Zulip streams. + Get all Zulip streams. Returns [] if the upstream Zulip API is unreachable + or the server credentials are invalid — the client treats Zulip as an + optional integration and renders gracefully without a hard error. """ if not user: raise HTTPException(status_code=403, detail="Authentication required") - streams = await get_zulip_streams() - return streams + try: + return await get_zulip_streams() + except (httpx.HTTPStatusError, httpx.RequestError, Exception) as exc: + logger.warning("zulip get_streams failed, returning []: %s", exc) + return [] @router.get("/zulip/streams/{stream_id}/topics") @@ -38,10 +46,14 @@ async def zulip_get_topics( user: Annotated[Optional[auth.UserInfo], Depends(auth.current_user_optional)], ) -> list[Topic]: """ - Get all topics for a specific Zulip stream. + Get all topics for a specific Zulip stream. Returns [] on upstream failure + for the same reason as /zulip/streams above. """ if not user: raise HTTPException(status_code=403, detail="Authentication required") - topics = await get_zulip_topics(stream_id) - return topics + try: + return await get_zulip_topics(stream_id) + except (httpx.HTTPStatusError, httpx.RequestError, Exception) as exc: + logger.warning("zulip get_topics(%s) failed, returning []: %s", stream_id, exc) + return [] diff --git a/ui/.dockerignore b/ui/.dockerignore new file mode 100644 index 00000000..4939f21a --- /dev/null +++ b/ui/.dockerignore @@ -0,0 +1,6 @@ +node_modules +dist +.env +.env.local +.git +.DS_Store diff --git a/ui/.env.example b/ui/.env.example new file mode 100644 index 00000000..788cefe0 --- /dev/null +++ b/ui/.env.example @@ -0,0 +1,10 @@ +# Base URL for the Reflector backend API. +# In dev, Vite proxies /v1 to this origin so keep it pointing at the local server. +VITE_API_PROXY_TARGET=http://localhost:1250 + +# OIDC (Authentik) — used when the backend runs in JWT / SSO mode. +# Leave blank in password-auth mode. +VITE_OIDC_AUTHORITY= +VITE_OIDC_CLIENT_ID= +# Scopes requested at login. Defaults to "openid profile email" when blank. +VITE_OIDC_SCOPE=openid profile email diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 00000000..a547bf36 --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/ui/Dockerfile b/ui/Dockerfile new file mode 100644 index 00000000..46122034 --- /dev/null +++ b/ui/Dockerfile @@ -0,0 +1,23 @@ +# syntax=docker/dockerfile:1 + +FROM node:22-alpine AS builder +WORKDIR /app +RUN corepack enable +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile +COPY . . + +# Vite bakes VITE_* env vars into the bundle at build time. +ARG VITE_OIDC_AUTHORITY= +ARG VITE_OIDC_CLIENT_ID= +ARG VITE_OIDC_SCOPE=openid profile email +ENV VITE_OIDC_AUTHORITY=$VITE_OIDC_AUTHORITY \ + VITE_OIDC_CLIENT_ID=$VITE_OIDC_CLIENT_ID \ + VITE_OIDC_SCOPE=$VITE_OIDC_SCOPE + +RUN pnpm build + +FROM nginx:alpine +COPY --from=builder /app/dist /usr/share/nginx/html/v2 +COPY nginx.conf /etc/nginx/conf.d/default.conf +EXPOSE 80 diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 00000000..f0115c9d --- /dev/null +++ b/ui/README.md @@ -0,0 +1,87 @@ +# Reflector UI (v2) + +Vite + React 19 + TypeScript SPA, served at `/v2` behind Caddy. Lives alongside the existing Next.js app in `../www` while the migration is in progress. + +## Stack + +- **Vite** + **React 19** + **TypeScript** +- **Tailwind v4** with Greyhaven design tokens (`src/styles/greyhaven.css`) +- **React Router v7**, routes mounted under `/v2/*` +- **TanStack Query** + **openapi-fetch** with types generated from the backend OpenAPI spec +- **nuqs** for URL-backed page/search state on `/browse` +- **react-oidc-context** (OIDC Authorization Code + PKCE) for the JWT auth backend +- Password-form fallback for the `password` auth backend (`POST /v1/auth/login`) + +## Local development + +```bash +cd ui +pnpm install + +# Point the dev server at your local backend (defaults to http://localhost:1250). +cp .env.example .env +# Edit VITE_OIDC_AUTHORITY / VITE_OIDC_CLIENT_ID if your backend runs in JWT mode. + +pnpm dev # http://localhost:3001/v2/ +pnpm build # production bundle in dist/ +pnpm typecheck # tsc --noEmit +pnpm openapi # regenerate src/api/schema.d.ts from the running backend +``` + +`pnpm openapi` hits `http://127.0.0.1:1250/openapi.json` — start the backend first (`cd ../server && uv run -m reflector.app --reload`). + +## Auth modes + +The SPA auto-detects the backend's auth backend: + +- **JWT (OIDC/SSO via Authentik):** set `VITE_OIDC_AUTHORITY` and `VITE_OIDC_CLIENT_ID`. The app does the Authorization Code + PKCE flow; Authentik hosts the login page. Register a **Public** OAuth client whose redirect URI is `https:///v2/auth/callback`. No client secret is baked into the bundle. +- **Password:** leave the OIDC env vars blank. The app shows an in-page email/password form that posts to `/v1/auth/login` and stores the returned JWT in `sessionStorage`. +- **None:** backend returns a fake user for every request; the SPA treats that as authenticated. + +## Deployment (selfhosted) + +`docker-compose.selfhosted.yml` defines a `ui` service that builds this directory and serves the static bundle from nginx on port 80. Caddy routes `/v2/*` to `ui:80` and leaves the root path on the existing `web` service. + +Pass OIDC config as build args (Vite inlines `VITE_*` at build time): + +```bash +VITE_OIDC_AUTHORITY=https://auth.example/application/o/reflector/ \ +VITE_OIDC_CLIENT_ID=reflector-ui \ +docker compose -f docker-compose.selfhosted.yml build ui +docker compose -f docker-compose.selfhosted.yml up -d ui +``` + +## Pages shipped in this pass + +- `/` — Home / Create new transcript (single-form shipping variant) +- `/browse` — transcript list with FTS search, source/room/trash filters, pagination +- `/rooms` — rooms list, create, edit, delete +- `/welcome` — logged-out landing (OIDC mode) +- `/login` — password login form (password mode) +- `/auth/callback` — OIDC redirect target + +Not yet ported: +- Transcript detail / playback +- Meeting / live join +- Settings, API keys +- Tags sidebar (backend model doesn't exist yet) +- Progress streaming over WebSocket + +## Directory map + +``` +src/ + api/ fetch client, generated OpenAPI types + auth/ AuthProvider, RequireAuth, OIDC config + components/ + browse/ TranscriptRow, FilterBar, Pagination + home/ LanguagePair, RoomPicker + icons.tsx lucide-react wrapper (compat with prototype I.* shape) + layout/ AppShell, AppSidebar, TopBar + rooms/ RoomsTable, RoomFormDialog, DeleteRoomDialog + ui/ primitives (Button, StatusDot, StatusBadge, SidebarItem, …) + hooks/ useRooms, useTranscripts + lib/ utils, format helpers, types + pages/ HomePage, BrowsePage, RoomsPage, LoggedOut, LoginForm, AuthCallback + styles/ greyhaven.css, reflector-forms.css, index.css (Tailwind entry) +``` diff --git a/ui/eslint.config.js b/ui/eslint.config.js new file mode 100644 index 00000000..5e6b472f --- /dev/null +++ b/ui/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/ui/index.html b/ui/index.html new file mode 100644 index 00000000..adb4c826 --- /dev/null +++ b/ui/index.html @@ -0,0 +1,22 @@ + + + + + + + + + + Reflector + + + + + +

+ + + diff --git a/ui/nginx.conf b/ui/nginx.conf new file mode 100644 index 00000000..d137f72f --- /dev/null +++ b/ui/nginx.conf @@ -0,0 +1,27 @@ +server { + listen 80; + server_name _; + root /usr/share/nginx/html; + index index.html; + + # Without the trailing slash, redirect so relative asset paths resolve. + location = /v2 { + return 301 /v2/; + } + + # React Router SPA under /v2 — fall back to index.html for client routes. + location /v2/ { + try_files $uri $uri/ /v2/index.html; + } + + # Root convenience redirect to the SPA entry. + location = / { + return 302 /v2/; + } + + # Long-cache hashed assets emitted by Vite. + location ~* /v2/assets/ { + expires 1y; + add_header Cache-Control "public, immutable"; + } +} diff --git a/ui/package.json b/ui/package.json new file mode 100644 index 00000000..e8e380e4 --- /dev/null +++ b/ui/package.json @@ -0,0 +1,62 @@ +{ + "name": "ui", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview", + "openapi": "openapi-typescript http://localhost:1250/openapi.json -o ./src/api/schema.d.ts", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@hookform/resolvers": "^5.2.2", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-tooltip": "^1.2.8", + "@tailwindcss/vite": "^4.2.4", + "@tanstack/react-query": "^5.99.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "date-fns": "^4.1.0", + "lucide-react": "^1.8.0", + "nuqs": "^2.8.9", + "oidc-client-ts": "^3.5.0", + "openapi-fetch": "^0.17.0", + "openapi-react-query": "^0.5.4", + "react": "^19.2.5", + "react-dom": "^19.2.5", + "react-hook-form": "^7.73.1", + "react-oidc-context": "^3.3.1", + "react-router-dom": "^7.14.2", + "sonner": "^2.0.7", + "tailwind-merge": "^3.5.0", + "tailwindcss": "^4.2.4", + "zod": "^4.3.6" + }, + "devDependencies": { + "@eslint/js": "^9.39.4", + "@types/node": "^24.12.2", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^9.39.4", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.5.0", + "openapi-typescript": "^7.13.0", + "typescript": "~6.0.2", + "typescript-eslint": "^8.58.2", + "vite": "^8.0.9" + } +} diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml new file mode 100644 index 00000000..657ec8f3 --- /dev/null +++ b/ui/pnpm-lock.yaml @@ -0,0 +1,3536 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@hookform/resolvers': + specifier: ^5.2.2 + version: 5.2.2(react-hook-form@7.73.1(react@19.2.5)) + '@radix-ui/react-checkbox': + specifier: ^1.3.3 + version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-dialog': + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-dropdown-menu': + specifier: ^2.1.16 + version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-label': + specifier: ^2.1.8 + version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-popover': + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-select': + specifier: ^2.2.6 + version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-separator': + specifier: ^1.1.8 + version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': + specifier: ^1.2.4 + version: 1.2.4(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-switch': + specifier: ^1.2.6 + version: 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-tabs': + specifier: ^1.1.13 + version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-tooltip': + specifier: ^1.2.8 + version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@tailwindcss/vite': + specifier: ^4.2.4 + version: 4.2.4(vite@8.0.9(@types/node@24.12.2)(jiti@2.6.1)) + '@tanstack/react-query': + specifier: ^5.99.2 + version: 5.99.2(react@19.2.5) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + date-fns: + specifier: ^4.1.0 + version: 4.1.0 + lucide-react: + specifier: ^1.8.0 + version: 1.8.0(react@19.2.5) + nuqs: + specifier: ^2.8.9 + version: 2.8.9(react-router-dom@7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-router@7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) + oidc-client-ts: + specifier: ^3.5.0 + version: 3.5.0 + openapi-fetch: + specifier: ^0.17.0 + version: 0.17.0 + openapi-react-query: + specifier: ^0.5.4 + version: 0.5.4(@tanstack/react-query@5.99.2(react@19.2.5))(openapi-fetch@0.17.0) + react: + specifier: ^19.2.5 + version: 19.2.5 + react-dom: + specifier: ^19.2.5 + version: 19.2.5(react@19.2.5) + react-hook-form: + specifier: ^7.73.1 + version: 7.73.1(react@19.2.5) + react-oidc-context: + specifier: ^3.3.1 + version: 3.3.1(oidc-client-ts@3.5.0)(react@19.2.5) + react-router-dom: + specifier: ^7.14.2 + version: 7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + sonner: + specifier: ^2.0.7 + version: 2.0.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + tailwind-merge: + specifier: ^3.5.0 + version: 3.5.0 + tailwindcss: + specifier: ^4.2.4 + version: 4.2.4 + zod: + specifier: ^4.3.6 + version: 4.3.6 + devDependencies: + '@eslint/js': + specifier: ^9.39.4 + version: 9.39.4 + '@types/node': + specifier: ^24.12.2 + version: 24.12.2 + '@types/react': + specifier: ^19.2.14 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + '@vitejs/plugin-react': + specifier: ^6.0.1 + version: 6.0.1(vite@8.0.9(@types/node@24.12.2)(jiti@2.6.1)) + eslint: + specifier: ^9.39.4 + version: 9.39.4(jiti@2.6.1) + eslint-plugin-react-hooks: + specifier: ^7.1.1 + version: 7.1.1(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react-refresh: + specifier: ^0.5.2 + version: 0.5.2(eslint@9.39.4(jiti@2.6.1)) + globals: + specifier: ^17.5.0 + version: 17.5.0 + openapi-typescript: + specifier: ^7.13.0 + version: 7.13.0(typescript@6.0.3) + typescript: + specifier: ~6.0.2 + version: 6.0.3 + typescript-eslint: + specifier: ^8.58.2 + version: 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + vite: + specifier: ^8.0.9 + version: 8.0.9(@types/node@24.12.2)(jiti@2.6.1) + +packages: + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + + '@hookform/resolvers@5.2.2': + resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==} + peerDependencies: + react-hook-form: ^7.55.0 + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@oxc-project/types@0.126.0': + resolution: {integrity: sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==} + + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-checkbox@1.3.3': + resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.1.16': + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-label@2.1.8': + resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-menu@2.1.16': + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.4': + resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-separator@1.1.8': + resolution: {integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-slot@1.2.4': + resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-switch@1.2.6': + resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tooltip@1.2.8': + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@redocly/ajv@8.11.2': + resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} + + '@redocly/config@0.22.0': + resolution: {integrity: sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ==} + + '@redocly/openapi-core@1.34.12': + resolution: {integrity: sha512-b32XWsz6enN6K4bx8xWsqUaXTJR/DnYT3lL1CzDYzIYKw243NNlz6fexmr71q/U4HrEcMoJGBvwAfcxOb8ymQw==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + + '@rolldown/binding-android-arm64@1.0.0-rc.16': + resolution: {integrity: sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.16': + resolution: {integrity: sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.16': + resolution: {integrity: sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.16': + resolution: {integrity: sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16': + resolution: {integrity: sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16': + resolution: {integrity: sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.16': + resolution: {integrity: sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.16': + resolution: {integrity: sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.16': + resolution: {integrity: sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16': + resolution: {integrity: sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16': + resolution: {integrity: sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-rc.16': + resolution: {integrity: sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==} + + '@rolldown/pluginutils@1.0.0-rc.7': + resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + + '@tailwindcss/node@4.2.4': + resolution: {integrity: sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==} + + '@tailwindcss/oxide-android-arm64@4.2.4': + resolution: {integrity: sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.2.4': + resolution: {integrity: sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.2.4': + resolution: {integrity: sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.2.4': + resolution: {integrity: sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': + resolution: {integrity: sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': + resolution: {integrity: sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.2.4': + resolution: {integrity: sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.2.4': + resolution: {integrity: sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.2.4': + resolution: {integrity: sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.2.4': + resolution: {integrity: sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': + resolution: {integrity: sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.2.4': + resolution: {integrity: sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.2.4': + resolution: {integrity: sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==} + engines: {node: '>= 20'} + + '@tailwindcss/vite@4.2.4': + resolution: {integrity: sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + + '@tanstack/query-core@5.99.2': + resolution: {integrity: sha512-1HunU0bXVsR1ZJMZbcOPE6VtaBJxsW809RE9xPe4Gz7MlB0GWwQvuTPhMoEmQ/hIzFKJ/DWAuttIe7BOaWx0tA==} + + '@tanstack/react-query@5.99.2': + resolution: {integrity: sha512-vM91UEe45QUS9ED6OklsVL15i8qKcRqNwpWzPTVWvRPRSEgDudDgHpvyTjcdlwHcrKNa80T+xXYcchT2noPnZA==} + peerDependencies: + react: ^18 || ^19 + + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@24.12.2': + resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + + '@typescript-eslint/eslint-plugin@8.59.0': + resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.59.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.59.0': + resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/project-service@8.59.0': + resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.59.0': + resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.59.0': + resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.59.0': + resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.59.0': + resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.59.0': + resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.59.0': + resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.59.0': + resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-react@6.0.1': + resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 + babel-plugin-react-compiler: ^1.0.0 + vite: ^8.0.0 + peerDependenciesMeta: + '@rolldown/plugin-babel': + optional: true + babel-plugin-react-compiler: + optional: true + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + baseline-browser-mapping@2.10.20: + resolution: {integrity: sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + brace-expansion@1.1.14: + resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} + + brace-expansion@2.1.0: + resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} + + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001788: + resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + electron-to-chromium@1.5.341: + resolution: {integrity: sha512-1sZTssferjgDgaqRTc0ieP+ozzpOy7LQTPTtEW3yQFn4+ORdIAZWV5BthXPyHF7YqLvFJCUPhNhdAJQYlYUgiw==} + + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + engines: {node: '>=10.13.0'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@7.1.1: + resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 + + eslint-plugin-react-refresh@0.5.2: + resolution: {integrity: sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==} + peerDependencies: + eslint: ^9 || ^10 + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.4: + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@17.5.0: + resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==} + engines: {node: '>=18'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + js-levenshtein@1.1.6: + resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} + engines: {node: '>=0.10.0'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lucide-react@1.8.0: + resolution: {integrity: sha512-WuvlsjngSk7TnTBJ1hsCy3ql9V9VOdcPkd3PKcSmM34vJD8KG6molxz7m7zbYFgICwsanQWmJ13JlYs4Zp7Arw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.37: + resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + + nuqs@2.8.9: + resolution: {integrity: sha512-8ou6AEwsxMWSYo2qkfZtYFVzngwbKmg4c00HVxC1fF6CEJv3Fwm6eoZmfVPALB+vw8Udo7KL5uy96PFcYe1BIQ==} + peerDependencies: + '@remix-run/react': '>=2' + '@tanstack/react-router': ^1 + next: '>=14.2.0' + react: '>=18.2.0 || ^19.0.0-0' + react-router: ^5 || ^6 || ^7 + react-router-dom: ^5 || ^6 || ^7 + peerDependenciesMeta: + '@remix-run/react': + optional: true + '@tanstack/react-router': + optional: true + next: + optional: true + react-router: + optional: true + react-router-dom: + optional: true + + oidc-client-ts@3.5.0: + resolution: {integrity: sha512-l2q8l9CTCTOlbX+AnK4p3M+4CEpKpyQhle6blQkdFhm0IsBqsxm15bYaSa11G7pWdsYr6epdsRZxJpCyCRbT8A==} + engines: {node: '>=18'} + + openapi-fetch@0.17.0: + resolution: {integrity: sha512-PsbZR1wAPcG91eEthKhN+Zn92FMHxv+/faECIwjXdxfTODGSGegYv0sc1Olz+HYPvKOuoXfp+0pA2XVt2cI0Ig==} + + openapi-react-query@0.5.4: + resolution: {integrity: sha512-V9lRiozjHot19/BYSgXYoyznDxDJQhEBSdi26+SJ0UqjMANLQhkni4XG+Z7e3Ag7X46ZLMrL9VxYkghU3QvbWg==} + peerDependencies: + '@tanstack/react-query': ^5.80.0 + openapi-fetch: ^0.17.0 + + openapi-typescript-helpers@0.1.0: + resolution: {integrity: sha512-OKTGPthhivLw/fHz6c3OPtg72vi86qaMlqbJuVJ23qOvQ+53uw1n7HdmkJFibloF7QEjDrDkzJiOJuockM/ljw==} + + openapi-typescript@7.13.0: + resolution: {integrity: sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==} + hasBin: true + peerDependencies: + typescript: ^5.x + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + postcss@8.5.10: + resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + react-dom@19.2.5: + resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} + peerDependencies: + react: ^19.2.5 + + react-hook-form@7.73.1: + resolution: {integrity: sha512-VAfVYOPcx3piiEVQy95vyFmBwbVUsP/AUIN+mpFG8h11yshDd444nn0VyfaGWSRnhOLVgiDu7HIuBtAIzxn9dA==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + + react-oidc-context@3.3.1: + resolution: {integrity: sha512-/Azvm9W4DhhOtSDBE73kFInh1b6zZRRfILKbgmk2syExMF0PCYJOn/dGdOOi2BFX8x0rCeUe45NXHU+/+xDcrQ==} + engines: {node: '>=18'} + peerDependencies: + oidc-client-ts: ^3.1.0 + react: '>=16.14.0' + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-router-dom@7.14.2: + resolution: {integrity: sha512-YZcM5ES8jJSM+KrJ9BdvHHqlnGTg5tH3sC5ChFRj4inosKctdyzBDhOyyHdGk597q2OT6NTrCA1OvB/YDwfekQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + react-router@7.14.2: + resolution: {integrity: sha512-yCqNne6I8IB6rVCH7XUvlBK7/QKyqypBFGv+8dj4QBFJiiRX+FG7/nkdAvGElyvVZ/HQP5N19wzteuTARXi5Gw==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.2.5: + resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + rolldown@1.0.0-rc.16: + resolution: {integrity: sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + sonner@2.0.7: + resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} + + tailwindcss@4.2.4: + resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + typescript-eslint@8.59.0: + resolution: {integrity: sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js-replace@1.0.1: + resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + vite@8.0.9: + resolution: {integrity: sha512-t7g7GVRpMXjNpa67HaVWI/8BWtdVIQPCL2WoozXXA7LBGEFK4AkkKkHx2hAQf5x1GZSlcmEDPkVLSGahxnEEZw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@4.3.6: + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + +snapshots: + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.0': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@10.2.2) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.29.2': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': + dependencies: + eslint: 9.39.4(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.2': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3(supports-color@10.2.2) + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.5': + dependencies: + ajv: 6.14.0 + debug: 4.4.3(supports-color@10.2.2) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.4': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/react-dom@2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@floating-ui/dom': 1.7.6 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + '@floating-ui/utils@0.2.11': {} + + '@hookform/resolvers@5.2.2(react-hook-form@7.73.1(react@19.2.5))': + dependencies: + '@standard-schema/utils': 0.3.0 + react-hook-form: 7.73.1(react@19.2.5) + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@oxc-project/types@0.126.0': {} + + '@radix-ui/number@1.1.1': {} + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + aria-hidden: 1.2.6 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + aria-hidden: 1.2.6 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + aria-hidden: 1.2.6 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/rect': 1.1.1 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + aria-hidden: 1.2.6 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.5)': + dependencies: + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/rect@1.1.1': {} + + '@redocly/ajv@8.11.2': + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js-replace: 1.0.1 + + '@redocly/config@0.22.0': {} + + '@redocly/openapi-core@1.34.12(supports-color@10.2.2)': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.22.0 + colorette: 1.4.0 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + js-levenshtein: 1.1.6 + js-yaml: 4.1.1 + minimatch: 5.1.9 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - supports-color + + '@rolldown/binding-android-arm64@1.0.0-rc.16': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.16': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.16': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.16': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.16': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.16': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.16': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16': + optional: true + + '@rolldown/pluginutils@1.0.0-rc.16': {} + + '@rolldown/pluginutils@1.0.0-rc.7': {} + + '@standard-schema/spec@1.0.0': {} + + '@standard-schema/utils@0.3.0': {} + + '@tailwindcss/node@4.2.4': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.20.1 + jiti: 2.6.1 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.2.4 + + '@tailwindcss/oxide-android-arm64@4.2.4': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.2.4': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.2.4': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.2.4': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.2.4': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.2.4': + optional: true + + '@tailwindcss/oxide@4.2.4': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.2.4 + '@tailwindcss/oxide-darwin-arm64': 4.2.4 + '@tailwindcss/oxide-darwin-x64': 4.2.4 + '@tailwindcss/oxide-freebsd-x64': 4.2.4 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.4 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.4 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.4 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.4 + '@tailwindcss/oxide-linux-x64-musl': 4.2.4 + '@tailwindcss/oxide-wasm32-wasi': 4.2.4 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.4 + + '@tailwindcss/vite@4.2.4(vite@8.0.9(@types/node@24.12.2)(jiti@2.6.1))': + dependencies: + '@tailwindcss/node': 4.2.4 + '@tailwindcss/oxide': 4.2.4 + tailwindcss: 4.2.4 + vite: 8.0.9(@types/node@24.12.2)(jiti@2.6.1) + + '@tanstack/query-core@5.99.2': {} + + '@tanstack/react-query@5.99.2(react@19.2.5)': + dependencies: + '@tanstack/query-core': 5.99.2 + react: 19.2.5 + + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@24.12.2': + dependencies: + undici-types: 7.16.0 + + '@types/react-dom@19.2.3(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + + '@types/react@19.2.14': + dependencies: + csstype: 3.2.3 + + '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/type-utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.0 + eslint: 9.39.4(jiti@2.6.1) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.0 + debug: 4.4.3(supports-color@10.2.2) + eslint: 9.39.4(jiti@2.6.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.59.0(typescript@6.0.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.3) + '@typescript-eslint/types': 8.59.0 + debug: 4.4.3(supports-color@10.2.2) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.59.0': + dependencies: + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/visitor-keys': 8.59.0 + + '@typescript-eslint/tsconfig-utils@8.59.0(typescript@6.0.3)': + dependencies: + typescript: 6.0.3 + + '@typescript-eslint/type-utils@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + debug: 4.4.3(supports-color@10.2.2) + eslint: 9.39.4(jiti@2.6.1) + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.59.0': {} + + '@typescript-eslint/typescript-estree@8.59.0(typescript@6.0.3)': + dependencies: + '@typescript-eslint/project-service': 8.59.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.3) + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/visitor-keys': 8.59.0 + debug: 4.4.3(supports-color@10.2.2) + minimatch: 10.2.5 + semver: 7.7.4 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) + eslint: 9.39.4(jiti@2.6.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.59.0': + dependencies: + '@typescript-eslint/types': 8.59.0 + eslint-visitor-keys: 5.0.1 + + '@vitejs/plugin-react@6.0.1(vite@8.0.9(@types/node@24.12.2)(jiti@2.6.1))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.7 + vite: 8.0.9(@types/node@24.12.2)(jiti@2.6.1) + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + agent-base@7.1.4: {} + + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-colors@4.1.3: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + baseline-browser-mapping@2.10.20: {} + + brace-expansion@1.1.14: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.1.0: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.20 + caniuse-lite: 1.0.30001788 + electron-to-chromium: 1.5.341 + node-releases: 2.0.37 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001788: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + change-case@5.4.4: {} + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorette@1.4.0: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + cookie@1.1.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.2.3: {} + + date-fns@4.1.0: {} + + debug@4.4.3(supports-color@10.2.2): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 + + deep-is@0.1.4: {} + + detect-libc@2.1.2: {} + + detect-node-es@1.1.0: {} + + electron-to-chromium@1.5.341: {} + + enhanced-resolve@5.20.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@2.6.1)): + dependencies: + '@babel/core': 7.29.0 + '@babel/parser': 7.29.2 + eslint: 9.39.4(jiti@2.6.1) + hermes-parser: 0.25.1 + zod: 4.3.6 + zod-validation-error: 4.0.2(zod@4.3.6) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-refresh@0.5.2(eslint@9.39.4(jiti@2.6.1)): + dependencies: + eslint: 9.39.4(jiti@2.6.1) + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.4(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@10.2.2) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + + flatted@3.4.2: {} + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + get-nonce@1.0.1: {} + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@17.5.0: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + + https-proxy-agent@7.0.6(supports-color@10.2.2): + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + index-to-position@1.2.0: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + isexe@2.0.0: {} + + jiti@2.6.1: {} + + js-levenshtein@1.1.6: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jwt-decode@4.0.0: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lucide-react@1.8.0(react@19.2.5): + dependencies: + react: 19.2.5 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.14 + + minimatch@5.1.9: + dependencies: + brace-expansion: 2.1.0 + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.37: {} + + nuqs@2.8.9(react-router-dom@7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-router@7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5): + dependencies: + '@standard-schema/spec': 1.0.0 + react: 19.2.5 + optionalDependencies: + react-router: 7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react-router-dom: 7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + + oidc-client-ts@3.5.0: + dependencies: + jwt-decode: 4.0.0 + + openapi-fetch@0.17.0: + dependencies: + openapi-typescript-helpers: 0.1.0 + + openapi-react-query@0.5.4(@tanstack/react-query@5.99.2(react@19.2.5))(openapi-fetch@0.17.0): + dependencies: + '@tanstack/react-query': 5.99.2(react@19.2.5) + openapi-fetch: 0.17.0 + openapi-typescript-helpers: 0.1.0 + + openapi-typescript-helpers@0.1.0: {} + + openapi-typescript@7.13.0(typescript@6.0.3): + dependencies: + '@redocly/openapi-core': 1.34.12(supports-color@10.2.2) + ansi-colors: 4.1.3 + change-case: 5.4.4 + parse-json: 8.3.0 + supports-color: 10.2.2 + typescript: 6.0.3 + yargs-parser: 21.1.1 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.0 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + picocolors@1.1.1: {} + + picomatch@4.0.4: {} + + pluralize@8.0.0: {} + + postcss@8.5.10: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + punycode@2.3.1: {} + + react-dom@19.2.5(react@19.2.5): + dependencies: + react: 19.2.5 + scheduler: 0.27.0 + + react-hook-form@7.73.1(react@19.2.5): + dependencies: + react: 19.2.5 + + react-oidc-context@3.3.1(oidc-client-ts@3.5.0)(react@19.2.5): + dependencies: + oidc-client-ts: 3.5.0 + react: 19.2.5 + + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.5): + dependencies: + react: 19.2.5 + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.5): + dependencies: + react: 19.2.5 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.5) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.5) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + + react-router-dom@7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-router: 7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + + react-router@7.14.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + cookie: 1.1.1 + react: 19.2.5 + set-cookie-parser: 2.7.2 + optionalDependencies: + react-dom: 19.2.5(react@19.2.5) + + react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.5): + dependencies: + get-nonce: 1.0.1 + react: 19.2.5 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + react@19.2.5: {} + + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + rolldown@1.0.0-rc.16: + dependencies: + '@oxc-project/types': 0.126.0 + '@rolldown/pluginutils': 1.0.0-rc.16 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.16 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.16 + '@rolldown/binding-darwin-x64': 1.0.0-rc.16 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.16 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.16 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.16 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.16 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.16 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.16 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.16 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.16 + + scheduler@0.27.0: {} + + semver@6.3.1: {} + + semver@7.7.4: {} + + set-cookie-parser@2.7.2: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + sonner@2.0.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + source-map-js@1.2.1: {} + + strip-json-comments@3.1.1: {} + + supports-color@10.2.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tailwind-merge@3.5.0: {} + + tailwindcss@4.2.4: {} + + tapable@2.3.3: {} + + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + ts-api-utils@2.5.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@4.41.0: {} + + typescript-eslint@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@6.0.3) + eslint: 9.39.4(jiti@2.6.1) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + typescript@6.0.3: {} + + undici-types@7.16.0: {} + + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js-replace@1.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.5): + dependencies: + react: 19.2.5 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.5): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.5 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + vite@8.0.9(@types/node@24.12.2)(jiti@2.6.1): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.10 + rolldown: 1.0.0-rc.16 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 24.12.2 + fsevents: 2.3.3 + jiti: 2.6.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yallist@3.1.1: {} + + yaml-ast-parser@0.0.43: {} + + yargs-parser@21.1.1: {} + + yocto-queue@0.1.0: {} + + zod-validation-error@4.0.2(zod@4.3.6): + dependencies: + zod: 4.3.6 + + zod@4.3.6: {} diff --git a/ui/public/apple-touch-icon.png b/ui/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3913616946ac26d28b01427ce0929b73d51d41aa GIT binary patch literal 4979 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 literal 0 HcmV?d00001 diff --git a/ui/public/favicon-16x16.png b/ui/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f8058dc3a6d5b7d6fffacc90353c0cd06360cc GIT binary patch literal 678 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{Xiaj ziKnkC`*RK!4kh08)6Fy)7#O`hT^vI+&d2uqYPTecw5|WVXT6~@n`wsFtXWG^5?`|` zNbhgZ(Ve(<&5a+7n>QtNE}1gv(?t#W)Lc(4#mCuadVU&wwmW`^XYaeKJJ0X*`)+w? zz2658QbWOhJX-s*7|CrO?BrSewx%*wO2$QA!gF}pAOYWb0Ezq}Z zT2s&m#^ZMcWw&>iFlFqJIwGGa;mTfr%wfZ&h>y&Q*Cy25%?da?Pd-DL=jN`d4Q*HI zQ|555kkzv>U%D(Vcyai}+ec2jeDwP*aO2?2EuI4NOkAT}&Mx=dZQeWGSGu}gkK>6$ zg~HL*938zkJhrZu(O>)JL6d^z$Go}9MoRl{e#%&8e=b?#!-YSkUnlU?CvQqCtKL4> zR7PUK6no$Fc}q0hqzW20ZN9K+%c|KQHZSQBG<+|ppC(+At^YkQh&y`g`G1)+wel}5 z6gK_OJ84%%kX&&~Auyy>OI#yLQW8s2t&)pUffR$0fswJUfrYMtNr-`km9dGHp|Q4s zft7*5eVeIEQ8eV{r(~v8;?}S(QCAYEA-pOiq9iD>T%n*SKP@vSRiUJ^AXOo=pd^`r zp<>SCPdprjVHz5z{7;|pd>X{Stjw*K%q^@e>^)h8Sy;iP!Q^lXv-0K;h0`~#oH%mk jh|Cf8(+wUAy!04ei3^r|ax$F?w1UCY)z4*}Q$iB}E<*z+ literal 0 HcmV?d00001 diff --git a/ui/public/favicon-32x32.png b/ui/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a8af1ee35dc68dfb0e919911af53765658a304aa GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJKpuOE zr>`sfa}E{`CEoSZ%`}1Xt36#DLp+Y3oqRf5I8fx+erw~IiI+?QXS=*UCenRWY-3bR zM^}gTNB)A~f~S5gyDutD>3VP|FDBxZlViZb2ZwqCCR`H=Tyrrg`eWdwq|%G*my+g~ zoJ@H)_wk~cHnR$?9vs`fYmV{#_w$PP86U8h`}RFVs%PbzjO|rSBHs(xH2-j1{8{kp zdhw?!)=AMHOxqgDUe7DN{VL|xB3AJO8eO**=KZ^3=ib$E|0dIhm96FxjH+kic1t@l z2yC2^a%&%>euCz&$b0^C{aTVLuj>3@@=1~`D_+;G7qDc~vII2-`v#S+pa)Z~`XA47 z_gmQX>ZzmT1ow|yDqKFE&E$Iamyx3*Xp3ELw(HafTRBx5SR{M`_O9Huw0hQqH;l~J z4!*v;B=E#1_6bD=zk{|)?~rd`c@j{v(m`;SK0||y&vwb1ym!u@KcXNy}6*>UJ_TF{w@gmVI+Z$wU5ePW8c z$a5n3$EU{^c(wm8dDPSvZC00mqS)h+@#jx|au?T&8HJnI+~aU9kTGCr)0s5md)dFa zWji;Nh{Rs4zQDq3AYmkN+iTu6J;}|vFV@DYh#ILR^Cti3`*b7LtX-GA>X~|!VF07m z^iT<7;gd&MHN%B=`7}y4W|z;GJ(f^lp8Pcpz4xSLzw%@Z;tG_Z)iv8m9H7=hD=Lz_J z>ey@5^Z)%HMy8+K@lQnG0n;~wYKdz^NlIc#s#S7PDv)9@GB7gMHL%b%FbOfRurfBW zGBnmUFt9Q(xNkFcDT;>N{FKbJO57UOCF)87HH24%M3e+2mMat#<)>xlq$-qD7Nja< z7L+72FjUNW{E3I7Fib<^l>g~7o=<}qn3cKplDUPIg}o<>FbgZVG?*MtVOHK8qHy}g ol@mwK9FaM~e!9V9ftMb`D{;Y+Pfn&&fmSehy85}Sb4q9e00d97N&o-= literal 0 HcmV?d00001 diff --git a/ui/public/favicon.ico b/ui/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bd61a07a88d21eaa594d71d207e416588a443964 GIT binary patch literal 15086 zcmeI33s4o;8OImVkZ2<|CZjepLRyp7WI9bVX>2oTr8Tid5#MhS#W(nBH7KJMoY-iD zI!*@1prZr6!qoVvAmEcLzL6@`4w@nXlxS$H5aR;`cKbV*U3$6fUUn~cO`UPa!?}C* zobUU8=kcBIeCJb={3L(r_17ixU@84&NqS3?q~Kuny^AD$L0K1a@qK1{N&1iqKcWsz zq)8-E?tFSRW>5Y;>4C?!2exh7)?w+=rO(I2#JoCl=FAuVU**`eX_Nng1q%YFPMz9o z;>3x+89#pf^wFb7|9SZE;eQ=Ebm-s1!^8hY{+G#h*cdHVF}9Uqkp0xNymW9-SdC+yjgbBX@YvizD!&ZYe6RcOj zT5T1pkzCNZ!v_U@@ovv0^yJZjXaw|yl;NlA(SfddCV%g)YL_U+rJ zp!XDbD50UD&G>44=!=}WSuk$gxZb{y;r#jY0pQQh%F0rN3>g_2N845v?@?gaikfnSq>^`NX+u|k1|tumk|wxN@;>b!qWoH+4a@c&K2ujTvq?^jl> zTBV@7?UbP&`iV1U%y`;c3G(vty5;2LT-I>A=SfLP3cA}i8PFFGpudoH=kJXS;133W znLBRR_qA)+D(G&RHEmhnm|5@0P!0VEZ}799^alS|u6W&li*=oxoGhceZIc0=_a*dy zXH|yW+}t<7f7>0i`@4`~{rdItm@#AQl;H|{gE+dGevTeJ`VQFcy5rS*7cy+zxKT!T z`$Pt@$7o6Ho9H72`|wbFe7tF!8~ncoSB)NCy)x>`n>TNkBO)R!%ixNY{iR{Vh!J<# z14=j}I2J8hv~l(7)e9KoceiifZrWBoa^%PeFxBf}H7XM_q@|_FlO|0PGPJr+Gq>x| zG5=xi6>%2Go;`c^8v1w!So<+|dsS9ecE*lrXL{1OR0RKI@HqD_BfNU$LI%!R@{}o4 zn(0>NK@EK?&Mk$U6Fy^q`qRRN3nLQ~6W_+h3c7afS|?$1xj<;s&%=ig&+!JokcoB; zJ9g}lXU&>b%0841-ldGmkhyc`{sg?;*xR3K6F3u%u|4Cw#jnbs&<7u|j=UOw6A(RC z0sn`3^TSFRHpn86Ol4FP@G*3xMQ;N4*q)=E?gL3$i&7EjJr6y z9Jhkky)Nym>4#t12-A@C$&)8_&o1s5J-vg!^3tVCKQ&}x
wNk9UW^;n~F#ZtWZE zr|k0O%dgl7(~vZ_e-QK6SX_T{nT)~IY(~yacA5{FsM%c`hV?SN2sHo^+BTPfm z=na4N{&2?Nf*GuObvXZ=y>;u>x9VTUb_r%3e8OI2>Kx-Lhr{7GQd?UaXxK@Q=mR!P z0CRZ)GF)-R*V=E+|9jZSpLs+uTV=z1?#)>20Jo_#89HnS_-(h7TLtb?fj;eoUW{fe z%3JGyY_}Bfd*!=vVd?Xqoay`+i#J)@naEJ5CkOH=oKcqhoVgDPvOc>o7K_2!!be1z zeD2)2Xdkk(g%tKpJM?T{#=^lkG-zYNI(c~U;>B^cFtvdwy1pBjSJLlQLI%d=PEk=& zKO0!tM)K_0v+dEdVaRZvF{vyrE*2pSkKM!C{yz5W`{m{3-5)#fDqwN`d|a_V!EL?= z7-t?y@{pG`ey@?@o%N)~yiAh%ig#EAsd=E92dKHfn)|7_sLVg-A7>t~zV}u0AT`J0 zbADILHF{1Qf-N8U7cX*|pT5imX(#;zH7`^1YBjG{b6L%m<&E`~V`^Tm=Cx{0)<{%0 z7jas_q!3b5oK~A|{UG$@Y0(4AmMv?~U1V2cae8w{5{f@~0(sXK728;_VZ#PL;!`@} z&+o~d)vt*8h{9hkVpR5UXIzN?{40F^HTcpSc>kEY4zJG#At51t&=$Ocx$g+!_bg~8 z!{aDCzJSMF?g+Jbh8A}b!k-VWIDF(p4O)M8@813HoH=tG&?zO|^Tf;Ou99|l@XtqC z=PpUu3V+}}N0~NlTC;l!m6z%JR50A6@4~ENz}||-R#DQ^(-rQS^f0vObEAG>y#C2O z?a!@XfPa#(^#q2UJ9jGF9kmrhKJ(~@W--7&MYER$hF!aMDf8#gH!ZVXUodyGxF>DZ z=W_k}^>*<8RO7Gp!=62R6z-%suMF3o9$%NT zdio&={bZ;curHtC%#!QQU&Elr3(3qY?Jl*|aRIN0YpG)n+(s{*n>TM>AEUXzIlMFc z^Y!>^7>M_giT9C_rNz7yyeO|>?cZR$3*h%@baZq)v1X&ztXcC0bE!M)+b|{%|K1Dm z|A!HO4FmByGVwYxd>+sj*U)!)th3GZ?E>^(7MfhL!#9#Xc zhI(Qo64(!3LcV8d+vfW`&KN&n%~fbTJmu7@!7-265C?|b5_eS`n4{QUekt@7|xUp*&3)OdKx z(Nj0@#RyZ=XAk_x!n4U=(hC0){47B}V-6wszeoR9dg7~nqb{zHqE`15EBNruwZq5K z4-DdtP1bnn<@hoRxDWNYtts$Ay9e_t5ggTeyhRyn#c}iI&1bF1XQeKCL3`%dU@++3 zRd5H8b^reTr>)TRrY_?w;_ZY@a?iCd(6?zEzS^vF&0vC;xHlGe1)pme=$|ArZGBmX zzIc_sNC!t9x;NIBw9V3D-hGGp8H4WYZ?=uE>s`Hi)sMKOM>6)l#_mc_coCW&*%N0LN}ufZ=u3L*uP0@Or#pdvgsHMlE`l5lA_-5CjRaFD7=!hPZLh|NQ|C4xy! zehNz#6AfLSl`B`8@-K3>Yll7Bne*Ap*lzEU#2NQv(jv~*hOvCublr&e`aO1L8tF9Y zOVR@u8(YM(#S+t~dq2e5>A!B>x*BZL7PhMkjjy2*=^|FsPjtXA)?R%|N{Yf+!jJ}- zZa^cnsiFD<{*gj|KttjGkSN458pabsqnQ3_W~gW9!zf4~h9pV+61tcp7$ zQ+5z_Tf}Z5M>P^HP&7kC+M;O5-ZG^;w8zU{4bU9yP8x_YV?sx(tiODK@+S1 literal 0 HcmV?d00001 diff --git a/ui/public/icons.svg b/ui/public/icons.svg new file mode 100644 index 00000000..e9522193 --- /dev/null +++ b/ui/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/scripts/debug-root.sh b/ui/scripts/debug-root.sh new file mode 100755 index 00000000..289c2ed5 --- /dev/null +++ b/ui/scripts/debug-root.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +# Diagnoses why the raw domain (https://reflector.local/) isn't loading. +# Usage: ./ui/scripts/debug-root.sh [host] +set +e +HOST="${1:-reflector.local}" +COMPOSE="docker compose -f docker-compose.selfhosted.yml" + +echo "============================================================" +echo " 1. Container status (web + caddy)" +echo "============================================================" +$COMPOSE ps web caddy 2>&1 | head -10 + +echo +echo "============================================================" +echo " 2. HTTPS probe to https://$HOST/" +echo "============================================================" +curl -skv "https://$HOST/" 2>&1 | head -60 + +echo +echo "============================================================" +echo " 3. Body snippet" +echo "============================================================" +curl -sk "https://$HOST/" 2>&1 | head -30 + +echo +echo "============================================================" +echo " 4. Direct web:3000 probe from inside caddy" +echo "============================================================" +$COMPOSE exec -T caddy wget -qO- --server-response http://web:3000/ 2>&1 | head -30 + +echo +echo "============================================================" +echo " 5. NextAuth URL / relevant web env (from inside web)" +echo "============================================================" +$COMPOSE exec -T web printenv 2>&1 | grep -E 'NEXTAUTH|NEXT_PUBLIC|SERVER_API_URL' | head -10 + +echo +echo "============================================================" +echo " 6. web container logs (last 40 lines)" +echo "============================================================" +$COMPOSE logs --tail=40 web 2>&1 | tail -40 + +echo +echo "============================================================" +echo " 7. caddy recent errors to the web upstream (last 10)" +echo "============================================================" +$COMPOSE logs --tail=200 caddy 2>&1 | grep -Ei 'error|web:3000|dial tcp' | tail -10 diff --git a/ui/scripts/debug-v2.sh b/ui/scripts/debug-v2.sh new file mode 100755 index 00000000..b7ac7a71 --- /dev/null +++ b/ui/scripts/debug-v2.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +# Diagnoses why reflector.local/v2/ isn't serving the SPA. +# Usage: ./ui/scripts/debug-v2.sh [host] (default host: reflector.local) +set +e +HOST="${1:-reflector.local}" +COMPOSE="docker compose -f docker-compose.selfhosted.yml" + +echo "============================================================" +echo " 1. Container status" +echo "============================================================" +$COMPOSE ps ui caddy web 2>&1 | head -20 + +echo +echo "============================================================" +echo " 2. Live Caddyfile inside the caddy container" +echo "============================================================" +$COMPOSE exec -T caddy cat /etc/caddy/Caddyfile 2>&1 | sed -n '/handle \/v2\|handle {/{p;n;p;n;p;}' | head -20 +echo "--- full handle blocks (first 40 lines) ---" +$COMPOSE exec -T caddy cat /etc/caddy/Caddyfile 2>&1 | grep -nE 'handle|reverse_proxy|tls' | head -40 + +echo +echo "============================================================" +echo " 3. nginx config inside the ui container" +echo "============================================================" +$COMPOSE exec -T ui cat /etc/nginx/conf.d/default.conf 2>&1 + +echo +echo "============================================================" +echo " 4. dist contents inside the ui container" +echo "============================================================" +$COMPOSE exec -T ui ls -la /usr/share/nginx/html/v2/ 2>&1 | head -20 + +echo +echo "============================================================" +echo " 5. Direct nginx probe (bypass Caddy) — container -> container" +echo "============================================================" +echo "--- GET http://ui/v2/ from inside caddy ---" +$COMPOSE exec -T caddy wget -qO- --server-response http://ui/v2/ 2>&1 | head -40 +echo +echo "--- GET http://ui/v2 (no slash) from inside caddy ---" +$COMPOSE exec -T caddy wget -qO- --server-response http://ui/v2 2>&1 | head -20 + +echo +echo "============================================================" +echo " 6. Caddy probe from host" +echo "============================================================" +echo "--- GET https://$HOST/v2/ ---" +curl -sk -o /dev/null -D - "https://$HOST/v2/" 2>&1 | head -20 +echo +echo "--- GET https://$HOST/v2 (no slash) ---" +curl -sk -o /dev/null -D - "https://$HOST/v2" 2>&1 | head -20 +echo +echo "--- body of https://$HOST/v2/ (first 30 lines) ---" +curl -sk "https://$HOST/v2/" 2>&1 | head -30 + +echo +echo "============================================================" +echo " 7. Recent ui + caddy logs" +echo "============================================================" +echo "--- ui (last 30 lines) ---" +$COMPOSE logs --tail=30 ui 2>&1 | tail -30 +echo "--- caddy (last 30 lines) ---" +$COMPOSE logs --tail=30 caddy 2>&1 | tail -30 diff --git a/ui/src/App.tsx b/ui/src/App.tsx new file mode 100644 index 00000000..954fa438 --- /dev/null +++ b/ui/src/App.tsx @@ -0,0 +1,74 @@ +import { BrowserRouter, Navigate, Route, Routes, useParams } from 'react-router-dom' +import { QueryClientProvider } from '@tanstack/react-query' +import { NuqsAdapter } from 'nuqs/adapters/react-router/v7' +import { Toaster } from 'sonner' +import { queryClient } from '@/api/queryClient' +import { AuthProvider } from '@/auth/AuthProvider' +import { RequireAuth } from '@/auth/RequireAuth' +import { BrowsePage } from '@/pages/BrowsePage' +import { RoomsPage } from '@/pages/RoomsPage' +import { TranscriptPage } from '@/pages/TranscriptPage' +import { LoggedOutPage } from '@/pages/LoggedOut' +import { LoginForm } from '@/pages/LoginForm' +import { AuthCallbackPage } from '@/pages/AuthCallback' + +function TranscriptRedirect() { + const { id } = useParams() + return +} + +export default function App() { + return ( + + + + + + } /> + } /> + } /> + } /> + } /> + + + + } + /> + + + + } + /> + + + + } + /> + } /> + } /> + + + + + + + ) +} diff --git a/ui/src/api/client.ts b/ui/src/api/client.ts new file mode 100644 index 00000000..28d48e78 --- /dev/null +++ b/ui/src/api/client.ts @@ -0,0 +1,32 @@ +import createClient, { type Middleware } from 'openapi-fetch' +import createQueryClient from 'openapi-react-query' +import type { paths } from './schema' + +export const PASSWORD_TOKEN_KEY = 'reflector.password_token' + +let oidcAccessTokenGetter: (() => string | null) | null = null +export function setOidcAccessTokenGetter(getter: (() => string | null) | null) { + oidcAccessTokenGetter = getter +} + +export function setPasswordToken(token: string | null) { + if (token) sessionStorage.setItem(PASSWORD_TOKEN_KEY, token) + else sessionStorage.removeItem(PASSWORD_TOKEN_KEY) +} + +export function getPasswordToken() { + return sessionStorage.getItem(PASSWORD_TOKEN_KEY) +} + +const authMiddleware: Middleware = { + async onRequest({ request }) { + const token = oidcAccessTokenGetter?.() ?? getPasswordToken() + if (token) request.headers.set('Authorization', `Bearer ${token}`) + return request + }, +} + +export const apiClient = createClient({ baseUrl: '/' }) +apiClient.use(authMiddleware) + +export const $api = createQueryClient(apiClient) diff --git a/ui/src/api/queryClient.ts b/ui/src/api/queryClient.ts new file mode 100644 index 00000000..15c2f3ce --- /dev/null +++ b/ui/src/api/queryClient.ts @@ -0,0 +1,15 @@ +import { QueryClient } from '@tanstack/react-query' + +export const queryClient = new QueryClient({ + defaultOptions: { + queries: { + staleTime: 15_000, + retry: (failureCount, error) => { + const status = (error as { status?: number } | null)?.status + if (status === 401 || status === 403 || status === 404) return false + return failureCount < 2 + }, + refetchOnWindowFocus: false, + }, + }, +}) diff --git a/ui/src/api/schema.d.ts b/ui/src/api/schema.d.ts new file mode 100644 index 00000000..80f12f94 --- /dev/null +++ b/ui/src/api/schema.d.ts @@ -0,0 +1,4556 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/health": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Health */ + get: operations["health"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/metrics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Metrics + * @description Endpoint that serves Prometheus metrics. + */ + get: operations["metrics"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/meetings/{meeting_id}/consent": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Meeting Audio Consent */ + post: operations["v1_meeting_audio_consent"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/meetings/{meeting_id}/deactivate": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** Meeting Deactivate */ + patch: operations["v1_meeting_deactivate"]; + trace?: never; + }; + "/v1/meetings/{meeting_id}/recordings/start": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Start Recording + * @description Start cloud or raw-tracks recording via Daily.co REST API. + * + * Both cloud and raw-tracks are started via REST API to bypass enable_recording limitation of allowing only 1 recording at a time. + * Uses different instanceIds for cloud vs raw-tracks (same won't work) + */ + post: operations["v1_start_recording"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/meetings/{meeting_id}/email-recipient": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Email Recipient + * @description Add an email address to receive the transcript link when processing completes. + */ + post: operations["v1_add_email_recipient"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Rooms List */ + get: operations["v1_rooms_list"]; + put?: never; + /** Rooms Create */ + post: operations["v1_rooms_create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms/{room_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Rooms Get */ + get: operations["v1_rooms_get"]; + put?: never; + post?: never; + /** Rooms Delete */ + delete: operations["v1_rooms_delete"]; + options?: never; + head?: never; + /** Rooms Update */ + patch: operations["v1_rooms_update"]; + trace?: never; + }; + "/v1/rooms/name/{room_name}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Rooms Get By Name */ + get: operations["v1_rooms_get_by_name"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms/{room_name}/meeting": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Rooms Create Meeting */ + post: operations["v1_rooms_create_meeting"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms/{room_id}/webhook/test": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Rooms Test Webhook + * @description Test webhook configuration by sending a sample payload. + */ + post: operations["v1_rooms_test_webhook"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms/{room_name}/ics/sync": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Rooms Sync Ics */ + post: operations["v1_rooms_sync_ics"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms/{room_name}/ics/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Rooms Ics Status */ + get: operations["v1_rooms_ics_status"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms/{room_name}/meetings": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Rooms List Meetings */ + get: operations["v1_rooms_list_meetings"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms/{room_name}/meetings/upcoming": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Rooms List Upcoming Meetings */ + get: operations["v1_rooms_list_upcoming_meetings"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms/{room_name}/meetings/active": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Rooms List Active Meetings */ + get: operations["v1_rooms_list_active_meetings"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms/{room_name}/meetings/{meeting_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Rooms Get Meeting + * @description Get a single meeting by ID within a specific room. + */ + get: operations["v1_rooms_get_meeting"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/rooms/{room_name}/meetings/{meeting_id}/join": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Rooms Join Meeting */ + post: operations["v1_rooms_join_meeting"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcripts List */ + get: operations["v1_transcripts_list"]; + put?: never; + /** Transcripts Create */ + post: operations["v1_transcripts_create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/search": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Transcripts Search + * @description Full-text search across transcript titles and content. + */ + get: operations["v1_transcripts_search"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcript Get */ + get: operations["v1_transcript_get"]; + put?: never; + post?: never; + /** Transcript Delete */ + delete: operations["v1_transcript_delete"]; + options?: never; + head?: never; + /** Transcript Update */ + patch: operations["v1_transcript_update"]; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/restore": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Transcript Restore + * @description Restore a soft-deleted transcript. + */ + post: operations["v1_transcript_restore"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/destroy": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Transcript Destroy + * @description Permanently delete a transcript and all associated files. + */ + delete: operations["v1_transcript_destroy"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/topics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcript Get Topics */ + get: operations["v1_transcript_get_topics"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/topics/with-words": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcript Get Topics With Words */ + get: operations["v1_transcript_get_topics_with_words"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/topics/{topic_id}/words-per-speaker": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcript Get Topics With Words Per Speaker */ + get: operations["v1_transcript_get_topics_with_words_per_speaker"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/zulip": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Transcript Post To Zulip */ + post: operations["v1_transcript_post_to_zulip"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/email": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Transcript Send Email */ + post: operations["v1_transcript_send_email"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/audio/mp3": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcript Get Audio Mp3 */ + get: operations["v1_transcript_get_audio_mp3"]; + put?: never; + post?: never; + delete?: never; + options?: never; + /** Transcript Get Audio Mp3 */ + head: operations["v1_transcript_head_audio_mp3"]; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/audio/waveform": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcript Get Audio Waveform */ + get: operations["v1_transcript_get_audio_waveform"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/participants": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcript Get Participants */ + get: operations["v1_transcript_get_participants"]; + put?: never; + /** Transcript Add Participant */ + post: operations["v1_transcript_add_participant"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/participants/{participant_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcript Get Participant */ + get: operations["v1_transcript_get_participant"]; + put?: never; + post?: never; + /** Transcript Delete Participant */ + delete: operations["v1_transcript_delete_participant"]; + options?: never; + head?: never; + /** Transcript Update Participant */ + patch: operations["v1_transcript_update_participant"]; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/speaker/assign": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** Transcript Assign Speaker */ + patch: operations["v1_transcript_assign_speaker"]; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/speaker/merge": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** Transcript Merge Speaker */ + patch: operations["v1_transcript_merge_speaker"]; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/record/upload": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Transcript Record Upload */ + post: operations["v1_transcript_record_upload"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/download/zip": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcript Download Zip */ + get: operations["v1_transcript_download_zip"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/video/url": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Transcript Get Video Url */ + get: operations["v1_transcript_get_video_url"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/events": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Transcript WebSocket event schema + * @description Stub exposing the discriminated union of all transcript-level WS events for OpenAPI type generation. Real events are delivered over the WebSocket at the same path. + */ + get: operations["v1_transcript_get_websocket_events"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/record/webrtc": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Transcript Record Webrtc */ + post: operations["v1_transcript_record_webrtc"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/transcripts/{transcript_id}/process": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Transcript Process */ + post: operations["v1_transcript_process"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/me": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** User Me */ + get: operations["v1_user_me"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/user/api-keys": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List Api Keys */ + get: operations["v1_list_api_keys"]; + put?: never; + /** Create Api Key */ + post: operations["v1_create_api_key"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/user/api-keys/{key_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Api Key */ + delete: operations["v1_delete_api_key"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/events": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * User WebSocket event schema + * @description Stub exposing the discriminated union of all user-level WS events for OpenAPI type generation. Real events are delivered over the WebSocket at the same path. + */ + get: operations["v1_user_get_websocket_events"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/config": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Config */ + get: operations["v1_get_config"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/zulip/streams": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Zulip Get Streams + * @description Get all Zulip streams. Returns [] if the upstream Zulip API is unreachable + * or the server credentials are invalid — the client treats Zulip as an + * optional integration and renders gracefully without a hard error. + */ + get: operations["v1_zulip_get_streams"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/zulip/streams/{stream_id}/topics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Zulip Get Topics + * @description Get all topics for a specific Zulip stream. Returns [] on upstream failure + * for the same reason as /zulip/streams above. + */ + get: operations["v1_zulip_get_topics"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/whereby": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Whereby Webhook */ + post: operations["v1_whereby_webhook"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/daily/webhook": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Webhook + * @description Handle Daily webhook events. + * + * Example webhook payload: + * { + * "version": "1.0.0", + * "type": "recording.ready-to-download", + * "id": "rec-rtd-c3df927c-f738-4471-a2b7-066fa7e95a6b-1692124192", + * "payload": { + * "recording_id": "08fa0b24-9220-44c5-846c-3f116cf8e738", + * "room_name": "Xcm97xRZ08b2dePKb78g", + * "start_ts": 1692124183, + * "status": "finished", + * "max_participants": 1, + * "duration": 9, + * "share_token": "ntDCL5k98Ulq", #gitleaks:allow + * "s3_key": "api-test-1j8fizhzd30c/Xcm97xRZ08b2dePKb78g/1692124183028" + * }, + * "event_ts": 1692124192 + * } + * + * Daily.co circuit-breaker: After 3+ failed responses (4xx/5xx), webhook + * state→FAILED, stops sending events. Reset: scripts/recreate_daily_webhook.py + */ + post: operations["v1_webhook"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/livekit/webhook": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Livekit Webhook + * @description Handle LiveKit webhook events. + * + * LiveKit webhook events include: + * - participant_joined / participant_left + * - egress_started / egress_updated / egress_ended + * - room_started / room_finished + * - track_published / track_unpublished + */ + post: operations["v1_livekit_webhook"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/auth/login": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Login */ + post: operations["v1_login"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + /** AddEmailRecipientRequest */ + AddEmailRecipientRequest: { + /** + * Email + * Format: email + */ + email: string; + }; + /** ApiKeyResponse */ + ApiKeyResponse: { + /** + * Id + * @description A non-empty string + */ + id: string; + /** + * User Id + * @description A non-empty string + */ + user_id: string; + /** Name */ + name: string | null; + /** + * Created At + * Format: date-time + */ + created_at: string; + }; + /** AudioWaveform */ + AudioWaveform: { + /** Data */ + data: number[]; + }; + /** Body_transcript_record_upload_v1_transcripts__transcript_id__record_upload_post */ + Body_transcript_record_upload_v1_transcripts__transcript_id__record_upload_post: { + /** Chunk */ + chunk: string; + }; + /** CalendarEventResponse */ + CalendarEventResponse: { + /** Id */ + id: string; + /** Room Id */ + room_id: string; + /** Ics Uid */ + ics_uid: string; + /** Title */ + title?: string | null; + /** Description */ + description?: string | null; + /** + * Start Time + * Format: date-time + */ + start_time: string; + /** + * End Time + * Format: date-time + */ + end_time: string; + /** Attendees */ + attendees?: { + [key: string]: unknown; + }[] | null; + /** Location */ + location?: string | null; + /** + * Last Synced + * Format: date-time + */ + last_synced: string; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** ConfigResponse */ + ConfigResponse: { + /** Zulip Enabled */ + zulip_enabled: boolean; + /** Email Enabled */ + email_enabled: boolean; + }; + /** CreateApiKeyRequest */ + CreateApiKeyRequest: { + /** Name */ + name?: string | null; + }; + /** CreateApiKeyResponse */ + CreateApiKeyResponse: { + /** + * Id + * @description A non-empty string + */ + id: string; + /** + * User Id + * @description A non-empty string + */ + user_id: string; + /** Name */ + name: string | null; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Key + * @description A non-empty string + */ + key: string; + }; + /** CreateParticipant */ + CreateParticipant: { + /** Speaker */ + speaker?: number | null; + /** Name */ + name: string; + }; + /** CreateRoom */ + CreateRoom: { + /** Name */ + name: string; + /** Zulip Auto Post */ + zulip_auto_post: boolean; + /** Zulip Stream */ + zulip_stream: string; + /** Zulip Topic */ + zulip_topic: string; + /** Is Locked */ + is_locked: boolean; + /** Room Mode */ + room_mode: string; + /** Recording Type */ + recording_type: string; + /** Recording Trigger */ + recording_trigger: string; + /** Is Shared */ + is_shared: boolean; + /** Webhook Url */ + webhook_url: string; + /** Webhook Secret */ + webhook_secret: string; + /** Ics Url */ + ics_url?: string | null; + /** + * Ics Fetch Interval + * @default 300 + */ + ics_fetch_interval: number; + /** + * Ics Enabled + * @default false + */ + ics_enabled: boolean; + /** + * Platform + * @enum {string} + */ + platform: "whereby" | "daily" | "livekit"; + /** + * Skip Consent + * @default false + */ + skip_consent: boolean; + /** Email Transcript To */ + email_transcript_to?: string | null; + /** + * Store Video + * @default false + */ + store_video: boolean; + }; + /** CreateRoomMeeting */ + CreateRoomMeeting: { + /** + * Allow Duplicated + * @default false + */ + allow_duplicated: boolean | null; + }; + /** CreateTranscript */ + CreateTranscript: { + /** Name */ + name: string; + /** + * Source Language + * @default en + */ + source_language: string; + /** + * Target Language + * @default en + */ + target_language: string; + source_kind?: components["schemas"]["SourceKind"] | null; + }; + /** DeletionStatus */ + DeletionStatus: { + /** Status */ + status: string; + }; + /** GetTranscriptMinimal */ + GetTranscriptMinimal: { + /** Id */ + id: string; + /** User Id */ + user_id: string | null; + /** Name */ + name: string; + /** + * Status + * @enum {string} + */ + status: "idle" | "uploaded" | "recording" | "processing" | "error" | "ended"; + /** Locked */ + locked: boolean; + /** Duration */ + duration: number; + /** Title */ + title: string | null; + /** Short Summary */ + short_summary: string | null; + /** Long Summary */ + long_summary: string | null; + /** Created At */ + created_at: string; + /** + * Share Mode + * @default private + */ + share_mode: string; + /** Source Language */ + source_language: string | null; + /** Target Language */ + target_language: string | null; + /** Reviewed */ + reviewed: boolean; + /** Meeting Id */ + meeting_id: string | null; + source_kind: components["schemas"]["SourceKind"]; + /** Room Id */ + room_id?: string | null; + /** Room Name */ + room_name?: string | null; + /** Audio Deleted */ + audio_deleted?: boolean | null; + /** Change Seq */ + change_seq?: number | null; + /** + * Has Cloud Video + * @default false + */ + has_cloud_video: boolean; + /** Cloud Video Duration */ + cloud_video_duration?: number | null; + /** + * Speaker Count + * @default 0 + */ + speaker_count: number; + }; + /** GetTranscriptSegmentTopic */ + GetTranscriptSegmentTopic: { + /** Text */ + text: string; + /** Start */ + start: number; + /** Speaker */ + speaker: number; + }; + /** GetTranscriptTopic */ + GetTranscriptTopic: { + /** Id */ + id: string; + /** Title */ + title: string; + /** Summary */ + summary: string; + /** Timestamp */ + timestamp: number; + /** Duration */ + duration: number | null; + /** Transcript */ + transcript: string; + /** + * Segments + * @default [] + */ + segments: components["schemas"]["GetTranscriptSegmentTopic"][]; + }; + /** GetTranscriptTopicWithWords */ + GetTranscriptTopicWithWords: { + /** Id */ + id: string; + /** Title */ + title: string; + /** Summary */ + summary: string; + /** Timestamp */ + timestamp: number; + /** Duration */ + duration: number | null; + /** Transcript */ + transcript: string; + /** + * Segments + * @default [] + */ + segments: components["schemas"]["GetTranscriptSegmentTopic"][]; + /** + * Words + * @default [] + */ + words: components["schemas"]["Word"][]; + }; + /** GetTranscriptTopicWithWordsPerSpeaker */ + GetTranscriptTopicWithWordsPerSpeaker: { + /** Id */ + id: string; + /** Title */ + title: string; + /** Summary */ + summary: string; + /** Timestamp */ + timestamp: number; + /** Duration */ + duration: number | null; + /** Transcript */ + transcript: string; + /** + * Segments + * @default [] + */ + segments: components["schemas"]["GetTranscriptSegmentTopic"][]; + /** + * Words Per Speaker + * @default [] + */ + words_per_speaker: components["schemas"]["SpeakerWords"][]; + }; + /** + * GetTranscriptWithJSON + * @description Transcript response as structured JSON segments. + * + * Format: Array of segment objects with speaker info, text, and timing. + * Example: + * [ + * { + * "speaker": 0, + * "speaker_name": "John Smith", + * "text": "Hello everyone", + * "start": 0.0, + * "end": 5.0 + * } + * ] + */ + GetTranscriptWithJSON: { + /** Id */ + id: string; + /** User Id */ + user_id: string | null; + /** Name */ + name: string; + /** + * Status + * @enum {string} + */ + status: "idle" | "uploaded" | "recording" | "processing" | "error" | "ended"; + /** Locked */ + locked: boolean; + /** Duration */ + duration: number; + /** Title */ + title: string | null; + /** Short Summary */ + short_summary: string | null; + /** Long Summary */ + long_summary: string | null; + /** Created At */ + created_at: string; + /** + * Share Mode + * @default private + */ + share_mode: string; + /** Source Language */ + source_language: string | null; + /** Target Language */ + target_language: string | null; + /** Reviewed */ + reviewed: boolean; + /** Meeting Id */ + meeting_id: string | null; + source_kind: components["schemas"]["SourceKind"]; + /** Room Id */ + room_id?: string | null; + /** Room Name */ + room_name?: string | null; + /** Audio Deleted */ + audio_deleted?: boolean | null; + /** Change Seq */ + change_seq?: number | null; + /** + * Has Cloud Video + * @default false + */ + has_cloud_video: boolean; + /** Cloud Video Duration */ + cloud_video_duration?: number | null; + /** + * Speaker Count + * @default 0 + */ + speaker_count: number; + /** Participants */ + participants: components["schemas"]["TranscriptParticipantWithEmail"][] | null; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + transcript_format: "json"; + /** Transcript */ + transcript: components["schemas"]["TranscriptSegment"][]; + }; + /** GetTranscriptWithParticipants */ + GetTranscriptWithParticipants: { + /** Id */ + id: string; + /** User Id */ + user_id: string | null; + /** Name */ + name: string; + /** + * Status + * @enum {string} + */ + status: "idle" | "uploaded" | "recording" | "processing" | "error" | "ended"; + /** Locked */ + locked: boolean; + /** Duration */ + duration: number; + /** Title */ + title: string | null; + /** Short Summary */ + short_summary: string | null; + /** Long Summary */ + long_summary: string | null; + /** Created At */ + created_at: string; + /** + * Share Mode + * @default private + */ + share_mode: string; + /** Source Language */ + source_language: string | null; + /** Target Language */ + target_language: string | null; + /** Reviewed */ + reviewed: boolean; + /** Meeting Id */ + meeting_id: string | null; + source_kind: components["schemas"]["SourceKind"]; + /** Room Id */ + room_id?: string | null; + /** Room Name */ + room_name?: string | null; + /** Audio Deleted */ + audio_deleted?: boolean | null; + /** Change Seq */ + change_seq?: number | null; + /** + * Has Cloud Video + * @default false + */ + has_cloud_video: boolean; + /** Cloud Video Duration */ + cloud_video_duration?: number | null; + /** + * Speaker Count + * @default 0 + */ + speaker_count: number; + /** Participants */ + participants: components["schemas"]["TranscriptParticipantWithEmail"][] | null; + }; + /** + * GetTranscriptWithText + * @description Transcript response with plain text format. + * + * Format: Speaker names followed by their dialogue, one line per segment. + * Example: + * John Smith: Hello everyone + * Jane Doe: Hi there + */ + GetTranscriptWithText: { + /** Id */ + id: string; + /** User Id */ + user_id: string | null; + /** Name */ + name: string; + /** + * Status + * @enum {string} + */ + status: "idle" | "uploaded" | "recording" | "processing" | "error" | "ended"; + /** Locked */ + locked: boolean; + /** Duration */ + duration: number; + /** Title */ + title: string | null; + /** Short Summary */ + short_summary: string | null; + /** Long Summary */ + long_summary: string | null; + /** Created At */ + created_at: string; + /** + * Share Mode + * @default private + */ + share_mode: string; + /** Source Language */ + source_language: string | null; + /** Target Language */ + target_language: string | null; + /** Reviewed */ + reviewed: boolean; + /** Meeting Id */ + meeting_id: string | null; + source_kind: components["schemas"]["SourceKind"]; + /** Room Id */ + room_id?: string | null; + /** Room Name */ + room_name?: string | null; + /** Audio Deleted */ + audio_deleted?: boolean | null; + /** Change Seq */ + change_seq?: number | null; + /** + * Has Cloud Video + * @default false + */ + has_cloud_video: boolean; + /** Cloud Video Duration */ + cloud_video_duration?: number | null; + /** + * Speaker Count + * @default 0 + */ + speaker_count: number; + /** Participants */ + participants: components["schemas"]["TranscriptParticipantWithEmail"][] | null; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + transcript_format: "text"; + /** Transcript */ + transcript: string; + }; + /** + * GetTranscriptWithTextTimestamped + * @description Transcript response with timestamped text format. + * + * Format: [MM:SS] timestamp prefix before each speaker and dialogue. + * Example: + * [00:00] John Smith: Hello everyone + * [00:05] Jane Doe: Hi there + */ + GetTranscriptWithTextTimestamped: { + /** Id */ + id: string; + /** User Id */ + user_id: string | null; + /** Name */ + name: string; + /** + * Status + * @enum {string} + */ + status: "idle" | "uploaded" | "recording" | "processing" | "error" | "ended"; + /** Locked */ + locked: boolean; + /** Duration */ + duration: number; + /** Title */ + title: string | null; + /** Short Summary */ + short_summary: string | null; + /** Long Summary */ + long_summary: string | null; + /** Created At */ + created_at: string; + /** + * Share Mode + * @default private + */ + share_mode: string; + /** Source Language */ + source_language: string | null; + /** Target Language */ + target_language: string | null; + /** Reviewed */ + reviewed: boolean; + /** Meeting Id */ + meeting_id: string | null; + source_kind: components["schemas"]["SourceKind"]; + /** Room Id */ + room_id?: string | null; + /** Room Name */ + room_name?: string | null; + /** Audio Deleted */ + audio_deleted?: boolean | null; + /** Change Seq */ + change_seq?: number | null; + /** + * Has Cloud Video + * @default false + */ + has_cloud_video: boolean; + /** Cloud Video Duration */ + cloud_video_duration?: number | null; + /** + * Speaker Count + * @default 0 + */ + speaker_count: number; + /** Participants */ + participants: components["schemas"]["TranscriptParticipantWithEmail"][] | null; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + transcript_format: "text-timestamped"; + /** Transcript */ + transcript: string; + }; + /** + * GetTranscriptWithWebVTTNamed + * @description Transcript response in WebVTT subtitle format with participant names. + * + * Format: Standard WebVTT with voice tags using participant names. + * Example: + * WEBVTT + * + * 00:00:00.000 --> 00:00:05.000 + * Hello everyone + */ + GetTranscriptWithWebVTTNamed: { + /** Id */ + id: string; + /** User Id */ + user_id: string | null; + /** Name */ + name: string; + /** + * Status + * @enum {string} + */ + status: "idle" | "uploaded" | "recording" | "processing" | "error" | "ended"; + /** Locked */ + locked: boolean; + /** Duration */ + duration: number; + /** Title */ + title: string | null; + /** Short Summary */ + short_summary: string | null; + /** Long Summary */ + long_summary: string | null; + /** Created At */ + created_at: string; + /** + * Share Mode + * @default private + */ + share_mode: string; + /** Source Language */ + source_language: string | null; + /** Target Language */ + target_language: string | null; + /** Reviewed */ + reviewed: boolean; + /** Meeting Id */ + meeting_id: string | null; + source_kind: components["schemas"]["SourceKind"]; + /** Room Id */ + room_id?: string | null; + /** Room Name */ + room_name?: string | null; + /** Audio Deleted */ + audio_deleted?: boolean | null; + /** Change Seq */ + change_seq?: number | null; + /** + * Has Cloud Video + * @default false + */ + has_cloud_video: boolean; + /** Cloud Video Duration */ + cloud_video_duration?: number | null; + /** + * Speaker Count + * @default 0 + */ + speaker_count: number; + /** Participants */ + participants: components["schemas"]["TranscriptParticipantWithEmail"][] | null; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + transcript_format: "webvtt-named"; + /** Transcript */ + transcript: string; + }; + /** HTTPValidationError */ + HTTPValidationError: { + /** Detail */ + detail?: components["schemas"]["ValidationError"][]; + }; + /** ICSStatus */ + ICSStatus: { + /** + * Status + * @enum {string} + */ + status: "enabled" | "disabled"; + /** Last Sync */ + last_sync?: string | null; + /** Next Sync */ + next_sync?: string | null; + /** Last Etag */ + last_etag?: string | null; + /** + * Events Count + * @default 0 + */ + events_count: number; + }; + /** ICSSyncResult */ + ICSSyncResult: { + status: components["schemas"]["SyncStatus"]; + /** Hash */ + hash?: string | null; + /** + * Events Found + * @default 0 + */ + events_found: number; + /** + * Total Events + * @default 0 + */ + total_events: number; + /** + * Events Created + * @default 0 + */ + events_created: number; + /** + * Events Updated + * @default 0 + */ + events_updated: number; + /** + * Events Deleted + * @default 0 + */ + events_deleted: number; + /** Error */ + error?: string | null; + /** Reason */ + reason?: string | null; + }; + /** LoginRequest */ + LoginRequest: { + /** Email */ + email: string; + /** Password */ + password: string; + }; + /** LoginResponse */ + LoginResponse: { + /** Access Token */ + access_token: string; + /** + * Token Type + * @default bearer + */ + token_type: string; + /** Expires In */ + expires_in: number; + }; + /** Meeting */ + Meeting: { + /** Id */ + id: string; + /** Room Name */ + room_name: string; + /** Room Url */ + room_url: string; + /** Host Room Url */ + host_room_url: string; + /** + * Start Date + * Format: date-time + */ + start_date: string; + /** + * End Date + * Format: date-time + */ + end_date: string; + /** User Id */ + user_id?: string | null; + /** Room Id */ + room_id?: string | null; + /** + * Is Locked + * @default false + */ + is_locked: boolean; + /** + * Room Mode + * @default normal + * @enum {string} + */ + room_mode: "normal" | "group"; + /** + * Recording Type + * @default cloud + * @enum {string} + */ + recording_type: "none" | "local" | "cloud"; + /** + * Recording Trigger + * @default automatic-2nd-participant + * @enum {string} + */ + recording_trigger: "none" | "prompt" | "automatic" | "automatic-2nd-participant"; + /** + * Num Clients + * @default 0 + */ + num_clients: number; + /** + * Is Active + * @default true + */ + is_active: boolean; + /** Calendar Event Id */ + calendar_event_id?: string | null; + /** Calendar Metadata */ + calendar_metadata?: { + [key: string]: unknown; + } | null; + /** + * Platform + * @enum {string} + */ + platform: "whereby" | "daily" | "livekit"; + /** Daily Composed Video S3 Key */ + daily_composed_video_s3_key?: string | null; + /** Daily Composed Video Duration */ + daily_composed_video_duration?: number | null; + /** + * Store Video + * @default false + */ + store_video: boolean; + }; + /** MeetingConsentRequest */ + MeetingConsentRequest: { + /** Consent Given */ + consent_given: boolean; + }; + /** Page[GetTranscriptMinimal] */ + Page_GetTranscriptMinimal_: { + /** Items */ + items: components["schemas"]["GetTranscriptMinimal"][]; + /** Total */ + total: number; + /** Page */ + page: number; + /** Size */ + size: number; + /** Pages */ + pages: number; + }; + /** Page[RoomDetails] */ + Page_RoomDetails_: { + /** Items */ + items: components["schemas"]["RoomDetails"][]; + /** Total */ + total: number; + /** Page */ + page: number; + /** Size */ + size: number; + /** Pages */ + pages: number; + }; + /** Participant */ + Participant: { + /** Id */ + id: string; + /** Speaker */ + speaker: number | null; + /** Name */ + name: string; + }; + /** ProcessStatus */ + ProcessStatus: { + /** Status */ + status: string; + }; + /** Room */ + Room: { + /** Id */ + id: string; + /** Name */ + name: string; + /** User Id */ + user_id: string; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** Zulip Auto Post */ + zulip_auto_post: boolean; + /** Zulip Stream */ + zulip_stream: string; + /** Zulip Topic */ + zulip_topic: string; + /** Is Locked */ + is_locked: boolean; + /** Room Mode */ + room_mode: string; + /** Recording Type */ + recording_type: string; + /** Recording Trigger */ + recording_trigger: string; + /** Is Shared */ + is_shared: boolean; + /** Ics Url */ + ics_url?: string | null; + /** + * Ics Fetch Interval + * @default 300 + */ + ics_fetch_interval: number; + /** + * Ics Enabled + * @default false + */ + ics_enabled: boolean; + /** Ics Last Sync */ + ics_last_sync?: string | null; + /** Ics Last Etag */ + ics_last_etag?: string | null; + /** + * Platform + * @enum {string} + */ + platform: "whereby" | "daily" | "livekit"; + /** + * Skip Consent + * @default false + */ + skip_consent: boolean; + /** Email Transcript To */ + email_transcript_to?: string | null; + /** + * Store Video + * @default false + */ + store_video: boolean; + }; + /** RoomDetails */ + RoomDetails: { + /** Id */ + id: string; + /** Name */ + name: string; + /** User Id */ + user_id: string; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** Zulip Auto Post */ + zulip_auto_post: boolean; + /** Zulip Stream */ + zulip_stream: string; + /** Zulip Topic */ + zulip_topic: string; + /** Is Locked */ + is_locked: boolean; + /** Room Mode */ + room_mode: string; + /** Recording Type */ + recording_type: string; + /** Recording Trigger */ + recording_trigger: string; + /** Is Shared */ + is_shared: boolean; + /** Ics Url */ + ics_url?: string | null; + /** + * Ics Fetch Interval + * @default 300 + */ + ics_fetch_interval: number; + /** + * Ics Enabled + * @default false + */ + ics_enabled: boolean; + /** Ics Last Sync */ + ics_last_sync?: string | null; + /** Ics Last Etag */ + ics_last_etag?: string | null; + /** + * Platform + * @enum {string} + */ + platform: "whereby" | "daily" | "livekit"; + /** + * Skip Consent + * @default false + */ + skip_consent: boolean; + /** Email Transcript To */ + email_transcript_to?: string | null; + /** + * Store Video + * @default false + */ + store_video: boolean; + /** Webhook Url */ + webhook_url: string | null; + /** Webhook Secret */ + webhook_secret: string | null; + }; + /** RtcOffer */ + RtcOffer: { + /** Sdp */ + sdp: string; + /** Type */ + type: string; + }; + /** SearchResponse */ + SearchResponse: { + /** Results */ + results: components["schemas"]["SearchResult"][]; + /** + * Total + * @description Total number of search results + */ + total: number; + /** Query */ + query?: string | null; + /** + * Limit + * @description Results per page + */ + limit: number; + /** + * Offset + * @description Number of results to skip + */ + offset: number; + }; + /** + * SearchResult + * @description Public search result model with computed fields. + */ + SearchResult: { + /** Id */ + id: string; + /** Title */ + title?: string | null; + /** User Id */ + user_id?: string | null; + /** Room Id */ + room_id?: string | null; + /** Room Name */ + room_name?: string | null; + source_kind: components["schemas"]["SourceKind"]; + /** Created At */ + created_at: string; + /** + * Status + * @enum {string} + */ + status: "idle" | "uploaded" | "recording" | "processing" | "error" | "ended"; + /** Rank */ + rank: number; + /** + * Duration + * @description Duration in seconds + */ + duration: number | null; + /** + * Search Snippets + * @description Text snippets around search matches + */ + search_snippets: string[]; + /** + * Total Match Count + * @description Total number of matches found in the transcript + * @default 0 + */ + total_match_count: number; + /** + * Speaker Count + * @description Number of distinct speakers in the transcript + * @default 0 + */ + speaker_count: number; + /** Change Seq */ + change_seq?: number | null; + }; + /** SendEmailRequest */ + SendEmailRequest: { + /** Email */ + email: string; + }; + /** SendEmailResponse */ + SendEmailResponse: { + /** Sent */ + sent: number; + }; + /** + * SourceKind + * @enum {string} + */ + SourceKind: "room" | "live" | "file"; + /** SpeakerAssignment */ + SpeakerAssignment: { + /** Speaker */ + speaker?: number | null; + /** Participant */ + participant?: string | null; + /** Timestamp From */ + timestamp_from: number; + /** Timestamp To */ + timestamp_to: number; + }; + /** SpeakerAssignmentStatus */ + SpeakerAssignmentStatus: { + /** Status */ + status: string; + }; + /** SpeakerMerge */ + SpeakerMerge: { + /** Speaker From */ + speaker_from: number; + /** Speaker To */ + speaker_to: number; + }; + /** SpeakerWords */ + SpeakerWords: { + /** Speaker */ + speaker: number; + /** Words */ + words: components["schemas"]["Word"][]; + }; + /** StartRecordingRequest */ + StartRecordingRequest: { + /** + * Type + * @enum {string} + */ + type: "cloud" | "raw-tracks"; + /** + * Instanceid + * Format: uuid + */ + instanceId: string; + }; + /** Stream */ + Stream: { + /** Stream Id */ + stream_id: number; + /** Name */ + name: string; + }; + /** + * SyncStatus + * @enum {string} + */ + SyncStatus: "success" | "unchanged" | "error" | "skipped"; + /** Topic */ + Topic: { + /** Name */ + name: string; + }; + /** TranscriptActionItems */ + TranscriptActionItems: { + /** Action Items */ + action_items: { + [key: string]: unknown; + }; + }; + /** TranscriptDuration */ + TranscriptDuration: { + /** Duration */ + duration: number; + }; + /** TranscriptFinalLongSummary */ + TranscriptFinalLongSummary: { + /** Long Summary */ + long_summary: string; + }; + /** TranscriptFinalShortSummary */ + TranscriptFinalShortSummary: { + /** Short Summary */ + short_summary: string; + }; + /** TranscriptFinalTitle */ + TranscriptFinalTitle: { + /** Title */ + title: string; + }; + /** TranscriptParticipant */ + TranscriptParticipant: { + /** Id */ + id?: string; + /** Speaker */ + speaker: number | null; + /** Name */ + name: string; + /** User Id */ + user_id?: string | null; + }; + /** TranscriptParticipantWithEmail */ + TranscriptParticipantWithEmail: { + /** Id */ + id?: string; + /** Speaker */ + speaker: number | null; + /** Name */ + name: string; + /** User Id */ + user_id?: string | null; + /** Email */ + email?: string | null; + }; + /** + * TranscriptSegment + * @description A single transcript segment with speaker and timing information. + */ + TranscriptSegment: { + /** Speaker */ + speaker: number; + /** Speaker Name */ + speaker_name: string; + /** Text */ + text: string; + /** Start */ + start: number; + /** End */ + end: number; + }; + /** TranscriptText */ + TranscriptText: { + /** Text */ + text: string; + /** Translation */ + translation: string | null; + }; + /** TranscriptWaveform */ + TranscriptWaveform: { + /** Waveform */ + waveform: number[]; + }; + /** TranscriptWsActionItems */ + TranscriptWsActionItems: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "ACTION_ITEMS"; + data: components["schemas"]["TranscriptActionItems"]; + }; + /** TranscriptWsDuration */ + TranscriptWsDuration: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "DURATION"; + data: components["schemas"]["TranscriptDuration"]; + }; + /** TranscriptWsFinalLongSummary */ + TranscriptWsFinalLongSummary: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "FINAL_LONG_SUMMARY"; + data: components["schemas"]["TranscriptFinalLongSummary"]; + }; + /** TranscriptWsFinalShortSummary */ + TranscriptWsFinalShortSummary: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "FINAL_SHORT_SUMMARY"; + data: components["schemas"]["TranscriptFinalShortSummary"]; + }; + /** TranscriptWsFinalTitle */ + TranscriptWsFinalTitle: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "FINAL_TITLE"; + data: components["schemas"]["TranscriptFinalTitle"]; + }; + /** TranscriptWsStatus */ + TranscriptWsStatus: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "STATUS"; + data: components["schemas"]["TranscriptWsStatusData"]; + }; + /** TranscriptWsStatusData */ + TranscriptWsStatusData: { + /** + * Value + * @enum {string} + */ + value: "idle" | "uploaded" | "recording" | "processing" | "error" | "ended"; + }; + /** TranscriptWsTopic */ + TranscriptWsTopic: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "TOPIC"; + data: components["schemas"]["GetTranscriptTopic"]; + }; + /** TranscriptWsTranscript */ + TranscriptWsTranscript: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "TRANSCRIPT"; + data: components["schemas"]["TranscriptText"]; + }; + /** TranscriptWsWaveform */ + TranscriptWsWaveform: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "WAVEFORM"; + data: components["schemas"]["TranscriptWaveform"]; + }; + /** UpdateParticipant */ + UpdateParticipant: { + /** Speaker */ + speaker?: number | null; + /** Name */ + name?: string | null; + }; + /** UpdateRoom */ + UpdateRoom: { + /** Name */ + name?: string | null; + /** Zulip Auto Post */ + zulip_auto_post?: boolean | null; + /** Zulip Stream */ + zulip_stream?: string | null; + /** Zulip Topic */ + zulip_topic?: string | null; + /** Is Locked */ + is_locked?: boolean | null; + /** Room Mode */ + room_mode?: string | null; + /** Recording Type */ + recording_type?: string | null; + /** Recording Trigger */ + recording_trigger?: string | null; + /** Is Shared */ + is_shared?: boolean | null; + /** Webhook Url */ + webhook_url?: string | null; + /** Webhook Secret */ + webhook_secret?: string | null; + /** Ics Url */ + ics_url?: string | null; + /** Ics Fetch Interval */ + ics_fetch_interval?: number | null; + /** Ics Enabled */ + ics_enabled?: boolean | null; + /** Platform */ + platform?: ("whereby" | "daily" | "livekit") | null; + /** Skip Consent */ + skip_consent?: boolean | null; + /** Email Transcript To */ + email_transcript_to?: string | null; + /** Store Video */ + store_video?: boolean | null; + }; + /** UpdateTranscript */ + UpdateTranscript: { + /** Name */ + name?: string | null; + /** Locked */ + locked?: boolean | null; + /** Title */ + title?: string | null; + /** Short Summary */ + short_summary?: string | null; + /** Long Summary */ + long_summary?: string | null; + /** Share Mode */ + share_mode?: ("public" | "semi-private" | "private") | null; + /** Participants */ + participants?: components["schemas"]["TranscriptParticipant"][] | null; + /** Reviewed */ + reviewed?: boolean | null; + /** Audio Deleted */ + audio_deleted?: boolean | null; + }; + /** UserInfo */ + UserInfo: { + /** Sub */ + sub: string; + /** Email */ + email: string | null; + }; + /** UserTranscriptCreatedData */ + UserTranscriptCreatedData: { + /** + * Id + * @description A non-empty string + */ + id: string; + }; + /** UserTranscriptDeletedData */ + UserTranscriptDeletedData: { + /** + * Id + * @description A non-empty string + */ + id: string; + }; + /** UserTranscriptDurationData */ + UserTranscriptDurationData: { + /** + * Id + * @description A non-empty string + */ + id: string; + /** Duration */ + duration: number; + }; + /** UserTranscriptFinalTitleData */ + UserTranscriptFinalTitleData: { + /** + * Id + * @description A non-empty string + */ + id: string; + /** + * Title + * @description A non-empty string + */ + title: string; + }; + /** UserTranscriptRestoredData */ + UserTranscriptRestoredData: { + /** + * Id + * @description A non-empty string + */ + id: string; + }; + /** UserTranscriptStatusData */ + UserTranscriptStatusData: { + /** + * Id + * @description A non-empty string + */ + id: string; + /** + * Value + * @enum {string} + */ + value: "idle" | "uploaded" | "recording" | "processing" | "error" | "ended"; + }; + /** UserWsTranscriptCreated */ + UserWsTranscriptCreated: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "TRANSCRIPT_CREATED"; + data: components["schemas"]["UserTranscriptCreatedData"]; + }; + /** UserWsTranscriptDeleted */ + UserWsTranscriptDeleted: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "TRANSCRIPT_DELETED"; + data: components["schemas"]["UserTranscriptDeletedData"]; + }; + /** UserWsTranscriptDuration */ + UserWsTranscriptDuration: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "TRANSCRIPT_DURATION"; + data: components["schemas"]["UserTranscriptDurationData"]; + }; + /** UserWsTranscriptFinalTitle */ + UserWsTranscriptFinalTitle: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "TRANSCRIPT_FINAL_TITLE"; + data: components["schemas"]["UserTranscriptFinalTitleData"]; + }; + /** UserWsTranscriptRestored */ + UserWsTranscriptRestored: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "TRANSCRIPT_RESTORED"; + data: components["schemas"]["UserTranscriptRestoredData"]; + }; + /** UserWsTranscriptStatus */ + UserWsTranscriptStatus: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + event: "TRANSCRIPT_STATUS"; + data: components["schemas"]["UserTranscriptStatusData"]; + }; + /** ValidationError */ + ValidationError: { + /** Location */ + loc: (string | number)[]; + /** Message */ + msg: string; + /** Error Type */ + type: string; + /** Input */ + input?: unknown; + /** Context */ + ctx?: Record; + }; + /** VideoUrlResponse */ + VideoUrlResponse: { + /** Url */ + url: string; + /** Duration */ + duration?: number | null; + /** + * Content Type + * @default video/mp4 + */ + content_type: string; + }; + /** WebhookTestResult */ + WebhookTestResult: { + /** Success */ + success: boolean; + /** + * Message + * @default + */ + message: string; + /** + * Error + * @default + */ + error: string; + /** Status Code */ + status_code?: number | null; + /** Response Preview */ + response_preview?: string | null; + }; + /** WherebyWebhookEvent */ + WherebyWebhookEvent: { + /** Apiversion */ + apiVersion: string; + /** Id */ + id: string; + /** + * Createdat + * Format: date-time + */ + createdAt: string; + /** Type */ + type: string; + /** Data */ + data: { + [key: string]: unknown; + }; + }; + /** Word */ + Word: { + /** Text */ + text: string; + /** + * Start + * @description Time in seconds with float part + */ + start: number; + /** + * End + * @description Time in seconds with float part + */ + end: number; + /** + * Speaker + * @default 0 + */ + speaker: number; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + health: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + }; + }; + metrics: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + }; + }; + v1_meeting_audio_consent: { + parameters: { + query?: never; + header?: never; + path: { + meeting_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["MeetingConsentRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_meeting_deactivate: { + parameters: { + query?: never; + header?: never; + path: { + meeting_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_start_recording: { + parameters: { + query?: never; + header?: never; + path: { + meeting_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["StartRecordingRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: unknown; + }; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_add_email_recipient: { + parameters: { + query?: never; + header?: never; + path: { + meeting_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AddEmailRecipientRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_list: { + parameters: { + query?: { + /** @description Page number */ + page?: number; + /** @description Page size */ + size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Page_RoomDetails_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_create: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CreateRoom"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Room"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_get: { + parameters: { + query?: never; + header?: never; + path: { + room_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RoomDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_delete: { + parameters: { + query?: never; + header?: never; + path: { + room_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletionStatus"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_update: { + parameters: { + query?: never; + header?: never; + path: { + room_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UpdateRoom"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RoomDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_get_by_name: { + parameters: { + query?: never; + header?: never; + path: { + room_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RoomDetails"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_create_meeting: { + parameters: { + query?: never; + header?: never; + path: { + room_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CreateRoomMeeting"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Meeting"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_test_webhook: { + parameters: { + query?: never; + header?: never; + path: { + room_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WebhookTestResult"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_sync_ics: { + parameters: { + query?: never; + header?: never; + path: { + room_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ICSSyncResult"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_ics_status: { + parameters: { + query?: never; + header?: never; + path: { + room_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ICSStatus"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_list_meetings: { + parameters: { + query?: never; + header?: never; + path: { + room_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CalendarEventResponse"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_list_upcoming_meetings: { + parameters: { + query?: { + minutes_ahead?: number; + }; + header?: never; + path: { + room_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CalendarEventResponse"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_list_active_meetings: { + parameters: { + query?: never; + header?: never; + path: { + room_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Meeting"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_get_meeting: { + parameters: { + query?: never; + header?: never; + path: { + room_name: string; + meeting_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Meeting"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_rooms_join_meeting: { + parameters: { + query?: { + display_name?: string | null; + }; + header?: never; + path: { + room_name: string; + meeting_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Meeting"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcripts_list: { + parameters: { + query?: { + source_kind?: components["schemas"]["SourceKind"] | null; + room_id?: string | null; + search_term?: string | null; + change_seq_from?: number | null; + sort_by?: ("created_at" | "change_seq") | null; + /** @description Page number */ + page?: number; + /** @description Page size */ + size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Page_GetTranscriptMinimal_"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcripts_create: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CreateTranscript"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GetTranscriptWithParticipants"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcripts_search: { + parameters: { + query: { + /** @description Search query text */ + q: string; + /** @description Results per page */ + limit?: number; + /** @description Number of results to skip */ + offset?: number; + room_id?: string | null; + source_kind?: components["schemas"]["SourceKind"] | null; + /** @description Filter transcripts created on or after this datetime (ISO 8601 with timezone) */ + from?: string | null; + /** @description Filter transcripts created on or before this datetime (ISO 8601 with timezone) */ + to?: string | null; + include_deleted?: boolean; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SearchResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_get: { + parameters: { + query?: { + transcript_format?: "text" | "text-timestamped" | "webvtt-named" | "json"; + }; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GetTranscriptWithText"] | components["schemas"]["GetTranscriptWithTextTimestamped"] | components["schemas"]["GetTranscriptWithWebVTTNamed"] | components["schemas"]["GetTranscriptWithJSON"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_delete: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletionStatus"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_update: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UpdateTranscript"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GetTranscriptWithParticipants"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_restore: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletionStatus"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_destroy: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletionStatus"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_get_topics: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GetTranscriptTopic"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_get_topics_with_words: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GetTranscriptTopicWithWords"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_get_topics_with_words_per_speaker: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + topic_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GetTranscriptTopicWithWordsPerSpeaker"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_post_to_zulip: { + parameters: { + query: { + stream: string; + topic: string; + include_topics: boolean; + }; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_send_email: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SendEmailRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SendEmailResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_get_audio_mp3: { + parameters: { + query?: { + token?: string | null; + }; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_head_audio_mp3: { + parameters: { + query?: { + token?: string | null; + }; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_get_audio_waveform: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AudioWaveform"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_get_participants: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Participant"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_add_participant: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CreateParticipant"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Participant"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_get_participant: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + participant_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Participant"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_delete_participant: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + participant_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletionStatus"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_update_participant: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + participant_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UpdateParticipant"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Participant"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_assign_speaker: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SpeakerAssignment"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SpeakerAssignmentStatus"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_merge_speaker: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SpeakerMerge"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SpeakerAssignmentStatus"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_record_upload: { + parameters: { + query: { + chunk_number: number; + total_chunks: number; + }; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "multipart/form-data": components["schemas"]["Body_transcript_record_upload_v1_transcripts__transcript_id__record_upload_post"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_download_zip: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_get_video_url: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["VideoUrlResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_get_websocket_events: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TranscriptWsTranscript"] | components["schemas"]["TranscriptWsTopic"] | components["schemas"]["TranscriptWsStatus"] | components["schemas"]["TranscriptWsFinalTitle"] | components["schemas"]["TranscriptWsFinalLongSummary"] | components["schemas"]["TranscriptWsFinalShortSummary"] | components["schemas"]["TranscriptWsActionItems"] | components["schemas"]["TranscriptWsDuration"] | components["schemas"]["TranscriptWsWaveform"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_record_webrtc: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RtcOffer"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_transcript_process: { + parameters: { + query?: never; + header?: never; + path: { + transcript_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ProcessStatus"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_user_me: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserInfo"] | null; + }; + }; + }; + }; + v1_list_api_keys: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiKeyResponse"][]; + }; + }; + }; + }; + v1_create_api_key: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CreateApiKeyRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CreateApiKeyResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_delete_api_key: { + parameters: { + query?: never; + header?: never; + path: { + key_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_user_get_websocket_events: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserWsTranscriptCreated"] | components["schemas"]["UserWsTranscriptDeleted"] | components["schemas"]["UserWsTranscriptRestored"] | components["schemas"]["UserWsTranscriptStatus"] | components["schemas"]["UserWsTranscriptFinalTitle"] | components["schemas"]["UserWsTranscriptDuration"]; + }; + }; + }; + }; + v1_get_config: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ConfigResponse"]; + }; + }; + }; + }; + v1_zulip_get_streams: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Stream"][]; + }; + }; + }; + }; + v1_zulip_get_topics: { + parameters: { + query?: never; + header?: never; + path: { + stream_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Topic"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_whereby_webhook: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["WherebyWebhookEvent"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + v1_webhook: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + }; + }; + v1_livekit_webhook: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + }; + }; + v1_login: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["LoginRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LoginResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; +} diff --git a/ui/src/auth/AuthContext.tsx b/ui/src/auth/AuthContext.tsx new file mode 100644 index 00000000..041e4232 --- /dev/null +++ b/ui/src/auth/AuthContext.tsx @@ -0,0 +1,28 @@ +import { createContext, useContext } from 'react' + +export type AuthMode = 'oidc' | 'password' + +export type AuthUser = { + email?: string | null + name?: string | null + sub?: string | null +} | null + +export type AuthContextValue = { + mode: AuthMode + loading: boolean + authenticated: boolean + user: AuthUser + error: Error | null + loginWithOidc: () => void + loginWithPassword: (email: string, password: string) => Promise + logout: () => Promise +} + +export const AuthContext = createContext(null) + +export function useAuth(): AuthContextValue { + const value = useContext(AuthContext) + if (!value) throw new Error('useAuth must be used inside AuthProvider') + return value +} diff --git a/ui/src/auth/AuthProvider.tsx b/ui/src/auth/AuthProvider.tsx new file mode 100644 index 00000000..f797dcf3 --- /dev/null +++ b/ui/src/auth/AuthProvider.tsx @@ -0,0 +1,129 @@ +import { useCallback, useEffect, useMemo, useState, type ReactNode } from 'react' +import { + AuthProvider as OidcAuthProvider, + useAuth as useOidcAuth, +} from 'react-oidc-context' +import { useQuery, useQueryClient } from '@tanstack/react-query' +import { apiClient, getPasswordToken, setPasswordToken, setOidcAccessTokenGetter } from '@/api/client' +import { AuthContext, type AuthContextValue, type AuthUser } from './AuthContext' +import { buildOidcConfig, oidcEnabled } from './oidcConfig' + +function useMeQuery(tokenKey: string | null | undefined) { + return useQuery({ + queryKey: ['auth', 'me', tokenKey ?? 'anon'], + enabled: !!tokenKey, + queryFn: async () => { + const { data, error, response } = await apiClient.GET('/v1/me') + if (error || !response.ok) { + if (response.status === 401) return null + throw Object.assign(new Error('me request failed'), { status: response.status }) + } + return (data ?? null) as AuthUser + }, + staleTime: 60_000, + }) +} + +function PasswordAuthProvider({ children }: { children: ReactNode }) { + const queryClient = useQueryClient() + const [token, setToken] = useState(() => getPasswordToken()) + const meQuery = useMeQuery(token) + + const loginWithPassword = useCallback( + async (email: string, password: string) => { + const res = await fetch('/v1/auth/login', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ email, password }), + }) + if (!res.ok) { + const detail = await res + .json() + .then((j: { detail?: string }) => j?.detail) + .catch(() => null) + throw new Error(detail ?? 'Invalid credentials') + } + const json = (await res.json()) as { access_token: string } + setPasswordToken(json.access_token) + setToken(json.access_token) + await queryClient.invalidateQueries({ queryKey: ['auth', 'me'] }) + }, + [queryClient], + ) + + const logout = useCallback(async () => { + setPasswordToken(null) + setToken(null) + await queryClient.invalidateQueries({ queryKey: ['auth', 'me'] }) + }, [queryClient]) + + const loginWithOidc = useCallback(() => { + console.warn('OIDC login not configured; use loginWithPassword') + }, []) + + const value = useMemo( + () => ({ + mode: 'password', + loading: meQuery.isLoading, + authenticated: !!token && meQuery.data != null, + user: meQuery.data ?? null, + error: (meQuery.error as Error | null) ?? null, + loginWithOidc, + loginWithPassword, + logout, + }), + [token, meQuery.isLoading, meQuery.data, meQuery.error, loginWithOidc, loginWithPassword, logout], + ) + + return {children} +} + +function OidcAuthBridge({ children }: { children: ReactNode }) { + const oidc = useOidcAuth() + const queryClient = useQueryClient() + const accessToken = oidc.user?.access_token ?? null + + useEffect(() => { + setOidcAccessTokenGetter(() => accessToken) + return () => setOidcAccessTokenGetter(null) + }, [accessToken]) + + const meQuery = useMeQuery(accessToken) + + const loginWithOidc = useCallback(() => oidc.signinRedirect(), [oidc]) + const loginWithPassword = useCallback(async () => { + throw new Error('Password login is disabled in OIDC mode') + }, []) + const logout = useCallback(async () => { + await oidc.signoutRedirect().catch(() => oidc.removeUser()) + await queryClient.invalidateQueries({ queryKey: ['auth', 'me'] }) + }, [oidc, queryClient]) + + const value = useMemo( + () => ({ + mode: 'oidc', + loading: oidc.isLoading || meQuery.isLoading, + authenticated: !!accessToken && meQuery.data != null, + user: meQuery.data ?? null, + error: (oidc.error ?? (meQuery.error as Error | null)) ?? null, + loginWithOidc, + loginWithPassword, + logout, + }), + [oidc.isLoading, oidc.error, accessToken, meQuery.isLoading, meQuery.data, meQuery.error, loginWithOidc, loginWithPassword, logout], + ) + + return {children} +} + +export function AuthProvider({ children }: { children: ReactNode }) { + const config = buildOidcConfig() + if (!config || !oidcEnabled) { + return {children} + } + return ( + + {children} + + ) +} diff --git a/ui/src/auth/RequireAuth.tsx b/ui/src/auth/RequireAuth.tsx new file mode 100644 index 00000000..ecaca665 --- /dev/null +++ b/ui/src/auth/RequireAuth.tsx @@ -0,0 +1,30 @@ +import { type ReactNode } from 'react' +import { Navigate, useLocation } from 'react-router-dom' +import { useAuth } from './AuthContext' + +export function RequireAuth({ children }: { children: ReactNode }) { + const { loading, authenticated } = useAuth() + const location = useLocation() + + if (loading) { + return ( +
+ Loading… +
+ ) + } + + if (!authenticated) { + return + } + + return <>{children} +} diff --git a/ui/src/auth/oidcConfig.ts b/ui/src/auth/oidcConfig.ts new file mode 100644 index 00000000..f1e6a51f --- /dev/null +++ b/ui/src/auth/oidcConfig.ts @@ -0,0 +1,27 @@ +import type { AuthProviderProps } from 'react-oidc-context' +import { WebStorageStateStore } from 'oidc-client-ts' +import { env, oidcEnabled } from '@/lib/env' + +export { oidcEnabled } + +export function buildOidcConfig(): AuthProviderProps | null { + if (!oidcEnabled) return null + const redirectUri = `${window.location.origin}/v2/auth/callback` + const silentRedirectUri = `${window.location.origin}/v2/auth/silent-renew` + const postLogoutRedirectUri = `${window.location.origin}/v2/` + return { + authority: env.oidcAuthority, + client_id: env.oidcClientId, + redirect_uri: redirectUri, + silent_redirect_uri: silentRedirectUri, + post_logout_redirect_uri: postLogoutRedirectUri, + scope: env.oidcScope, + response_type: 'code', + loadUserInfo: true, + automaticSilentRenew: true, + userStore: new WebStorageStateStore({ store: window.sessionStorage }), + onSigninCallback: () => { + window.history.replaceState({}, document.title, '/v2/') + }, + } +} diff --git a/ui/src/components/browse/ConfirmDialog.tsx b/ui/src/components/browse/ConfirmDialog.tsx new file mode 100644 index 00000000..8aa48055 --- /dev/null +++ b/ui/src/components/browse/ConfirmDialog.tsx @@ -0,0 +1,130 @@ +import { useEffect, type ReactNode } from 'react' +import { I } from '@/components/icons' +import { Button } from '@/components/ui/primitives' + +type Props = { + title: string + message: ReactNode + confirmLabel: string + cancelLabel?: string + danger?: boolean + loading?: boolean + onConfirm: () => void + onClose: () => void +} + +export function ConfirmDialog({ + title, + message, + confirmLabel, + cancelLabel = 'Cancel', + danger, + loading, + onConfirm, + onClose, +}: Props) { + useEffect(() => { + const k = (e: KeyboardEvent) => { + if (e.key === 'Escape' && !loading) onClose() + } + document.addEventListener('keydown', k) + return () => document.removeEventListener('keydown', k) + }, [onClose, loading]) + + return ( + <> +
!loading && onClose()} /> +
+
+
+
+ {I.Trash(18)} +
+
+

+ {title} +

+
+ {message} +
+
+
+
+
+ + +
+
+ + ) +} diff --git a/ui/src/components/browse/FilterBar.tsx b/ui/src/components/browse/FilterBar.tsx new file mode 100644 index 00000000..5bc2bcf5 --- /dev/null +++ b/ui/src/components/browse/FilterBar.tsx @@ -0,0 +1,127 @@ +import { I } from '@/components/icons' +import type { RoomRowData, SidebarFilter, TagRowData } from '@/lib/types' + +type SortKey = 'newest' | 'oldest' | 'longest' + +type FilterBarProps = { + filter: SidebarFilter + rooms: RoomRowData[] + tags: TagRowData[] + total: number + sort: SortKey + onSort: (s: SortKey) => void + query: string + onSearch: (v: string) => void +} + +export function FilterBar({ + filter, + rooms, + tags, + total, + sort, + onSort, + query, + onSearch, +}: FilterBarProps) { + let label = 'All transcripts' + if (filter.kind === 'source' && filter.value === 'live') label = 'Live transcripts' + if (filter.kind === 'source' && filter.value === 'file') label = 'Uploaded files' + if (filter.kind === 'room') { + const r = rooms.find((x) => x.id === filter.value) + label = r ? `Room · ${r.name}` : 'Room' + } + if (filter.kind === 'tag') { + const t = tags.find((x) => x.id === filter.value) + label = t ? `Tagged · #${t.name}` : 'Tag' + } + if (filter.kind === 'trash') label = 'Trash' + if (filter.kind === 'recent') label = 'Recent (last 7 days)' + + return ( +
+ {label} + + {total} {total === 1 ? 'result' : 'results'} + +
+ {I.Search(13)} + onSearch(e.target.value)} + placeholder="Search transcripts, speakers, rooms…" + style={{ + border: 'none', + outline: 'none', + background: 'transparent', + fontFamily: 'var(--font-sans)', + fontSize: 12.5, + color: 'var(--fg)', + flex: 1, + }} + /> + ⌘K +
+
+ + sort + + {(['newest', 'oldest', 'longest'] as const).map((s) => ( + + ))} +
+ ) +} diff --git a/ui/src/components/browse/Pagination.tsx b/ui/src/components/browse/Pagination.tsx new file mode 100644 index 00000000..61922369 --- /dev/null +++ b/ui/src/components/browse/Pagination.tsx @@ -0,0 +1,74 @@ +import { I } from '@/components/icons' +import { Button } from '@/components/ui/primitives' + +type Props = { + page: number + total: number + pageSize: number + onPage: (n: number) => void +} + +export function Pagination({ page, total, pageSize, onPage }: Props) { + const totalPages = Math.max(1, Math.ceil(total / pageSize)) + if (totalPages <= 1) return null + const start = (page - 1) * pageSize + 1 + const end = Math.min(total, page * pageSize) + const pages = Array.from({ length: totalPages }, (_, i) => i + 1) + return ( +
+ + {start}–{end} of {total} + +
+ + {pages.map((n) => ( + + ))} + +
+
+ ) +} diff --git a/ui/src/components/browse/TranscriptRow.tsx b/ui/src/components/browse/TranscriptRow.tsx new file mode 100644 index 00000000..080e8f9a --- /dev/null +++ b/ui/src/components/browse/TranscriptRow.tsx @@ -0,0 +1,308 @@ +import { type ReactNode } from 'react' +import { I } from '@/components/icons' +import { RowMenuTrigger } from '@/components/ui/primitives' +import { fmtDate, fmtDur } from '@/lib/format' +import type { TranscriptRowData } from '@/lib/types' + +type Props = { + t: TranscriptRowData + active?: boolean + onSelect?: (id: string) => void + query?: string + density?: 'compact' | 'comfortable' + onDelete?: (t: TranscriptRowData) => void + onReprocess?: (id: string) => void +} + +type ApiStatus = 'recording' | 'ended' | 'processing' | 'uploaded' | 'error' | 'idle' + +const STATUS_MAP: Record = { + live: 'recording', + ended: 'ended', + processing: 'processing', + uploading: 'uploaded', + failed: 'error', + idle: 'idle', +} + +function statusIconFor(apiStatus: ApiStatus): { node: ReactNode; color: string } { + switch (apiStatus) { + case 'recording': + return { node: I.Radio(14), color: 'var(--status-live)' } + case 'processing': + return { + node: ( + + ), + color: 'var(--status-processing)', + } + case 'uploaded': + return { node: I.Clock(14), color: 'var(--fg-muted)' } + case 'error': + return { node: I.AlertTriangle(14), color: 'var(--destructive)' } + case 'ended': + return { node: I.CheckCircle(14), color: 'var(--status-ok)' } + default: + return { node: I.Clock(14), color: 'var(--fg-muted)' } + } +} + +function buildRowMenu( + t: TranscriptRowData, + onDelete?: (t: TranscriptRowData) => void, + onReprocess?: (id: string) => void, +) { + const apiStatus = STATUS_MAP[t.status] ?? 'idle' + const canReprocess = apiStatus === 'ended' || apiStatus === 'error' + return [ + { label: 'Open', icon: I.ExternalLink(14) }, + { label: 'Rename', icon: I.Edit(14) }, + { separator: true as const }, + { + label: 'Reprocess', + icon: I.Refresh(14), + disabled: !canReprocess, + onClick: () => onReprocess?.(t.id), + }, + { separator: true as const }, + { + label: 'Delete', + icon: I.Trash(14), + danger: true, + onClick: () => onDelete?.(t), + }, + ] +} + +function Highlight({ text, query }: { text: string; query?: string }) { + if (!query || !text) return <>{text} + const i = text.toLowerCase().indexOf(query.toLowerCase()) + if (i < 0) return <>{text} + return ( + <> + {text.slice(0, i)} + + {text.slice(i, i + query.length)} + + {text.slice(i + query.length)} + + ) +} + +export function TranscriptRow({ + t, + active, + onSelect, + query, + density = 'comfortable', + onDelete, + onReprocess, +}: Props) { + const compact = density === 'compact' + const vpad = compact ? 10 : 14 + const apiStatus = STATUS_MAP[t.status] ?? 'idle' + const statusIcon = statusIconFor(apiStatus) + const sourceLabel = t.source === 'room' ? t.room || 'room' : t.source + const isError = apiStatus === 'error' + const errorMsg = isError ? t.error_message || t.error || 'Processing failed — reason unavailable' : null + const snippet = query && t.snippet ? t.snippet : null + const matchCount = query && t.snippet ? 1 : 0 + + const [srcLang, tgtLang] = (t.lang || '').includes('→') + ? (t.lang as string).split('→').map((s) => s.trim()) + : [t.lang, null] + + return ( +
onSelect?.(t.id)} + style={{ + display: 'grid', + gridTemplateColumns: 'auto 1fr auto auto', + alignItems: 'center', + columnGap: 14, + padding: `${vpad}px 20px`, + borderBottom: '1px solid var(--border)', + cursor: 'pointer', + position: 'relative', + }} + > + {active && ( + + )} + + {statusIcon.node} + +
+ + + + +
+ {sourceLabel} + · + {fmtDate(t.date)} + · + {fmtDur(t.duration)} + + {t.speakers > 0 && ( + <> + · + + {I.Users(11)} {t.speakers} {t.speakers === 1 ? 'speaker' : 'speakers'} + + + )} + + {srcLang && ( + <> + · + + {I.Globe(11)} + + {srcLang} + {tgtLang && <> → {tgtLang}} + + + + )} +
+ + {errorMsg && ( +
+ {I.AlertTriangle(11)} + {errorMsg} +
+ )} + + {snippet && ( +
+ “” +
+ )} +
+ + + {matchCount > 0 && ( + + {matchCount} match + + )} + + + +
+ ) +} diff --git a/ui/src/components/browse/TrashRow.tsx b/ui/src/components/browse/TrashRow.tsx new file mode 100644 index 00000000..25ae025a --- /dev/null +++ b/ui/src/components/browse/TrashRow.tsx @@ -0,0 +1,101 @@ +import { I } from '@/components/icons' +import { RowMenuTrigger } from '@/components/ui/primitives' +import { fmtDate, fmtDur } from '@/lib/format' +import type { TranscriptRowData } from '@/lib/types' + +type Props = { + t: TranscriptRowData + onRestore?: (id: string) => void + onDestroy?: (t: TranscriptRowData) => void +} + +export function TrashRow({ t, onRestore, onDestroy }: Props) { + const sourceLabel = t.source === 'room' ? t.room || 'room' : t.source + return ( +
+ {I.Trash(14)} + +
+ + {t.title || 'Unnamed transcript'} + + +
+ {sourceLabel} + · + {fmtDate(t.date)} + {t.duration > 0 && ( + <> + · + + {fmtDur(t.duration)} + + + )} + · + + {I.Trash(11)} Deleted + +
+
+ + onRestore?.(t.id), + }, + { separator: true }, + { + label: 'Destroy permanently', + icon: I.Trash(14), + danger: true, + onClick: () => onDestroy?.(t), + }, + ]} + /> +
+ ) +} diff --git a/ui/src/components/home/LanguagePair.tsx b/ui/src/components/home/LanguagePair.tsx new file mode 100644 index 00000000..84ff8cc6 --- /dev/null +++ b/ui/src/components/home/LanguagePair.tsx @@ -0,0 +1,97 @@ +import { I } from '@/components/icons' +import { REFLECTOR_LANGS } from '@/lib/types' + +type Props = { + sourceLang: string + setSourceLang: (v: string) => void + targetLang: string + setTargetLang: (v: string) => void + horizontal?: boolean +} + +export function LanguagePair({ + sourceLang, + setSourceLang, + targetLang, + setTargetLang, + horizontal, +}: Props) { + return ( +
+
+ + +
Detected from the audio if set to Auto.
+
+ + {horizontal && ( + + )} + +
+ + +
Leave blank to skip translation.
+
+
+ ) +} diff --git a/ui/src/components/home/RoomPicker.tsx b/ui/src/components/home/RoomPicker.tsx new file mode 100644 index 00000000..4f77066a --- /dev/null +++ b/ui/src/components/home/RoomPicker.tsx @@ -0,0 +1,33 @@ +import { I } from '@/components/icons' +import type { RoomRowData } from '@/lib/types' + +type Props = { + roomId: string + setRoomId: (v: string) => void + rooms: RoomRowData[] +} + +export function RoomPicker({ roomId, setRoomId, rooms }: Props) { + return ( +
+ + +
+ ) +} diff --git a/ui/src/components/icons.tsx b/ui/src/components/icons.tsx new file mode 100644 index 00000000..b7792b08 --- /dev/null +++ b/ui/src/components/icons.tsx @@ -0,0 +1,162 @@ +import { + AlertTriangle, + ArrowRight, + ArrowUpDown, + Bell, + Calendar, + Check, + CheckCircle2, + ChevronDown, + ChevronLeft, + ChevronRight, + Clock, + Cloud, + Copy, + DoorClosed, + DoorOpen, + Download, + Edit, + ExternalLink, + File, + FileAudio, + Filter, + Folder, + Globe, + History, + Inbox, + Info, + Link as LinkIcon, + Loader, + Lock, + Mic, + Moon, + MoreHorizontal, + Plus, + Radio, + RefreshCw, + RotateCcw, + Search, + Settings, + Share2, + Shield, + Sparkles, + Sun, + Tag, + Trash2, + Undo, + Upload, + User, + Users, + Waves, + X, +} from 'lucide-react' + +export { + AlertTriangle, + ArrowRight, + Bell, + Calendar, + Check, + CheckCircle2, + ChevronDown, + ChevronLeft, + ChevronRight, + Clock, + Cloud, + Copy, + Download, + Edit, + ExternalLink, + File, + FileAudio, + Filter, + Folder, + Globe, + History, + Inbox, + Info, + Loader, + Lock, + Mic, + Moon, + Plus, + Radio, + RefreshCw, + RotateCcw, + Search, + Settings, + Shield, + Sparkles, + Sun, + Tag, + Undo, + Upload, + User, + Users, + Waves, + X, +} +export { DoorClosed as Door } +export { DoorOpen } +export { Trash2 as Trash } +export { MoreHorizontal as More } +export { Share2 as Share } +export { ArrowUpDown as Swap } +export { LinkIcon as Link } +export { X as Close } + +const make = (Icon: typeof Mic) => (size = 16) => + +export const I = { + Inbox: make(Inbox), + Mic: make(Mic), + Upload: make(Upload), + Radio: make(Radio), + Door: make(DoorClosed), + Folder: make(Folder), + Trash: make(Trash2), + Tag: make(Tag), + Users: make(Users), + Search: make(Search), + Plus: make(Plus), + Bell: make(Bell), + Settings: make(Settings), + Close: make(X), + Download: make(Download), + Share: make(Share2), + More: make(MoreHorizontal), + Globe: make(Globe), + Clock: make(Clock), + CheckCircle: make(CheckCircle2), + AlertTriangle: make(AlertTriangle), + Loader: make(Loader), + ChevronDown: make(ChevronDown), + ChevronLeft: make(ChevronLeft), + ChevronRight: make(ChevronRight), + Sparkle: make(Sparkles), + Waves: make(Waves), + Filter: make(Filter), + Undo: make(Undo), + Edit: make(Edit), + Refresh: make(RefreshCw), + ExternalLink: make(ExternalLink), + RotateCcw: make(RotateCcw), + X: make(X), + Info: make(Info), + Check: make(Check), + Moon: make(Moon), + Sun: make(Sun), + Lock: make(Lock), + Shield: make(Shield), + Swap: make(ArrowUpDown), + ArrowRight: make(ArrowRight), + History: make(History), + DoorOpen: make(DoorOpen), + FileAudio: make(FileAudio), + File: make(File), + Calendar: make(Calendar), + Link: make(LinkIcon), + Cloud: make(Cloud), + User: make(User), + Copy: make(Copy), +} diff --git a/ui/src/components/layout/AppShell.tsx b/ui/src/components/layout/AppShell.tsx new file mode 100644 index 00000000..81b2f03b --- /dev/null +++ b/ui/src/components/layout/AppShell.tsx @@ -0,0 +1,37 @@ +import { type ReactNode } from 'react' +import { TopBar } from './TopBar' + +type AppShellProps = { + title: string + crumb?: string[] + sidebar?: ReactNode + children: ReactNode +} + +export function AppShell({ title, crumb, sidebar, children }: AppShellProps) { + return ( +
+ {sidebar} +
+ +
+ {children} +
+
+
+ ) +} diff --git a/ui/src/components/layout/AppSidebar.tsx b/ui/src/components/layout/AppSidebar.tsx new file mode 100644 index 00000000..2f627e83 --- /dev/null +++ b/ui/src/components/layout/AppSidebar.tsx @@ -0,0 +1,331 @@ +import type { CSSProperties } from 'react' +import { I } from '@/components/icons' +import { Button, SectionLabel, SidebarItem } from '@/components/ui/primitives' +import type { RoomRowData, SidebarFilter, TagRowData } from '@/lib/types' +import { BrandHeader, PrimaryNav, UserChip, sidebarAsideStyle } from './sidebarChrome' +import { useAuth } from '@/auth/AuthContext' + +type AppSidebarProps = { + filter: SidebarFilter + onFilter: (filter: SidebarFilter) => void + rooms: RoomRowData[] + tags: TagRowData[] + showTags?: boolean + collapsed: boolean + onToggle: () => void + onNewRecording?: () => void + counts?: { + all?: number | null + liveTranscripts?: number | null + uploadedFiles?: number | null + trash?: number | null + } +} + +export function AppSidebar({ + filter, + onFilter, + rooms, + tags, + showTags = true, + collapsed, + onToggle, + onNewRecording, + counts, +}: AppSidebarProps) { + const { user } = useAuth() + const myRooms = rooms.filter((r) => !r.shared) + const sharedRooms = rooms.filter((r) => r.shared) + + return ( + + ) +} + +type ExpandedNavProps = { + filter: SidebarFilter + onFilter: (filter: SidebarFilter) => void + myRooms: RoomRowData[] + sharedRooms: RoomRowData[] + tags: TagRowData[] + showTags?: boolean + onNewRecording?: () => void + counts?: AppSidebarProps['counts'] +} + +function ExpandedNav({ + filter, + onFilter, + myRooms, + sharedRooms, + tags, + showTags = true, + onNewRecording, + counts, +}: ExpandedNavProps) { + const isActive = (kind: SidebarFilter['kind'], val: SidebarFilter['value'] = null) => + filter.kind === kind && filter.value === val + + return ( + <> +
+ +
+ + + + ) +} + +type CollapsedRailProps = { + filter: SidebarFilter + onFilter: (filter: SidebarFilter) => void + onToggle: () => void + onNewRecording?: () => void +} + +function CollapsedRail({ filter, onFilter, onToggle, onNewRecording }: CollapsedRailProps) { + const items: Array<{ + kind: SidebarFilter['kind'] + value?: SidebarFilter['value'] + icon: ReturnType + title: string + }> = [ + { kind: 'all', icon: I.Inbox(18), title: 'All' }, + { kind: 'recent', icon: I.Sparkle(18), title: 'Recent' }, + { kind: 'source', value: 'live', icon: I.Radio(18), title: 'Live' }, + { kind: 'source', value: 'file', icon: I.Upload(18), title: 'Uploads' }, + { kind: 'trash', icon: I.Trash(18), title: 'Trash' }, + ] + return ( + + ) +} diff --git a/ui/src/components/layout/ReflectorMark.tsx b/ui/src/components/layout/ReflectorMark.tsx new file mode 100644 index 00000000..599e2f12 --- /dev/null +++ b/ui/src/components/layout/ReflectorMark.tsx @@ -0,0 +1,22 @@ +export function ReflectorMark({ size = 28 }: { size?: number }) { + return ( + + ) +} diff --git a/ui/src/components/layout/RoomsSidebar.tsx b/ui/src/components/layout/RoomsSidebar.tsx new file mode 100644 index 00000000..47cec88d --- /dev/null +++ b/ui/src/components/layout/RoomsSidebar.tsx @@ -0,0 +1,313 @@ +import type { CSSProperties } from 'react' +import type { components } from '@/api/schema' +import { I } from '@/components/icons' +import { Button, SectionLabel, SidebarItem } from '@/components/ui/primitives' +import type { RoomsFilter } from '@/lib/types' +import { BrandHeader, PrimaryNav, UserChip, sidebarAsideStyle } from './sidebarChrome' +import { useAuth } from '@/auth/AuthContext' + +type Room = components['schemas']['RoomDetails'] + +type Props = { + filter: RoomsFilter + onFilter: (f: RoomsFilter) => void + rooms: Room[] + collapsed: boolean + onToggle: () => void + onNewRecording?: () => void +} + +const PLATFORM_COLOR: Record = { + whereby: 'var(--status-processing)', + daily: 'var(--status-ok)', + livekit: 'var(--primary)', +} + +const PLATFORMS: Room['platform'][] = ['whereby', 'daily', 'livekit'] + +export function RoomsSidebar({ + filter, + onFilter, + rooms, + collapsed, + onToggle, + onNewRecording, +}: Props) { + const { user } = useAuth() + const isActive = ( + kind: RoomsFilter['kind'], + val: RoomsFilter['value'] | null = null, + ) => filter.kind === kind && (filter.value ?? null) === val + + const counts = { + all: rooms.length, + mine: rooms.filter((r) => !r.is_shared).length, + shared: rooms.filter((r) => r.is_shared).length, + calendar: rooms.filter((r) => r.ics_enabled).length, + } + + const platformCount = (p: Room['platform']) => + rooms.filter((r) => r.platform === p).length + const sizeCount = (s: string) => rooms.filter((r) => r.room_mode === s).length + const recCount = (t: string) => rooms.filter((r) => r.recording_type === t).length + + const presentPlatforms = PLATFORMS.filter((p) => platformCount(p) > 0) + + return ( + + ) +} + +type RailProps = { + filter: RoomsFilter + onFilter: (f: RoomsFilter) => void + onToggle: () => void + onNewRecording?: () => void +} + +function RoomsRail({ filter, onFilter, onToggle, onNewRecording }: RailProps) { + const items: Array<{ + kind: RoomsFilter['kind'] + value: RoomsFilter['value'] | null + icon: ReturnType + title: string + }> = [ + { kind: 'all', value: null, icon: I.Door(18), title: 'All rooms' }, + { kind: 'scope', value: 'mine', icon: I.User(18), title: 'My rooms' }, + { kind: 'scope', value: 'shared', icon: I.Share(18), title: 'Shared' }, + { kind: 'status', value: 'active', icon: I.Radio(18), title: 'Active' }, + { kind: 'status', value: 'calendar', icon: I.Calendar(18), title: 'Calendar' }, + ] + return ( + + ) +} diff --git a/ui/src/components/layout/TopBar.tsx b/ui/src/components/layout/TopBar.tsx new file mode 100644 index 00000000..52cc0528 --- /dev/null +++ b/ui/src/components/layout/TopBar.tsx @@ -0,0 +1,99 @@ +import { Fragment } from 'react' +import { I } from '@/components/icons' +import { Button } from '@/components/ui/primitives' + +type TopBarProps = { + title: string + crumb?: string[] +} + +export function TopBar({ title, crumb }: TopBarProps) { + return ( +
+
+ {crumb && crumb.length > 0 && ( +
+ {crumb.map((c, i) => ( + + + {c} + + {i < crumb.length - 1 && ( + / + )} + + ))} +
+ )} +
+

+ {title} +

+
+
+ +
+ + +
+ ) +} diff --git a/ui/src/components/layout/sidebarChrome.tsx b/ui/src/components/layout/sidebarChrome.tsx new file mode 100644 index 00000000..a7a44acf --- /dev/null +++ b/ui/src/components/layout/sidebarChrome.tsx @@ -0,0 +1,330 @@ +import { useEffect, useRef, useState } from 'react' +import { useLocation, useNavigate } from 'react-router-dom' +import { I } from '@/components/icons' +import { SidebarItem } from '@/components/ui/primitives' +import { useAuth } from '@/auth/AuthContext' +import { ReflectorMark } from './ReflectorMark' + +/** + * Top-level nav shared by AppSidebar and RoomsSidebar — sits above the + * filter/context sections, below the New Recording button. + */ +export function PrimaryNav() { + const navigate = useNavigate() + const location = useLocation() + const onTranscripts = + location.pathname === '/' || + location.pathname.startsWith('/browse') || + location.pathname.startsWith('/transcripts') || + location.pathname.startsWith('/transcript/') + const onRooms = location.pathname.startsWith('/rooms') + return ( +
+ navigate('/browse')} + /> + navigate('/rooms')} + /> +
+ ) +} + +export function BrandHeader({ + collapsed, + onToggle, +}: { + collapsed: boolean + onToggle: () => void +}) { + return ( +
+ {collapsed ? ( + + ) : ( + <> +
+ +
+ + Reflector + + + by Greyhaven + +
+
+ + + )} +
+ ) +} + +export function UserChip({ + user, +}: { + user: { name?: string | null; email?: string | null } | null | undefined +}) { + const { logout } = useAuth() + const [open, setOpen] = useState(false) + const wrapperRef = useRef(null) + const displayName = user?.name || user?.email || 'Signed in' + + useEffect(() => { + if (!open) return + const onDown = (e: MouseEvent) => { + if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) { + setOpen(false) + } + } + const onKey = (e: KeyboardEvent) => { + if (e.key === 'Escape') setOpen(false) + } + document.addEventListener('mousedown', onDown) + document.addEventListener('keydown', onKey) + return () => { + document.removeEventListener('mousedown', onDown) + document.removeEventListener('keydown', onKey) + } + }, [open]) + + return ( +
+ {open && ( +
+ setOpen(false)} + disabled + /> +
+ { + setOpen(false) + void logout() + }} + /> +
+ )} + +
+ ) +} + +function MenuRow({ + icon, + label, + onClick, + danger, + disabled, +}: { + icon: React.ReactNode + label: string + onClick: () => void + danger?: boolean + disabled?: boolean +}) { + return ( + + ) +} + +function initials(name: string) { + return ( + name + .split(/\s+/) + .filter(Boolean) + .slice(0, 2) + .map((p) => p[0]?.toUpperCase() ?? '') + .join('') || 'R' + ) +} + +export const sidebarAsideStyle = (collapsed: boolean) => + ({ + width: collapsed ? 64 : 252, + transition: 'width var(--dur-normal) var(--ease-default)', + background: 'var(--secondary)', + borderRight: '1px solid var(--border)', + display: 'flex', + flexDirection: 'column', + flexShrink: 0, + fontFamily: 'var(--font-sans)', + }) as const diff --git a/ui/src/components/rooms/DeleteRoomDialog.tsx b/ui/src/components/rooms/DeleteRoomDialog.tsx new file mode 100644 index 00000000..a9ca62db --- /dev/null +++ b/ui/src/components/rooms/DeleteRoomDialog.tsx @@ -0,0 +1,111 @@ +import { useEffect } from 'react' +import { I } from '@/components/icons' +import { Button } from '@/components/ui/primitives' + +type Props = { + name: string + onClose: () => void + onConfirm: () => void + loading?: boolean +} + +export function DeleteRoomDialog({ name, onClose, onConfirm, loading }: Props) { + useEffect(() => { + const k = (e: KeyboardEvent) => { + if (e.key === 'Escape') onClose() + } + document.addEventListener('keydown', k) + return () => document.removeEventListener('keydown', k) + }, [onClose]) + + return ( + <> +
+
+
+
+
+ {I.Trash(18)} +
+
+

+ Delete room? +

+

+ + /{name} + {' '} + will be permanently removed. Existing recordings from this room are not affected. + This can't be undone. +

+
+
+
+
+ + +
+
+ + ) +} diff --git a/ui/src/components/rooms/RoomFormDialog.tsx b/ui/src/components/rooms/RoomFormDialog.tsx new file mode 100644 index 00000000..4550addc --- /dev/null +++ b/ui/src/components/rooms/RoomFormDialog.tsx @@ -0,0 +1,834 @@ +import { useEffect, useState, type CSSProperties, type ReactNode } from 'react' +import { useQuery } from '@tanstack/react-query' +import type { components } from '@/api/schema' +import { apiClient } from '@/api/client' +import { I } from '@/components/icons' +import { Button } from '@/components/ui/primitives' +import { Combobox } from '@/components/ui/Combobox' + +type Room = components['schemas']['RoomDetails'] + +export type RoomFormPayload = { + name: string + platform: 'whereby' | 'daily' | 'livekit' + room_mode: string + recording_type: string + recording_trigger: string + is_locked: boolean + is_shared: boolean + skip_consent: boolean + store_video: boolean + zulip_auto_post: boolean + zulip_stream: string + zulip_topic: string + webhook_url: string + webhook_secret: string + ics_url: string | null + ics_enabled: boolean + ics_fetch_interval: number + email_transcript_to: string | null +} + +type Props = { + room: Room | null + onClose: () => void + onSave: (payload: RoomFormPayload) => Promise + saving?: boolean +} + +const NAME_RE = /^[a-z0-9-_]+$/i + +const TABS = [ + { id: 'general', label: 'General' }, + { id: 'calendar', label: 'Calendar' }, + { id: 'share', label: 'Share' }, + { id: 'webhook', label: 'WebHook' }, +] as const + +type TabId = (typeof TABS)[number]['id'] + +export function RoomFormDialog({ room, onClose, onSave, saving }: Props) { + const isEdit = !!room + const [tab, setTab] = useState('general') + + const [name, setName] = useState(room?.name ?? '') + const [platform, setPlatform] = useState(room?.platform ?? 'whereby') + const [roomMode, setRoomMode] = useState(room?.room_mode ?? 'normal') + const [recType, setRecType] = useState(room?.recording_type ?? 'cloud') + const [recTrigger, setRecTrigger] = useState( + room?.recording_trigger ?? 'automatic-2nd-participant', + ) + const [isLocked, setIsLocked] = useState(room?.is_locked ?? false) + const [isShared, setIsShared] = useState(room?.is_shared ?? false) + const [skipConsent, setSkipConsent] = useState(room?.skip_consent ?? false) + const [storeVideo, setStoreVideo] = useState(room?.store_video ?? false) + + const [icsEnabled, setIcsEnabled] = useState(room?.ics_enabled ?? false) + const [icsUrl, setIcsUrl] = useState(room?.ics_url ?? '') + const [icsFetchInterval, setIcsFetchInterval] = useState(room?.ics_fetch_interval ?? 5) + + const [zulipAutoPost, setZulipAutoPost] = useState(room?.zulip_auto_post ?? false) + const [zulipStream, setZulipStream] = useState(room?.zulip_stream ?? '') + const [zulipTopic, setZulipTopic] = useState(room?.zulip_topic ?? '') + + const [webhookUrl, setWebhookUrl] = useState(room?.webhook_url ?? '') + const [webhookSecret, setWebhookSecret] = useState(room?.webhook_secret ?? '') + + const [emailTranscriptTo, setEmailTranscriptTo] = useState(room?.email_transcript_to ?? '') + + const [formError, setFormError] = useState(null) + + const configQuery = useQuery({ + queryKey: ['config'], + queryFn: async () => { + const { data, response } = await apiClient.GET('/v1/config') + if (!response.ok || !data) throw new Error('Config unavailable') + return data + }, + staleTime: 5 * 60_000, + }) + + const zulipEnabled = configQuery.data?.zulip_enabled ?? false + const emailEnabled = configQuery.data?.email_enabled ?? false + + const visibleTabs = TABS.filter((t) => t.id !== 'share' || zulipEnabled) + useEffect(() => { + if (!visibleTabs.some((t) => t.id === tab)) setTab('general') + }, [visibleTabs, tab]) + + useEffect(() => { + const k = (e: KeyboardEvent) => { + if (e.key === 'Escape' && !saving) onClose() + } + document.addEventListener('keydown', k) + return () => document.removeEventListener('keydown', k) + }, [onClose, saving]) + + const nameError = + !isEdit && name && !NAME_RE.test(name) + ? 'No spaces or special characters allowed' + : '' + const canSave = name.trim().length > 0 && !nameError && !saving + + const submit = async () => { + setFormError(null) + if (!canSave) return + try { + const effectivePlatform = platform + const effectiveRoomMode = effectivePlatform === 'daily' ? 'group' : roomMode + const effectiveTrigger = + effectivePlatform === 'daily' + ? recType === 'cloud' + ? 'automatic-2nd-participant' + : 'none' + : recTrigger + await onSave({ + name, + platform: effectivePlatform, + room_mode: effectiveRoomMode, + recording_type: recType, + recording_trigger: effectiveTrigger, + is_locked: isLocked, + is_shared: isShared, + skip_consent: skipConsent, + store_video: storeVideo, + zulip_auto_post: zulipAutoPost, + zulip_stream: zulipStream, + zulip_topic: zulipTopic, + webhook_url: webhookUrl, + webhook_secret: webhookSecret, + ics_url: icsUrl || null, + ics_enabled: icsEnabled, + ics_fetch_interval: icsFetchInterval, + email_transcript_to: emailTranscriptTo || null, + }) + } catch (err) { + setFormError(err instanceof Error ? err.message : 'Save failed') + } + } + + const panelStyle: CSSProperties = { + display: 'flex', + flexDirection: 'column', + gap: 16, + padding: 20, + overflow: 'auto', + flex: 1, + maxHeight: 'calc(100vh - 260px)', + } + + return ( + <> +
!saving && onClose()} /> +
+
{ + e.preventDefault() + void submit() + }} + style={{ display: 'flex', flexDirection: 'column' }} + > +
+
+

+ {isEdit ? 'Edit room' : 'New room'} +

+ {isEdit && ( +

+ /{room!.name} +

+ )} +
+ +
+ +
+ {visibleTabs.map((t) => ( + + ))} +
+ + {formError && ( +
+ {formError} +
+ )} + +
+ {tab === 'general' && ( + + )} + {tab === 'calendar' && ( + + )} + {tab === 'share' && ( + + )} + {tab === 'webhook' && ( + + )} +
+ +
+
+ + +
+
+
+ + ) +} + +/* ---------- Field primitives ---------- */ + +function FormField({ + label, + hint, + info, + children, +}: { + label: ReactNode + hint?: ReactNode + info?: string + children: ReactNode +}) { + return ( +
+ +
{children}
+ {hint &&
{hint}
} +
+ ) +} + +function Checkbox({ + checked, + onChange, + label, + hint, +}: { + checked: boolean + onChange: (v: boolean) => void + label: ReactNode + hint?: ReactNode +}) { + return ( + + ) +} + +function InfoBanner({ children }: { children: ReactNode }) { + return ( +
+ + {I.Info(14)} + +
{children}
+
+ ) +} + +/* ---------- Tabs ---------- */ + +type GeneralTabProps = { + name: string + setName: (v: string) => void + nameError: string + isEdit: boolean + platform: Room['platform'] + setPlatform: (v: Room['platform']) => void + isLocked: boolean + setIsLocked: (v: boolean) => void + roomMode: string + setRoomMode: (v: string) => void + recType: string + setRecType: (v: string) => void + recTrigger: string + setRecTrigger: (v: string) => void + isShared: boolean + setIsShared: (v: boolean) => void + skipConsent: boolean + setSkipConsent: (v: boolean) => void + storeVideo: boolean + setStoreVideo: (v: boolean) => void + emailEnabled: boolean + emailTranscriptTo: string + setEmailTranscriptTo: (v: string) => void +} + +function GeneralTab(p: GeneralTabProps) { + const isDaily = p.platform === 'daily' + return ( + <> + + p.setName(e.target.value)} + style={p.nameError ? { borderColor: 'var(--destructive)' } : undefined} + /> + {p.isEdit && ( +
+ Room name can't be changed after creation. +
+ )} +
+ + + + + + + + {!isDaily && ( + + + + )} + + + + + + {p.recType !== 'none' && !isDaily && ( + + + + )} + + + + + + {p.emailEnabled && ( + + p.setEmailTranscriptTo(e.target.value)} + /> + + )} + + ) +} + +type CalendarTabProps = { + icsEnabled: boolean + setIcsEnabled: (v: boolean) => void + icsUrl: string + setIcsUrl: (v: string) => void + icsFetchInterval: number + setIcsFetchInterval: (v: number) => void +} + +function CalendarTab(p: CalendarTabProps) { + return ( + <> + + Reflector polls the calendar on the configured interval. Meeting titles from the feed + replace the generic "Meeting" label on recordings. + + + + + {p.icsEnabled && ( + <> + + p.setIcsUrl(e.target.value)} + /> + + + + p.setIcsFetchInterval(Math.max(1, Number(e.target.value) || 1))} + /> + + + )} + + ) +} + +type ShareTabProps = { + zulipEnabled: boolean + zulipAutoPost: boolean + setZulipAutoPost: (v: boolean) => void + zulipStream: string + setZulipStream: (v: string) => void + zulipTopic: string + setZulipTopic: (v: string) => void +} + +function ShareTab(p: ShareTabProps) { + const { data: streams = [] } = useQuery({ + queryKey: ['zulip', 'streams'], + queryFn: async () => { + const { data, response } = await apiClient.GET('/v1/zulip/streams') + if (!response.ok || !data) throw new Error('Failed to load Zulip streams') + return data + }, + enabled: p.zulipEnabled, + staleTime: 5 * 60_000, + }) + const selectedStreamId = + streams.find((s) => s.name === p.zulipStream)?.stream_id ?? null + const { data: topics = [] } = useQuery({ + queryKey: ['zulip', 'topics', selectedStreamId], + queryFn: async () => { + if (selectedStreamId == null) return [] + const { data, response } = await apiClient.GET( + '/v1/zulip/streams/{stream_id}/topics', + { params: { path: { stream_id: selectedStreamId } } }, + ) + if (!response.ok || !data) throw new Error('Failed to load Zulip topics') + return data + }, + enabled: p.zulipEnabled && selectedStreamId != null, + staleTime: 60_000, + }) + + if (!p.zulipEnabled) { + return ( + + Zulip integration isn't configured on this Reflector instance. Set ZULIP_REALM{' '} + and related env vars on the server to enable auto-posting transcript summaries. + + ) + } + return ( + <> + + Post the transcript summary + link to a Zulip channel when the meeting ends. + + + + + {p.zulipAutoPost && ( + <> + + { + p.setZulipStream(v) + p.setZulipTopic('') + }} + options={streams.map((s) => s.name)} + placeholder="e.g. reflector" + /> + + + t.name)} + placeholder="e.g. Meeting notes" + /> + + + )} + + ) +} + +type WebhookTabProps = { + webhookUrl: string + setWebhookUrl: (v: string) => void + webhookSecret: string + setWebhookSecret: (v: string) => void +} + +function WebhookTab(p: WebhookTabProps) { + return ( + <> + + Reflector POSTs a JSON payload to your URL on lifecycle events:{' '} + meeting.started,{' '} + meeting.ended,{' '} + transcript.ready. + + + + p.setWebhookUrl(e.target.value)} + /> + + + + p.setWebhookSecret(e.target.value)} + /> + + + ) +} diff --git a/ui/src/components/rooms/RoomsTable.tsx b/ui/src/components/rooms/RoomsTable.tsx new file mode 100644 index 00000000..5892e6d1 --- /dev/null +++ b/ui/src/components/rooms/RoomsTable.tsx @@ -0,0 +1,344 @@ +import { type ReactNode } from 'react' +import type { components } from '@/api/schema' +import { I } from '@/components/icons' +import { Button, RowMenuTrigger, StatusDot } from '@/components/ui/primitives' + +type Room = components['schemas']['RoomDetails'] + +type Props = { + rooms: Room[] + onEdit?: (room: Room) => void + onDelete?: (room: Room) => void + onCopy?: (room: Room) => void + copiedId?: string | null +} + +const PLATFORM_COLOR: Record = { + whereby: 'var(--status-processing)', + daily: 'var(--status-ok)', + livekit: 'var(--primary)', +} + +function platformLabel(p: Room['platform']) { + return p.charAt(0).toUpperCase() + p.slice(1) +} + +function roomUrl(room: Room) { + return `${window.location.origin}/${room.name}` +} + +function openRoom(room: Room) { + window.open(roomUrl(room), '_blank', 'noopener,noreferrer') +} + +function roomModeLabel(mode: string) { + if (mode === 'normal') return '2-4' + if (mode === 'group') return '2-200' + return mode +} + +function recordingLabel(type: string, trigger: string | null | undefined) { + if (type === 'none') return null + if (type === 'local') return 'Local recording' + if (type === 'cloud') { + if (trigger === 'automatic-2nd-participant') return 'Cloud · auto' + if (trigger === 'prompt') return 'Cloud · prompt' + return 'Cloud' + } + return type +} + +function CalendarSyncIcon({ size = 14 }: { size?: number }) { + return ( + + {I.Calendar(size)} + + {I.Refresh(size * 0.55)} + + + ) +} + +export function RoomsTable({ rooms, onEdit, onDelete, onCopy, copiedId }: Props) { + if (rooms.length === 0) return null + return ( +
+ {rooms.map((r) => ( + + ))} +
+ ) +} + +type RoomRowProps = { + room: Room + onEdit?: (room: Room) => void + onDelete?: (room: Room) => void + onCopy?: (room: Room) => void + copied?: boolean +} + +function RoomRow({ room, onEdit, onDelete, onCopy, copied }: RoomRowProps) { + const recording = recordingLabel(room.recording_type, room.recording_trigger) + return ( +
+
+ +
+ +
+ +
+ {copied && ( + + Copied + + )} +
+ {room.ics_enabled && ( + + )} + {!copied && onCopy && ( + + )} + openRoom(room), + }, + { + label: 'Copy URL', + icon: I.Link(14), + onClick: () => onCopy?.(room), + }, + { separator: true }, + { + label: 'Edit settings', + icon: I.Edit(14), + onClick: () => onEdit?.(room), + }, + { + label: 'Delete room', + icon: I.Trash(14), + onClick: () => onDelete?.(room), + danger: true, + }, + ]} + label="Room options" + /> +
+
+
+ ) +} + +function Pill({ + icon, + title, + children, +}: { + icon?: ReactNode + title?: string + children: ReactNode +}) { + return ( + + {icon} + {children} + + ) +} + +function Dot() { + return · +} diff --git a/ui/src/components/shared/NewTranscriptDialog.tsx b/ui/src/components/shared/NewTranscriptDialog.tsx new file mode 100644 index 00000000..b30bea28 --- /dev/null +++ b/ui/src/components/shared/NewTranscriptDialog.tsx @@ -0,0 +1,237 @@ +import { useEffect, useState } from 'react' +import { useNavigate } from 'react-router-dom' +import { toast } from 'sonner' +import { I } from '@/components/icons' +import { Button } from '@/components/ui/primitives' +import { apiClient } from '@/api/client' +import { useRooms } from '@/hooks/useRooms' +import { REFLECTOR_LANGS } from '@/lib/types' + +type Props = { + onClose: () => void +} + +export function NewTranscriptDialog({ onClose }: Props) { + const navigate = useNavigate() + const { data: rooms = [] } = useRooms() + const [title, setTitle] = useState('') + const [sourceLang, setSourceLang] = useState('auto') + const [targetLang, setTargetLang] = useState('') + const [roomId, setRoomId] = useState('') + const [submitting, setSubmitting] = useState(false) + + useEffect(() => { + const k = (e: KeyboardEvent) => { + if (e.key === 'Escape' && !submitting) onClose() + } + document.addEventListener('keydown', k) + return () => document.removeEventListener('keydown', k) + }, [onClose, submitting]) + + const submit = async () => { + setSubmitting(true) + try { + const { data, response } = await apiClient.POST('/v1/transcripts', { + body: { + name: title || null, + source_language: sourceLang === 'auto' ? null : sourceLang, + target_language: targetLang || null, + room_id: roomId || null, + } as never, + }) + if (!response.ok || !data) throw new Error('Could not create transcript') + const id = (data as { id: string }).id + onClose() + navigate(`/browse?active=${id}`) + } catch (err) { + toast.error(err instanceof Error ? err.message : 'Failed to create transcript') + } finally { + setSubmitting(false) + } + } + + const handleUpload = () => { + toast.info('Upload flow lives on the transcript detail page — ship next pass.') + } + + return ( + <> +
!submitting && onClose()} /> +
+
+
+

+ New transcript +

+

+ Record live or upload a file. You can edit details later. +

+
+ +
+ +
+
+ + setTitle(e.target.value)} + style={{ marginTop: 6 }} + /> +
+ +
+ + +
Detected from the audio if set to Auto.
+
+ +
+ + +
Leave blank to skip translation.
+
+ +
+ + +
+
+ +
+
+ {I.Lock(12)} + Audio stays on your infrastructure. +
+ + +
+
+ + ) +} diff --git a/ui/src/components/transcript/AudioPlayer.tsx b/ui/src/components/transcript/AudioPlayer.tsx new file mode 100644 index 00000000..e17884e0 --- /dev/null +++ b/ui/src/components/transcript/AudioPlayer.tsx @@ -0,0 +1,219 @@ +import { useEffect, useRef, useState } from 'react' +import { I } from '@/components/icons' +import { Button } from '@/components/ui/primitives' +import { apiClient } from '@/api/client' +import { fmtDur } from '@/lib/format' +import { WaveformCanvas } from './WaveformCanvas' + +type Props = { + transcriptId: string + peaks: number[] | null | undefined + ticks?: number[] + /** Seconds. When set, the player seeks to this time. */ + seekTarget?: { seconds: number; nonce: number } | null + onTimeUpdate?: (currentSeconds: number) => void + onDuration?: (seconds: number) => void +} + +/** + * Authed audio playback for a transcript. We fetch the MP3 through the API + * client (so the Authorization header lands) and attach the blob URL to a + * native