From 7746e263853995ebd4103ed33df8b4f9b98d8318 Mon Sep 17 00:00:00 2001 From: RobbStarkAustria <7694336+RobbStarkAustria@users.noreply.github.com> Date: Wed, 28 Jan 2026 18:59:11 +0000 Subject: [PATCH] feat: add Ressourcen timeline view with group ordering (alpha.14) - New timeline page showing all groups and active events in parallel - Group order API endpoints with persistence (GET/POST /api/groups/order) - Customizable group ordering with visual controls - Fix CSS and TypeScript lint errors - Update documentation and bump version to 2026.1.0-alpha.14 --- .github/copilot-instructions.md | 37 +- README.md | 10 + TECH-CHANGELOG.md | 51 + dashboard/package-lock.json | 2303 ++++++++++++++++++++------- dashboard/package.json | 58 +- dashboard/public/program-info.json | 13 +- dashboard/src/appointments.tsx | 42 +- dashboard/src/infoscreen_groups.tsx | 44 + dashboard/src/ressourcen.css | 177 ++ dashboard/src/ressourcen.tsx | 362 ++++- dashboard/src/users.tsx | 2 - server/init_defaults.py | 1 + server/routes/groups.py | 52 + 13 files changed, 2487 insertions(+), 665 deletions(-) create mode 100644 dashboard/src/ressourcen.css diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 372ae40..e479ba0 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -28,9 +28,12 @@ Keep docs synced with code. When you change services/MQTT/API/UTC/env or dev/pro - `scheduler/scheduler.py` — scheduler main loop and MQTT publisher - `server/routes/eventmedia.py` — file uploads, streaming endpoint - `server/routes/events.py` — event CRUD and recurrence handling +- `server/routes/groups.py` — group management, alive status, display order persistence - `dashboard/src/components/CustomEventModal.tsx` — event creation UI - `dashboard/src/media.tsx` — FileManager / upload settings - - `dashboard/src/settings.tsx` — settings UI (nested tabs; system defaults for presentations and videos) +- `dashboard/src/settings.tsx` — settings UI (nested tabs; system defaults for presentations and videos) +- `dashboard/src/ressourcen.tsx` — timeline view showing all groups' active events in parallel +- `dashboard/src/ressourcen.css` — timeline and resource view styling @@ -51,7 +54,21 @@ Keep docs synced with code. When you change services/MQTT/API/UTC/env or dev/pro ## Recent changes since last commit - ### Latest (November 2025) + ### Latest (January 2026) + + - **Ressourcen Page (Timeline View)**: + - New 'Ressourcen' page with parallel timeline view showing active events for all room groups + - Compact timeline display with adjustable row height (65px per group) + - Real-time view of currently running events with type, title, and time window + - Customizable group ordering with visual reordering panel (drag up/down buttons) + - Group order persisted via `GET/POST /api/groups/order` endpoints + - Color-coded event bars matching group theme + - Timeline modes: Day and Week views (day view by default) + - Dynamic height calculation based on number of groups + - Syncfusion ScheduleComponent with TimelineViews, Resize, and DragAndDrop support + - Files: `dashboard/src/ressourcen.tsx` (page), `dashboard/src/ressourcen.css` (styles) + + ### Earlier (November 2025) - **API Naming Convention Standardization (camelCase)**: - Backend: Created `server/serializers.py` with `dict_to_camel_case()` utility for consistent JSON serialization @@ -155,8 +172,8 @@ Keep docs synced with code. When you change services/MQTT/API/UTC/env or dev/pro - Session usage: instantiate `Session()` per request, commit when mutating, and always `session.close()` before returning. - Examples: - Clients: `server/routes/clients.py` includes bulk group updates and MQTT sync (`publish_multiple_client_groups`). - - Groups: `server/routes/groups.py` computes “alive” using a grace period that varies by `ENV`. - - Events: `server/routes/events.py` serializes enum values to strings and normalizes times to UTC. Recurring events are only deactivated after their recurrence_end (UNTIL); non-recurring events deactivate after their end time. Event exceptions are respected and rendered in scheduler output. + - Groups: `server/routes/groups.py` computes “alive” using a grace period that varies by `ENV`. - `GET /api/groups/order` — retrieve saved group display order + - `POST /api/groups/order` — persist group display order (array of group IDs) - Events: `server/routes/events.py` serializes enum values to strings and normalizes times to UTC. Recurring events are only deactivated after their recurrence_end (UNTIL); non-recurring events deactivate after their end time. Event exceptions are respected and rendered in scheduler output. - Media: `server/routes/eventmedia.py` implements a simple file manager API rooted at `server/media/`. - System settings: `server/routes/system_settings.py` exposes key–value CRUD (`/api/system-settings`) and a convenience endpoint for WebUntis/Vertretungsplan supplement-table: `GET/POST /api/system-settings/supplement-table` (admin+). - Academic periods: `server/routes/academic_periods.py` exposes: @@ -264,6 +281,18 @@ Keep docs synced with code. When you change services/MQTT/API/UTC/env or dev/pro - Auto-refresh every 15 seconds; manual refresh button available - "Nicht zugeordnet" group always appears last in sorted list +- Ressourcen page (`dashboard/src/ressourcen.tsx`): + - Timeline view showing all groups and their active events in parallel + - Uses Syncfusion ScheduleComponent with TimelineViews (day/week modes) + - Compact row display: 65px height per group, dynamically calculated total height + - Group ordering panel with drag up/down controls; order persisted to backend via `/api/groups/order` + - Filters out "Nicht zugeordnet" group from timeline display + - Fetches events per group for current date range; displays first active event per group + - Color-coded event bars using `getGroupColor()` from `groupColors.ts` + - Resource-based timeline: each group is a resource row, events mapped to `ResourceId` + - Real-time updates: loads events on mount and when view/date changes + - Custom CSS in `dashboard/src/ressourcen.css` for timeline styling and controls + - User dropdown technical notes: - Dependencies: `@syncfusion/ej2-react-splitbuttons` and `@syncfusion/ej2-splitbuttons` must be installed. - Vite: add both to `optimizeDeps.include` in `vite.config.ts` to avoid import-analysis errors. diff --git a/README.md b/README.md index b12a144..1e0bb9b 100644 --- a/README.md +++ b/README.md @@ -330,6 +330,8 @@ mosquitto_sub -h localhost -t "infoscreen/+/heartbeat" -v - `GET /api/clients` - List all registered clients - `PUT /api/clients/{uuid}/group` - Assign client to group - `GET /api/groups` - List client groups with alive status +- `GET /api/groups/order` - Get saved group display order +- `POST /api/groups/order` - Save group display order (array of group IDs) - `GET /api/events` - List events with filtering - `POST /api/events` - Create new event - `POST /api/events/{id}/occurrences/{date}/detach` - Detach single occurrence from recurring series @@ -434,6 +436,14 @@ mosquitto_sub -h localhost -t "infoscreen/+/heartbeat" -v - 🗓️ Events (admin+): WebUntis/Vertretungsplan URL enable/disable, save, preview. Presentations: general defaults for slideshow interval, page-progress, and auto-progress; persisted via `/api/system-settings` keys and applied on create in the event modal. Videos: system-wide defaults for `autoplay`, `loop`, `volume`, and `muted`; persisted via `/api/system-settings` keys and applied on create in the event modal. - ⚙️ System (superadmin): Organization info and Advanced configuration placeholders - **Holidays**: Academic calendar management +- **Ressourcen**: Timeline view of active events across all room groups + - Parallel timeline display showing all groups and their current events simultaneously + - Compact visualization: 65px row height per group with color-coded event bars + - Day and week views for flexible time range inspection + - Customizable group ordering with visual drag controls (order persisted to backend) + - Real-time event status: shows currently running events with type, title, and time window + - Filters out unassigned groups for focused view + - Resource-based Syncfusion timeline scheduler with resize and drag-drop support - **Program info**: Version, build info, tech stack and paginated changelog (reads `dashboard/public/program-info.json`) ## 🔒 Security & Authentication diff --git a/TECH-CHANGELOG.md b/TECH-CHANGELOG.md index 485400d..577f99d 100644 --- a/TECH-CHANGELOG.md +++ b/TECH-CHANGELOG.md @@ -5,6 +5,57 @@ This changelog documents technical and developer-relevant changes included in public releases. For development workspace changes, see DEV-CHANGELOG.md. Not all changes here are reflected in the user-facing changelog (`program-info.json`), and not all UI/feature changes are repeated here. Some changes (e.g., backend refactoring, API adjustments, infrastructure, developer tooling, or internal logic) may only appear in TECH-CHANGELOG.md. For UI/feature changes, see `dashboard/public/program-info.json`. +## 2026.1.0-alpha.14 (2026-01-28) +- 🗓️ **Ressourcen Page (Timeline View)**: + - New frontend page: `dashboard/src/ressourcen.tsx` (357 lines) – Parallel timeline view showing active events for all room groups + - Uses Syncfusion ScheduleComponent with TimelineViews module for resource-based scheduling + - Compact visualization: 65px row height per group, dynamically calculated total container height + - Real-time event loading: Fetches events per group for current date range on mount and view/date changes + - Timeline modes: Day (default) and Week views with date range calculation + - Color-coded event bars: Uses `getGroupColor()` from `groupColors.ts` for group theme matching + - Displays first active event per group with type, title, and time window + - Filters out "Nicht zugeordnet" group from timeline display + - Resource mapping: Each group becomes a timeline resource row, events mapped via `ResourceId` + - Syncfusion modules: TimelineViews, Resize, DragAndDrop injected for rich interaction +- 🎨 **Ressourcen Styling**: + - New CSS file: `dashboard/src/ressourcen.css` (178 lines) with modern Material 3 design + - Fixed CSS lint errors: Converted `rgba()` to modern `rgb()` notation with percentage alpha values (`rgb(0 0 0 / 10%)`) + - Removed unnecessary quotes from font-family names (Roboto, Oxygen, Ubuntu, Cantarell) + - Fixed CSS selector specificity ordering (`.e-schedule` before `.ressourcen-timeline-wrapper .e-schedule`) + - Card-based controls layout with shadow and rounded corners + - Group ordering panel with scrollable list and action buttons + - Responsive timeline wrapper with flex layout +- 🔌 **Group Order API**: + - New backend endpoints in `server/routes/groups.py`: + - `GET /api/groups/order` – Retrieve saved group display order (returns JSON with `order` array of group IDs) + - `POST /api/groups/order` – Persist group display order (accepts JSON with `order` array) + - Order persistence: Stored in `system_settings` table with key `group_display_order` (JSON array of integers) + - Automatic synchronization: Missing group IDs added to order, removed IDs filtered out + - Frontend integration: Group order panel with drag up/down buttons, real-time reordering with backend sync +- 🖥️ **Frontend Technical**: + - State management: React hooks with unused setters removed (setTimelineView, setViewDate) to resolve lint warnings + - TypeScript: Changed `let` to `const` for immutable end date calculation + - UTC date parsing: Uses parseUTCDate callback to append 'Z' and ensure UTC interpretation + - Event formatting: Capitalizes first letter of event type for display (e.g., "Website - Title") + - Loading state: Shows loading indicator while fetching group/event data + - Schedule height: Dynamic calculation based on `groups.length * 65px + 100px` for header +- 📖 **Documentation**: + - Updated `.github/copilot-instructions.md`: + - Added Ressourcen page to "Recent changes" section (January 2026) + - Added `ressourcen.tsx` and `ressourcen.css` to "Important files" list + - Added Groups API order endpoints documentation + - Added comprehensive Ressourcen page section to "Frontend patterns" + - Updated `README.md`: + - Added Ressourcen page to "Pages Overview" section with feature details + - Added `GET/POST /api/groups/order` to Core Resources API section + - Bumped version in `dashboard/public/program-info.json` to `2026.1.0-alpha.14` with user-facing changelog + +Notes for integrators: +- Group order API returns JSON with `{ "order": [1, 2, 3, ...] }` structure (array of group IDs) +- Timeline view automatically filters "Nicht zugeordnet" group for cleaner display +- CSS follows modern Material 3 color-function notation (`rgb(r g b / alpha%)`) +- Syncfusion ScheduleComponent requires TimelineViews, Resize, and DragAndDrop modules injected + ## 2025.1.0-beta.1 (TBD) - 🔐 **User Management & Role-Based Access Control**: - Backend: Implemented comprehensive user management API (`server/routes/users.py`) with 6 endpoints (GET, POST, PUT, DELETE users + password reset). diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json index 5b97963..aa8f690 100644 --- a/dashboard/package-lock.json +++ b/dashboard/package-lock.json @@ -12,6 +12,7 @@ "@syncfusion/ej2-buttons": "^30.2.0", "@syncfusion/ej2-calendars": "^30.2.0", "@syncfusion/ej2-dropdowns": "^30.2.0", + "@syncfusion/ej2-gantt": "^32.1.23", "@syncfusion/ej2-grids": "^30.2.0", "@syncfusion/ej2-icons": "^30.2.0", "@syncfusion/ej2-inputs": "^30.2.0", @@ -26,6 +27,7 @@ "@syncfusion/ej2-react-calendars": "^30.2.0", "@syncfusion/ej2-react-dropdowns": "^30.2.0", "@syncfusion/ej2-react-filemanager": "^30.2.0", + "@syncfusion/ej2-react-gantt": "^32.1.23", "@syncfusion/ej2-react-grids": "^30.2.0", "@syncfusion/ej2-react-inputs": "^30.2.0", "@syncfusion/ej2-react-kanban": "^30.2.0", @@ -68,13 +70,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -83,9 +85,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", - "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", + "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", "dev": true, "license": "MIT", "engines": { @@ -93,22 +95,22 @@ } }, "node_modules/@babel/core": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", - "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", + "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.4", - "@babel/types": "^7.28.4", + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -135,14 +137,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -152,13 +154,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -189,29 +191,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -221,9 +223,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", "engines": { @@ -241,9 +243,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -261,27 +263,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.28.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -323,33 +325,33 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", - "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6", "debug": "^4.3.1" }, "engines": { @@ -357,19 +359,81 @@ } }, "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@cacheable/memory": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.7.tgz", + "integrity": "sha512-RbxnxAMf89Tp1dLhXMS7ceft/PGsDl1Ip7T20z5nZ+pwIAsQ1p2izPjVG69oCLv/jfQ7HDPHTWK0c9rcAWXN3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.3.3", + "@keyv/bigmap": "^1.3.0", + "hookified": "^1.14.0", + "keyv": "^5.5.5" + } + }, + "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.0.tgz", + "integrity": "sha512-KT01GjzV6AQD5+IYrcpoYLkCu1Jod3nau1Z7EsEuViO3TZGRacSbO9MfHmbJ1WaOXFtWLxPVj169cn2WNKPkIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.2.0", + "hookified": "^1.13.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.5.4" + } + }, + "node_modules/@cacheable/memory/node_modules/keyv": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz", + "integrity": "sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.3.3.tgz", + "integrity": "sha512-JsXDL70gQ+1Vc2W/KUFfkAJzgb4puKwwKehNLuB+HrNKWf91O736kGfxn4KujXCCSuh6mRRL4XEB0PkAFjWS0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.3.0", + "keyv": "^5.5.5" + } + }, + "node_modules/@cacheable/utils/node_modules/keyv": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz", + "integrity": "sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, "node_modules/@csstools/css-parser-algorithms": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", @@ -394,6 +458,26 @@ "@csstools/css-tokenizer": "^3.0.4" } }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.25.tgz", + "integrity": "sha512-g0Kw9W3vjx5BEBAF8c5Fm2NcB/Fs8jJXh85aXqwEXiL+tqtOut07TWgyaGzAAfTM+gKckrrncyeGEZPcaRgm2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, "node_modules/@csstools/css-tokenizer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", @@ -439,6 +523,29 @@ "@csstools/css-tokenizer": "^3.0.4" } }, + "node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, "node_modules/@dual-bundle/import-meta-resolve": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz", @@ -451,9 +558,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", - "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], @@ -468,9 +575,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", - "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -485,9 +592,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", - "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -502,9 +609,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", - "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], @@ -519,9 +626,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", - "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -536,9 +643,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", - "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], @@ -553,9 +660,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", - "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], @@ -570,9 +677,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", - "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], @@ -587,9 +694,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", - "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -604,9 +711,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", - "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -621,9 +728,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", - "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], @@ -638,9 +745,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", - "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -655,9 +762,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", - "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], @@ -672,9 +779,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", - "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], @@ -689,9 +796,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", - "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -706,9 +813,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", - "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -723,9 +830,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", - "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -740,9 +847,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", - "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ "arm64" ], @@ -757,9 +864,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", - "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], @@ -774,9 +881,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", - "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ "arm64" ], @@ -791,9 +898,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", - "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -808,9 +915,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", - "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", "cpu": [ "arm64" ], @@ -825,9 +932,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", - "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], @@ -842,9 +949,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", - "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], @@ -859,9 +966,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", - "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], @@ -876,9 +983,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", - "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], @@ -893,9 +1000,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -912,9 +1019,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -922,13 +1029,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -961,19 +1068,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -984,9 +1094,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -996,7 +1106,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -1055,9 +1165,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.35.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.35.0.tgz", - "integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "dev": true, "license": "MIT", "engines": { @@ -1068,9 +1178,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1078,13 +1188,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.2", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -1286,9 +1396,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.1.tgz", - "integrity": "sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.2.tgz", + "integrity": "sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==", "cpu": [ "arm" ], @@ -1300,9 +1410,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.1.tgz", - "integrity": "sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.2.tgz", + "integrity": "sha512-eXBg7ibkNUZ+sTwbFiDKou0BAckeV6kIigK7y5Ko4mB/5A1KLhuzEKovsmfvsL8mQorkoincMFGnQuIT92SKqA==", "cpu": [ "arm64" ], @@ -1314,9 +1424,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.1.tgz", - "integrity": "sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.2.tgz", + "integrity": "sha512-UCbaTklREjrc5U47ypLulAgg4njaqfOVLU18VrCrI+6E5MQjuG0lSWaqLlAJwsD7NpFV249XgB0Bi37Zh5Sz4g==", "cpu": [ "arm64" ], @@ -1328,9 +1438,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.1.tgz", - "integrity": "sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.2.tgz", + "integrity": "sha512-dP67MA0cCMHFT2g5XyjtpVOtp7y4UyUxN3dhLdt11at5cPKnSm4lY+EhwNvDXIMzAMIo2KU+mc9wxaAQJTn7sQ==", "cpu": [ "x64" ], @@ -1342,9 +1452,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.1.tgz", - "integrity": "sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.2.tgz", + "integrity": "sha512-WDUPLUwfYV9G1yxNRJdXcvISW15mpvod1Wv3ok+Ws93w1HjIVmCIFxsG2DquO+3usMNCpJQ0wqO+3GhFdl6Fow==", "cpu": [ "arm64" ], @@ -1356,9 +1466,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.1.tgz", - "integrity": "sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.2.tgz", + "integrity": "sha512-Ng95wtHVEulRwn7R0tMrlUuiLVL/HXA8Lt/MYVpy88+s5ikpntzZba1qEulTuPnPIZuOPcW9wNEiqvZxZmgmqQ==", "cpu": [ "x64" ], @@ -1370,9 +1480,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.1.tgz", - "integrity": "sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.2.tgz", + "integrity": "sha512-AEXMESUDWWGqD6LwO/HkqCZgUE1VCJ1OhbvYGsfqX2Y6w5quSXuyoy/Fg3nRqiwro+cJYFxiw5v4kB2ZDLhxrw==", "cpu": [ "arm" ], @@ -1384,9 +1494,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.1.tgz", - "integrity": "sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.2.tgz", + "integrity": "sha512-ZV7EljjBDwBBBSv570VWj0hiNTdHt9uGznDtznBB4Caj3ch5rgD4I2K1GQrtbvJ/QiB+663lLgOdcADMNVC29Q==", "cpu": [ "arm" ], @@ -1398,9 +1508,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz", - "integrity": "sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.2.tgz", + "integrity": "sha512-uvjwc8NtQVPAJtq4Tt7Q49FOodjfbf6NpqXyW/rjXoV+iZ3EJAHLNAnKT5UJBc6ffQVgmXTUL2ifYiLABlGFqA==", "cpu": [ "arm64" ], @@ -1412,9 +1522,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz", - "integrity": "sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.2.tgz", + "integrity": "sha512-s3KoWVNnye9mm/2WpOZ3JeUiediUVw6AvY/H7jNA6qgKA2V2aM25lMkVarTDfiicn/DLq3O0a81jncXszoyCFA==", "cpu": [ "arm64" ], @@ -1425,10 +1535,24 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.1.tgz", - "integrity": "sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.2.tgz", + "integrity": "sha512-gi21faacK+J8aVSyAUptML9VQN26JRxe484IbF+h3hpG+sNVoMXPduhREz2CcYr5my0NE3MjVvQ5bMKX71pfVA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.2.tgz", + "integrity": "sha512-qSlWiXnVaS/ceqXNfnoFZh4IiCA0EwvCivivTGbEu1qv2o+WTHpn1zNmCTAoOG5QaVr2/yhCoLScQtc/7RxshA==", "cpu": [ "loong64" ], @@ -1440,9 +1564,23 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.1.tgz", - "integrity": "sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.2.tgz", + "integrity": "sha512-rPyuLFNoF1B0+wolH277E780NUKf+KoEDb3OyoLbAO18BbeKi++YN6gC/zuJoPPDlQRL3fIxHxCxVEWiem2yXw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.2.tgz", + "integrity": "sha512-g+0ZLMook31iWV4PvqKU0i9E78gaZgYpSrYPed/4Bu+nGTgfOPtfs1h11tSSRPXSjC5EzLTjV/1A7L2Vr8pJoQ==", "cpu": [ "ppc64" ], @@ -1454,9 +1592,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.1.tgz", - "integrity": "sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.2.tgz", + "integrity": "sha512-i+sGeRGsjKZcQRh3BRfpLsM3LX3bi4AoEVqmGDyc50L6KfYsN45wVCSz70iQMwPWr3E5opSiLOwsC9WB4/1pqg==", "cpu": [ "riscv64" ], @@ -1468,9 +1606,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.1.tgz", - "integrity": "sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.2.tgz", + "integrity": "sha512-C1vLcKc4MfFV6I0aWsC7B2Y9QcsiEcvKkfxprwkPfLaN8hQf0/fKHwSF2lcYzA9g4imqnhic729VB9Fo70HO3Q==", "cpu": [ "riscv64" ], @@ -1482,9 +1620,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.1.tgz", - "integrity": "sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.2.tgz", + "integrity": "sha512-68gHUK/howpQjh7g7hlD9DvTTt4sNLp1Bb+Yzw2Ki0xvscm2cOdCLZNJNhd2jW8lsTPrHAHuF751BygifW4bkQ==", "cpu": [ "s390x" ], @@ -1496,9 +1634,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.1.tgz", - "integrity": "sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.2.tgz", + "integrity": "sha512-1e30XAuaBP1MAizaOBApsgeGZge2/Byd6wV4a8oa6jPdHELbRHBiw7wvo4dp7Ie2PE8TZT4pj9RLGZv9N4qwlw==", "cpu": [ "x64" ], @@ -1510,9 +1648,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.1.tgz", - "integrity": "sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.2.tgz", + "integrity": "sha512-4BJucJBGbuGnH6q7kpPqGJGzZnYrpAzRd60HQSt3OpX/6/YVgSsJnNzR8Ot74io50SeVT4CtCWe/RYIAymFPwA==", "cpu": [ "x64" ], @@ -1523,10 +1661,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.2.tgz", + "integrity": "sha512-cT2MmXySMo58ENv8p6/O6wI/h/gLnD3D6JoajwXFZH6X9jz4hARqUhWpGuQhOgLNXscfZYRQMJvZDtWNzMAIDw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.1.tgz", - "integrity": "sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.2.tgz", + "integrity": "sha512-sZnyUgGkuzIXaK3jNMPmUIyJrxu/PjmATQrocpGA1WbCPX8H5tfGgRSuYtqBYAvLuIGp8SPRb1O4d1Fkb5fXaQ==", "cpu": [ "arm64" ], @@ -1538,9 +1690,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.1.tgz", - "integrity": "sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.2.tgz", + "integrity": "sha512-sDpFbenhmWjNcEbBcoTV0PWvW5rPJFvu+P7XoTY0YLGRupgLbFY0XPfwIbJOObzO7QgkRDANh65RjhPmgSaAjQ==", "cpu": [ "arm64" ], @@ -1552,9 +1704,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.1.tgz", - "integrity": "sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.2.tgz", + "integrity": "sha512-GvJ03TqqaweWCigtKQVBErw2bEhu1tyfNQbarwr94wCGnczA9HF8wqEe3U/Lfu6EdeNP0p6R+APeHVwEqVxpUQ==", "cpu": [ "ia32" ], @@ -1565,10 +1717,24 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.2.tgz", + "integrity": "sha512-KvXsBvp13oZz9JGe5NYS7FNizLe99Ny+W8ETsuCyjXiKdiGrcz2/J/N8qxZ/RSwivqjQguug07NLHqrIHrqfYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.1.tgz", - "integrity": "sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.2.tgz", + "integrity": "sha512-xNO+fksQhsAckRtDSPWaMeT1uIM+JrDRXlerpnWNXhn1TdB3YZ6uKBMBTKP0eX9XtYEP978hHk1f8332i2AW8Q==", "cpu": [ "x64" ], @@ -1680,6 +1846,228 @@ "@syncfusion/ej2-splitbuttons": "~30.2.4" } }, + "node_modules/@syncfusion/ej2-gantt": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-gantt/-/ej2-gantt-32.1.23.tgz", + "integrity": "sha512-8RRkW4PqMOV5EpF4xfVLGHgCVawBfpHz43JfRSHFAj7GMeq2uWrijU2ynEM7McCnYaxp4diRdzoyd7mJ7MRbbg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-calendars": "~32.1.23", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-dropdowns": "~32.1.23", + "@syncfusion/ej2-grids": "~32.1.23", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-layouts": "~32.1.19", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-notifications": "~32.1.22", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-richtexteditor": "~32.1.23", + "@syncfusion/ej2-svg-base": "~32.1.19", + "@syncfusion/ej2-treegrid": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-base": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-32.1.23.tgz", + "integrity": "sha512-CYORjy2lYqWmYWR+FbpWuvF+0FMy9QyavoU8NEU2TP73xWUTLDofOoE7rKl8tamvbim0oOl83cmfDqHoBgfUrw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~32.1.19" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-buttons": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-32.1.23.tgz", + "integrity": "sha512-4ZqJJK9h1vneJw6Tjr9nsbZ0PWpkcj3p6S6SVBDEAUEMFhRneebEfwj+5s3qMUmvAxq5jDrIJgt8nr0JcpxYTQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-calendars": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-32.1.23.tgz", + "integrity": "sha512-AyDxQnhx/hZeZEIKIOGW81oGQihYPt99SZeLPuHULlr9jM/SigLMKM7TLsZunXZ0QscfRfXpb7lRGGtL+1cbEQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-compression": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-compression/-/ej2-compression-32.1.19.tgz", + "integrity": "sha512-EzCpNNRI/F2KQkD6mhrMcDiQ7pbY5GZik80EQctFXyF87Ov5nn9+8qfMr42gM5tTwKLBtCgFXpj4sIlkwY2gGA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-file-utils": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-data": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-32.1.23.tgz", + "integrity": "sha512-N7OWni4c7koPe3XZdxY4NYqDMxqVy1nUJqGid+0dfc8Jh75L8Fc0RxjAzIvPBbA+hoxVfUoXq5Cfqxlg68vj1A==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-dropdowns": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-32.1.23.tgz", + "integrity": "sha512-KucRCHQNFAn/djPLwljHPmEWhQkTPFhgTKu3w/jEM1Otr6z7qDPtjTGHGEipKvvsjzsHKs3a51t1yaxDN7SpCQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-notifications": "~32.1.22", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-excel-export": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-excel-export/-/ej2-excel-export-32.1.19.tgz", + "integrity": "sha512-BF05J1CJQTSFKe3u+bKM99t81N5Tbhe9y3B1LCKWKT7T6HOV5hPqQKxENeJpOiSttwimS89VCqsjmgK3XNGrPw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-compression": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-file-utils": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-file-utils/-/ej2-file-utils-32.1.19.tgz", + "integrity": "sha512-B33eTLbuxU6fOAe7KjxdBvfonm835oXNWee140o3IEMHTk1BGj1xL5bKRS8uqmVkrmuH0JacHzBkVM2P4yYSvQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-grids": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-32.1.23.tgz", + "integrity": "sha512-UcSXUNWV8sLcNFRgOxXmizU41V5WrohyWcYZ4xAn8gQn/CEHhqJ8MIdqswOdzIT3I7/8ijDNr2k0h6tqXipMhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-calendars": "~32.1.23", + "@syncfusion/ej2-compression": "~32.1.19", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-dropdowns": "~32.1.23", + "@syncfusion/ej2-excel-export": "~32.1.19", + "@syncfusion/ej2-file-utils": "~32.1.19", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-notifications": "~32.1.22", + "@syncfusion/ej2-pdf-export": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-splitbuttons": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-icons": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-32.1.19.tgz", + "integrity": "sha512-qZ0NNP0qWQ9EwkakpCwu27ECGEM5Db9dBscBvpZ2rmq1rDDi9d/8VEu6+EmFED5R6Sh3cGVJpI1izw9fsfsKmg==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-inputs": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-32.1.22.tgz", + "integrity": "sha512-6yxX+zfDMiNCcvsIOgoYEEq4VuC+pgA38YAFEX9A/lfRCTioM9hAUJ63yNXnXfxmA731hl5zYo/ZTzV0buT3cw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.21", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-splitbuttons": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-layouts": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-layouts/-/ej2-layouts-32.1.19.tgz", + "integrity": "sha512-y7itLx+e5u9OXG0G12C70upi66rtOAkNbCKaT2mZJV5t7vcuVCx/9ixanGYBbZ2u6DaXc7aCKFA++11fZZ/QRQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-lists": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-32.1.23.tgz", + "integrity": "sha512-OtDVJJcc2crpT6JGewz1QQZZ9hiD2OPDZZPle6+SdxRLcBZVZx4v7xGkA7+QZFCzw3xKU/Shwc+18+RnjatBjg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-navigations": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-32.1.19.tgz", + "integrity": "sha512-eBPHbkQV0bAwiUJ4qvhh/6co6ElSu5oOaV/T0YlyphnedFU49vFb2CS34YhV5fuEXgq1yViIzbk1xsZTl1VHjg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.19", + "@syncfusion/ej2-data": "~32.1.19", + "@syncfusion/ej2-inputs": "~32.1.19", + "@syncfusion/ej2-lists": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-notifications": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-32.1.22.tgz", + "integrity": "sha512-4ziStaCD8tRZEyCWFfrQtzusm3d+ewW3isAq0AFmfw/LI8ye0VOTYNZxCE5Y5uMgPAol7Q6XMHQbWl72guD/Ag==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.21", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-pdf-export": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-pdf-export/-/ej2-pdf-export-32.1.19.tgz", + "integrity": "sha512-uBaydsgjN1TcLIOBJw3SFXucfqxbP9+G6oZybkP96EyZIOKms7H2WkkB+zROgmsR2krGuRyDuJfhW8+tuL6zjA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-compression": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-popups": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-32.1.19.tgz", + "integrity": "sha512-tLvUwroBP8nlnpX/TmBh9VgDckqnYAgv6weAqVYoS7KC7Osfm+FdB09I82d/448luzD9Vt5Cm51dumLLGjZ6sQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-gantt/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-32.1.22.tgz", + "integrity": "sha512-7EnT/EtmE+e2AhupROdoUNlpVHLKzW9i0GzLemlYxPmyny0M/9xEDPGs+HmM6fQ4LsP8+TGCYcjTE2Snb9F3VQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, "node_modules/@syncfusion/ej2-grids": { "version": "30.2.6", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-30.2.6.tgz", @@ -1721,6 +2109,141 @@ "@syncfusion/ej2-splitbuttons": "~30.2.4" } }, + "node_modules/@syncfusion/ej2-interactive-chat": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-interactive-chat/-/ej2-interactive-chat-32.1.23.tgz", + "integrity": "sha512-1I+Rosbf1UXlr28g6Tt0XhVZkvUZzqcg51qb5WLAt7ZWMUgwAvqTjI/VQBH0kwVOdmwSS1z/6eckZ8QhXIvHbQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-dropdowns": "~32.1.23", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-notifications": "~32.1.22", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-splitbuttons": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-base": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-32.1.23.tgz", + "integrity": "sha512-CYORjy2lYqWmYWR+FbpWuvF+0FMy9QyavoU8NEU2TP73xWUTLDofOoE7rKl8tamvbim0oOl83cmfDqHoBgfUrw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~32.1.19" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-buttons": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-32.1.23.tgz", + "integrity": "sha512-4ZqJJK9h1vneJw6Tjr9nsbZ0PWpkcj3p6S6SVBDEAUEMFhRneebEfwj+5s3qMUmvAxq5jDrIJgt8nr0JcpxYTQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23" + } + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-data": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-32.1.23.tgz", + "integrity": "sha512-N7OWni4c7koPe3XZdxY4NYqDMxqVy1nUJqGid+0dfc8Jh75L8Fc0RxjAzIvPBbA+hoxVfUoXq5Cfqxlg68vj1A==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23" + } + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-dropdowns": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-32.1.23.tgz", + "integrity": "sha512-KucRCHQNFAn/djPLwljHPmEWhQkTPFhgTKu3w/jEM1Otr6z7qDPtjTGHGEipKvvsjzsHKs3a51t1yaxDN7SpCQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-notifications": "~32.1.22", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-icons": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-32.1.19.tgz", + "integrity": "sha512-qZ0NNP0qWQ9EwkakpCwu27ECGEM5Db9dBscBvpZ2rmq1rDDi9d/8VEu6+EmFED5R6Sh3cGVJpI1izw9fsfsKmg==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-inputs": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-32.1.22.tgz", + "integrity": "sha512-6yxX+zfDMiNCcvsIOgoYEEq4VuC+pgA38YAFEX9A/lfRCTioM9hAUJ63yNXnXfxmA731hl5zYo/ZTzV0buT3cw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.21", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-splitbuttons": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-lists": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-32.1.23.tgz", + "integrity": "sha512-OtDVJJcc2crpT6JGewz1QQZZ9hiD2OPDZZPle6+SdxRLcBZVZx4v7xGkA7+QZFCzw3xKU/Shwc+18+RnjatBjg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-navigations": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-32.1.19.tgz", + "integrity": "sha512-eBPHbkQV0bAwiUJ4qvhh/6co6ElSu5oOaV/T0YlyphnedFU49vFb2CS34YhV5fuEXgq1yViIzbk1xsZTl1VHjg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.19", + "@syncfusion/ej2-data": "~32.1.19", + "@syncfusion/ej2-inputs": "~32.1.19", + "@syncfusion/ej2-lists": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-notifications": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-32.1.22.tgz", + "integrity": "sha512-4ziStaCD8tRZEyCWFfrQtzusm3d+ewW3isAq0AFmfw/LI8ye0VOTYNZxCE5Y5uMgPAol7Q6XMHQbWl72guD/Ag==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.21", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-popups": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-32.1.19.tgz", + "integrity": "sha512-tLvUwroBP8nlnpX/TmBh9VgDckqnYAgv6weAqVYoS7KC7Osfm+FdB09I82d/448luzD9Vt5Cm51dumLLGjZ6sQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-interactive-chat/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-32.1.22.tgz", + "integrity": "sha512-7EnT/EtmE+e2AhupROdoUNlpVHLKzW9i0GzLemlYxPmyny0M/9xEDPGs+HmM6fQ4LsP8+TGCYcjTE2Snb9F3VQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, "node_modules/@syncfusion/ej2-kanban": { "version": "30.2.4", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-kanban/-/ej2-kanban-30.2.4.tgz", @@ -1759,6 +2282,33 @@ "@syncfusion/ej2-popups": "~30.2.4" } }, + "node_modules/@syncfusion/ej2-markdown-converter": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-markdown-converter/-/ej2-markdown-converter-32.1.23.tgz", + "integrity": "sha512-avqrMjRyoRXBnSXgTE8DUnxDpdhmwlIddrSL/PbxDkk9KNXeX4LNwN782OfMiO6MFBz1sTcooPEGIeOHM00rPw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23" + } + }, + "node_modules/@syncfusion/ej2-markdown-converter/node_modules/@syncfusion/ej2-base": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-32.1.23.tgz", + "integrity": "sha512-CYORjy2lYqWmYWR+FbpWuvF+0FMy9QyavoU8NEU2TP73xWUTLDofOoE7rKl8tamvbim0oOl83cmfDqHoBgfUrw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~32.1.19" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-markdown-converter/node_modules/@syncfusion/ej2-icons": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-32.1.19.tgz", + "integrity": "sha512-qZ0NNP0qWQ9EwkakpCwu27ECGEM5Db9dBscBvpZ2rmq1rDDi9d/8VEu6+EmFED5R6Sh3cGVJpI1izw9fsfsKmg==", + "license": "SEE LICENSE IN license" + }, "node_modules/@syncfusion/ej2-navigations": { "version": "30.2.7", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-30.2.7.tgz", @@ -1856,6 +2406,44 @@ "@syncfusion/ej2-react-base": "~30.2.4" } }, + "node_modules/@syncfusion/ej2-react-gantt": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-gantt/-/ej2-react-gantt-32.1.23.tgz", + "integrity": "sha512-GqSoqrbjeIuyG89Y6G/jdsbOdPB8qCUdovIGzZaQVV/67a6oWqCZYZIi9XciF1hHbn+a84tEGdL2hI02tmOt8w==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-gantt": "32.1.23", + "@syncfusion/ej2-react-base": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-react-gantt/node_modules/@syncfusion/ej2-base": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-32.1.23.tgz", + "integrity": "sha512-CYORjy2lYqWmYWR+FbpWuvF+0FMy9QyavoU8NEU2TP73xWUTLDofOoE7rKl8tamvbim0oOl83cmfDqHoBgfUrw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~32.1.19" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-gantt/node_modules/@syncfusion/ej2-icons": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-32.1.19.tgz", + "integrity": "sha512-qZ0NNP0qWQ9EwkakpCwu27ECGEM5Db9dBscBvpZ2rmq1rDDi9d/8VEu6+EmFED5R6Sh3cGVJpI1izw9fsfsKmg==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-gantt/node_modules/@syncfusion/ej2-react-base": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-base/-/ej2-react-base-32.1.22.tgz", + "integrity": "sha512-IhtzT+jmHRc5YsUmClheFS5ZRm2DGvPIcYGu3AxcQkBbXdCCrItj2nPqQl44F2XT2NqVhGSRtig2CdAGSLUS9A==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19" + } + }, "node_modules/@syncfusion/ej2-react-grids": { "version": "30.2.6", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-grids/-/ej2-react-grids-30.2.6.tgz", @@ -1955,6 +2543,241 @@ "@syncfusion/ej2-splitbuttons": "30.2.4" } }, + "node_modules/@syncfusion/ej2-richtexteditor": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-richtexteditor/-/ej2-richtexteditor-32.1.23.tgz", + "integrity": "sha512-2Sq47cAH+cshgsfa4LbAev7JMyK9MSua6g+26itOudKddgi4utu6Bu9syWx1heLvBf0eb7OwIGK9l74Agpcigg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-dropdowns": "~32.1.23", + "@syncfusion/ej2-filemanager": "~32.1.19", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-interactive-chat": "~32.1.23", + "@syncfusion/ej2-markdown-converter": "~32.1.23", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-splitbuttons": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-base": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-32.1.23.tgz", + "integrity": "sha512-CYORjy2lYqWmYWR+FbpWuvF+0FMy9QyavoU8NEU2TP73xWUTLDofOoE7rKl8tamvbim0oOl83cmfDqHoBgfUrw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~32.1.19" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-buttons": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-32.1.23.tgz", + "integrity": "sha512-4ZqJJK9h1vneJw6Tjr9nsbZ0PWpkcj3p6S6SVBDEAUEMFhRneebEfwj+5s3qMUmvAxq5jDrIJgt8nr0JcpxYTQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-calendars": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-32.1.23.tgz", + "integrity": "sha512-AyDxQnhx/hZeZEIKIOGW81oGQihYPt99SZeLPuHULlr9jM/SigLMKM7TLsZunXZ0QscfRfXpb7lRGGtL+1cbEQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-compression": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-compression/-/ej2-compression-32.1.19.tgz", + "integrity": "sha512-EzCpNNRI/F2KQkD6mhrMcDiQ7pbY5GZik80EQctFXyF87Ov5nn9+8qfMr42gM5tTwKLBtCgFXpj4sIlkwY2gGA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-file-utils": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-data": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-32.1.23.tgz", + "integrity": "sha512-N7OWni4c7koPe3XZdxY4NYqDMxqVy1nUJqGid+0dfc8Jh75L8Fc0RxjAzIvPBbA+hoxVfUoXq5Cfqxlg68vj1A==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-dropdowns": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-32.1.23.tgz", + "integrity": "sha512-KucRCHQNFAn/djPLwljHPmEWhQkTPFhgTKu3w/jEM1Otr6z7qDPtjTGHGEipKvvsjzsHKs3a51t1yaxDN7SpCQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-notifications": "~32.1.22", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-excel-export": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-excel-export/-/ej2-excel-export-32.1.19.tgz", + "integrity": "sha512-BF05J1CJQTSFKe3u+bKM99t81N5Tbhe9y3B1LCKWKT7T6HOV5hPqQKxENeJpOiSttwimS89VCqsjmgK3XNGrPw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-compression": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-file-utils": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-file-utils/-/ej2-file-utils-32.1.19.tgz", + "integrity": "sha512-B33eTLbuxU6fOAe7KjxdBvfonm835oXNWee140o3IEMHTk1BGj1xL5bKRS8uqmVkrmuH0JacHzBkVM2P4yYSvQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-filemanager": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-filemanager/-/ej2-filemanager-32.1.19.tgz", + "integrity": "sha512-8Q7WVk2cR/Id9iku6WrUkCZksFvkqIQ8mn7jNKs2pFoNNE0SY6GSdtC9qHPnB75N6zf9057w61b5HO3MfW3utA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.19", + "@syncfusion/ej2-data": "~32.1.19", + "@syncfusion/ej2-grids": "~32.1.19", + "@syncfusion/ej2-inputs": "~32.1.19", + "@syncfusion/ej2-layouts": "~32.1.19", + "@syncfusion/ej2-lists": "~32.1.19", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-splitbuttons": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-grids": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-32.1.23.tgz", + "integrity": "sha512-UcSXUNWV8sLcNFRgOxXmizU41V5WrohyWcYZ4xAn8gQn/CEHhqJ8MIdqswOdzIT3I7/8ijDNr2k0h6tqXipMhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-calendars": "~32.1.23", + "@syncfusion/ej2-compression": "~32.1.19", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-dropdowns": "~32.1.23", + "@syncfusion/ej2-excel-export": "~32.1.19", + "@syncfusion/ej2-file-utils": "~32.1.19", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-notifications": "~32.1.22", + "@syncfusion/ej2-pdf-export": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-splitbuttons": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-icons": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-32.1.19.tgz", + "integrity": "sha512-qZ0NNP0qWQ9EwkakpCwu27ECGEM5Db9dBscBvpZ2rmq1rDDi9d/8VEu6+EmFED5R6Sh3cGVJpI1izw9fsfsKmg==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-inputs": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-32.1.22.tgz", + "integrity": "sha512-6yxX+zfDMiNCcvsIOgoYEEq4VuC+pgA38YAFEX9A/lfRCTioM9hAUJ63yNXnXfxmA731hl5zYo/ZTzV0buT3cw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.21", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-splitbuttons": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-layouts": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-layouts/-/ej2-layouts-32.1.19.tgz", + "integrity": "sha512-y7itLx+e5u9OXG0G12C70upi66rtOAkNbCKaT2mZJV5t7vcuVCx/9ixanGYBbZ2u6DaXc7aCKFA++11fZZ/QRQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-lists": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-32.1.23.tgz", + "integrity": "sha512-OtDVJJcc2crpT6JGewz1QQZZ9hiD2OPDZZPle6+SdxRLcBZVZx4v7xGkA7+QZFCzw3xKU/Shwc+18+RnjatBjg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-navigations": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-32.1.19.tgz", + "integrity": "sha512-eBPHbkQV0bAwiUJ4qvhh/6co6ElSu5oOaV/T0YlyphnedFU49vFb2CS34YhV5fuEXgq1yViIzbk1xsZTl1VHjg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.19", + "@syncfusion/ej2-data": "~32.1.19", + "@syncfusion/ej2-inputs": "~32.1.19", + "@syncfusion/ej2-lists": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-notifications": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-32.1.22.tgz", + "integrity": "sha512-4ziStaCD8tRZEyCWFfrQtzusm3d+ewW3isAq0AFmfw/LI8ye0VOTYNZxCE5Y5uMgPAol7Q6XMHQbWl72guD/Ag==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.21", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-pdf-export": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-pdf-export/-/ej2-pdf-export-32.1.19.tgz", + "integrity": "sha512-uBaydsgjN1TcLIOBJw3SFXucfqxbP9+G6oZybkP96EyZIOKms7H2WkkB+zROgmsR2krGuRyDuJfhW8+tuL6zjA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-compression": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-popups": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-32.1.19.tgz", + "integrity": "sha512-tLvUwroBP8nlnpX/TmBh9VgDckqnYAgv6weAqVYoS7KC7Osfm+FdB09I82d/448luzD9Vt5Cm51dumLLGjZ6sQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-richtexteditor/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-32.1.22.tgz", + "integrity": "sha512-7EnT/EtmE+e2AhupROdoUNlpVHLKzW9i0GzLemlYxPmyny0M/9xEDPGs+HmM6fQ4LsP8+TGCYcjTE2Snb9F3VQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, "node_modules/@syncfusion/ej2-schedule": { "version": "30.2.7", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-schedule/-/ej2-schedule-30.2.7.tgz", @@ -1983,6 +2806,235 @@ "@syncfusion/ej2-popups": "~30.2.4" } }, + "node_modules/@syncfusion/ej2-svg-base": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-svg-base/-/ej2-svg-base-32.1.19.tgz", + "integrity": "sha512-pXjstNDrGrte/rv17711N0IgYCy7gF9pKqEW/hVB8kQqazYLWRvt0Ni2qlFwVua0RQxHd7xmGRxVbS3OrS3r5w==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-svg-base/node_modules/@syncfusion/ej2-base": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-32.1.23.tgz", + "integrity": "sha512-CYORjy2lYqWmYWR+FbpWuvF+0FMy9QyavoU8NEU2TP73xWUTLDofOoE7rKl8tamvbim0oOl83cmfDqHoBgfUrw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~32.1.19" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-svg-base/node_modules/@syncfusion/ej2-icons": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-32.1.19.tgz", + "integrity": "sha512-qZ0NNP0qWQ9EwkakpCwu27ECGEM5Db9dBscBvpZ2rmq1rDDi9d/8VEu6+EmFED5R6Sh3cGVJpI1izw9fsfsKmg==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-treegrid": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-treegrid/-/ej2-treegrid-32.1.22.tgz", + "integrity": "sha512-if1ITQA5zN2LW2v17muMyPa5GMib2Z3gmq7r+tk4ihMfwiirdRhmQo66EfLBOKspn3Ly9zzi3PlaEGhNVtczrQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-data": "~32.1.19", + "@syncfusion/ej2-grids": "~32.1.22", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-base": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-32.1.23.tgz", + "integrity": "sha512-CYORjy2lYqWmYWR+FbpWuvF+0FMy9QyavoU8NEU2TP73xWUTLDofOoE7rKl8tamvbim0oOl83cmfDqHoBgfUrw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~32.1.19" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-buttons": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-32.1.23.tgz", + "integrity": "sha512-4ZqJJK9h1vneJw6Tjr9nsbZ0PWpkcj3p6S6SVBDEAUEMFhRneebEfwj+5s3qMUmvAxq5jDrIJgt8nr0JcpxYTQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-calendars": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-32.1.23.tgz", + "integrity": "sha512-AyDxQnhx/hZeZEIKIOGW81oGQihYPt99SZeLPuHULlr9jM/SigLMKM7TLsZunXZ0QscfRfXpb7lRGGtL+1cbEQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-compression": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-compression/-/ej2-compression-32.1.19.tgz", + "integrity": "sha512-EzCpNNRI/F2KQkD6mhrMcDiQ7pbY5GZik80EQctFXyF87Ov5nn9+8qfMr42gM5tTwKLBtCgFXpj4sIlkwY2gGA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-file-utils": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-data": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-32.1.23.tgz", + "integrity": "sha512-N7OWni4c7koPe3XZdxY4NYqDMxqVy1nUJqGid+0dfc8Jh75L8Fc0RxjAzIvPBbA+hoxVfUoXq5Cfqxlg68vj1A==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-dropdowns": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-32.1.23.tgz", + "integrity": "sha512-KucRCHQNFAn/djPLwljHPmEWhQkTPFhgTKu3w/jEM1Otr6z7qDPtjTGHGEipKvvsjzsHKs3a51t1yaxDN7SpCQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-notifications": "~32.1.22", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-excel-export": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-excel-export/-/ej2-excel-export-32.1.19.tgz", + "integrity": "sha512-BF05J1CJQTSFKe3u+bKM99t81N5Tbhe9y3B1LCKWKT7T6HOV5hPqQKxENeJpOiSttwimS89VCqsjmgK3XNGrPw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-compression": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-file-utils": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-file-utils/-/ej2-file-utils-32.1.19.tgz", + "integrity": "sha512-B33eTLbuxU6fOAe7KjxdBvfonm835oXNWee140o3IEMHTk1BGj1xL5bKRS8uqmVkrmuH0JacHzBkVM2P4yYSvQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-grids": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-32.1.23.tgz", + "integrity": "sha512-UcSXUNWV8sLcNFRgOxXmizU41V5WrohyWcYZ4xAn8gQn/CEHhqJ8MIdqswOdzIT3I7/8ijDNr2k0h6tqXipMhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-calendars": "~32.1.23", + "@syncfusion/ej2-compression": "~32.1.19", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-dropdowns": "~32.1.23", + "@syncfusion/ej2-excel-export": "~32.1.19", + "@syncfusion/ej2-file-utils": "~32.1.19", + "@syncfusion/ej2-inputs": "~32.1.22", + "@syncfusion/ej2-lists": "~32.1.23", + "@syncfusion/ej2-navigations": "~32.1.19", + "@syncfusion/ej2-notifications": "~32.1.22", + "@syncfusion/ej2-pdf-export": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-splitbuttons": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-icons": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-32.1.19.tgz", + "integrity": "sha512-qZ0NNP0qWQ9EwkakpCwu27ECGEM5Db9dBscBvpZ2rmq1rDDi9d/8VEu6+EmFED5R6Sh3cGVJpI1izw9fsfsKmg==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-inputs": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-32.1.22.tgz", + "integrity": "sha512-6yxX+zfDMiNCcvsIOgoYEEq4VuC+pgA38YAFEX9A/lfRCTioM9hAUJ63yNXnXfxmA731hl5zYo/ZTzV0buT3cw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.21", + "@syncfusion/ej2-popups": "~32.1.19", + "@syncfusion/ej2-splitbuttons": "~32.1.22" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-lists": { + "version": "32.1.23", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-32.1.23.tgz", + "integrity": "sha512-OtDVJJcc2crpT6JGewz1QQZZ9hiD2OPDZZPle6+SdxRLcBZVZx4v7xGkA7+QZFCzw3xKU/Shwc+18+RnjatBjg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.23", + "@syncfusion/ej2-buttons": "~32.1.23", + "@syncfusion/ej2-data": "~32.1.23", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-navigations": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-32.1.19.tgz", + "integrity": "sha512-eBPHbkQV0bAwiUJ4qvhh/6co6ElSu5oOaV/T0YlyphnedFU49vFb2CS34YhV5fuEXgq1yViIzbk1xsZTl1VHjg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.19", + "@syncfusion/ej2-data": "~32.1.19", + "@syncfusion/ej2-inputs": "~32.1.19", + "@syncfusion/ej2-lists": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-notifications": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-32.1.22.tgz", + "integrity": "sha512-4ziStaCD8tRZEyCWFfrQtzusm3d+ewW3isAq0AFmfw/LI8ye0VOTYNZxCE5Y5uMgPAol7Q6XMHQbWl72guD/Ag==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.21", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-pdf-export": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-pdf-export/-/ej2-pdf-export-32.1.19.tgz", + "integrity": "sha512-uBaydsgjN1TcLIOBJw3SFXucfqxbP9+G6oZybkP96EyZIOKms7H2WkkB+zROgmsR2krGuRyDuJfhW8+tuL6zjA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-compression": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-popups": { + "version": "32.1.19", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-32.1.19.tgz", + "integrity": "sha512-tLvUwroBP8nlnpX/TmBh9VgDckqnYAgv6weAqVYoS7KC7Osfm+FdB09I82d/448luzD9Vt5Cm51dumLLGjZ6sQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-buttons": "~32.1.19" + } + }, + "node_modules/@syncfusion/ej2-treegrid/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "32.1.22", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-32.1.22.tgz", + "integrity": "sha512-7EnT/EtmE+e2AhupROdoUNlpVHLKzW9i0GzLemlYxPmyny0M/9xEDPGs+HmM6fQ4LsP8+TGCYcjTE2Snb9F3VQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~32.1.19", + "@syncfusion/ej2-popups": "~32.1.19" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2050,24 +3102,24 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.1.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz", - "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", + "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { - "version": "19.1.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.9.tgz", - "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "dev": true, "license": "MIT", "peerDependencies": { - "@types/react": "^19.0.0" + "@types/react": "^19.2.0" } }, "node_modules/@types/react-router": { @@ -2094,21 +3146,20 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.43.0.tgz", - "integrity": "sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz", + "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/type-utils": "8.43.0", - "@typescript-eslint/utils": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/type-utils": "8.53.1", + "@typescript-eslint/utils": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2118,24 +3169,24 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.43.0", + "@typescript-eslint/parser": "^8.53.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.43.0.tgz", - "integrity": "sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz", + "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2150,15 +3201,15 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.43.0.tgz", - "integrity": "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz", + "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.43.0", - "@typescript-eslint/types": "^8.43.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.53.1", + "@typescript-eslint/types": "^8.53.1", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2172,14 +3223,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", - "integrity": "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz", + "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0" + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2190,9 +3241,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz", - "integrity": "sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz", + "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==", "dev": true, "license": "MIT", "engines": { @@ -2207,17 +3258,17 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.43.0.tgz", - "integrity": "sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz", + "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/utils": "8.43.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/utils": "8.53.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2232,9 +3283,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.43.0.tgz", - "integrity": "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz", + "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==", "dev": true, "license": "MIT", "engines": { @@ -2246,22 +3297,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", - "integrity": "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz", + "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.43.0", - "@typescript-eslint/tsconfig-utils": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/project-service": "8.53.1", + "@typescript-eslint/tsconfig-utils": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2275,16 +3325,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.43.0.tgz", - "integrity": "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz", + "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2299,13 +3349,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", - "integrity": "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz", + "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.43.0", + "@typescript-eslint/types": "8.53.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -2606,9 +3656,9 @@ "license": "MIT" }, "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", "dev": true, "funding": [ { @@ -2626,10 +3676,9 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -2660,9 +3709,9 @@ } }, "node_modules/axios": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.0.tgz", - "integrity": "sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -2676,6 +3725,16 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.15", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz", + "integrity": "sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -2699,9 +3758,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz", - "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -2720,10 +3779,11 @@ "license": "MIT", "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001737", - "electron-to-chromium": "^1.5.211", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -2742,20 +3802,23 @@ } }, "node_modules/cacheable": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.4.tgz", - "integrity": "sha512-Gd7ccIUkZ9TE2odLQVS+PDjIvQCdJKUlLdJRVvZu0aipj07Qfx+XIej7hhDrKGGoIxV5m5fT/kOJNJPQhQneRg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.2.tgz", + "integrity": "sha512-w+ZuRNmex9c1TR9RcsxbfTKCjSL0rh1WA5SABbrWprIHeNBdmyQLSYonlDy9gpD+63XT8DgZ/wNh1Smvc9WnJA==", "dev": true, "license": "MIT", "dependencies": { - "hookified": "^1.11.0", - "keyv": "^5.5.0" + "@cacheable/memory": "^2.0.7", + "@cacheable/utils": "^2.3.3", + "hookified": "^1.15.0", + "keyv": "^5.5.5", + "qified": "^0.6.0" } }, "node_modules/cacheable/node_modules/keyv": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.1.tgz", - "integrity": "sha512-eF3cHZ40bVsjdlRi/RvKAuB0+B61Q1xWvohnrJrnaQslM3h1n79IV+mc9EGag4nrA9ZOlNyr3TUzW5c8uy8vNA==", + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz", + "integrity": "sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2822,9 +3885,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001741", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz", - "integrity": "sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==", + "version": "1.0.30001765", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", + "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", "dev": true, "funding": [ { @@ -2860,9 +3923,9 @@ } }, "node_modules/cldr-data": { - "version": "36.0.4", - "resolved": "https://registry.npmjs.org/cldr-data/-/cldr-data-36.0.4.tgz", - "integrity": "sha512-uwxRy5QwNdHF9nFEJmagLVwsNJG5IXDbv1b7teKnDUakyxvRrHcpEp1fU/bTvwR365wqGCC94rXCC9YMLJIi+A==", + "version": "36.0.5", + "resolved": "https://registry.npmjs.org/cldr-data/-/cldr-data-36.0.5.tgz", + "integrity": "sha512-+SVRkiHCKQcd1Qp3XgIMrwR35TFuExw/BCeAVMmcN9wNH8gmgl+kGL2Pho8jaoNGgr9A4oNUAMJOG4cXQxr0Og==", "hasInstallScript": true, "license": [ { @@ -2872,7 +3935,7 @@ ], "dependencies": { "cldr-data-downloader": "1.1.0", - "glob": "10.3.12" + "glob": "10.5.0" } }, "node_modules/cldr-data-downloader": { @@ -2942,12 +4005,16 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", "license": "MIT", "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cosmiconfig": { @@ -3029,9 +4096,9 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, "license": "MIT" }, @@ -3090,9 +4157,9 @@ } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -3206,9 +4273,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.218", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.218.tgz", - "integrity": "sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg==", + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "dev": true, "license": "ISC" }, @@ -3229,9 +4296,9 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3239,9 +4306,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "dev": true, "license": "MIT", "dependencies": { @@ -3326,27 +4393,27 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", + "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", + "es-abstract": "^1.24.1", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", + "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", + "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", + "iterator.prototype": "^1.1.5", "safe-array-concat": "^1.1.3" }, "engines": { @@ -3412,9 +4479,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", - "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3425,32 +4492,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.9", - "@esbuild/android-arm": "0.25.9", - "@esbuild/android-arm64": "0.25.9", - "@esbuild/android-x64": "0.25.9", - "@esbuild/darwin-arm64": "0.25.9", - "@esbuild/darwin-x64": "0.25.9", - "@esbuild/freebsd-arm64": "0.25.9", - "@esbuild/freebsd-x64": "0.25.9", - "@esbuild/linux-arm": "0.25.9", - "@esbuild/linux-arm64": "0.25.9", - "@esbuild/linux-ia32": "0.25.9", - "@esbuild/linux-loong64": "0.25.9", - "@esbuild/linux-mips64el": "0.25.9", - "@esbuild/linux-ppc64": "0.25.9", - "@esbuild/linux-riscv64": "0.25.9", - "@esbuild/linux-s390x": "0.25.9", - "@esbuild/linux-x64": "0.25.9", - "@esbuild/netbsd-arm64": "0.25.9", - "@esbuild/netbsd-x64": "0.25.9", - "@esbuild/openbsd-arm64": "0.25.9", - "@esbuild/openbsd-x64": "0.25.9", - "@esbuild/openharmony-arm64": "0.25.9", - "@esbuild/sunos-x64": "0.25.9", - "@esbuild/win32-arm64": "0.25.9", - "@esbuild/win32-ia32": "0.25.9", - "@esbuild/win32-x64": "0.25.9" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/escalade": { @@ -3477,26 +4544,25 @@ } }, "node_modules/eslint": { - "version": "9.35.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.35.0.tgz", - "integrity": "sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.35.0", - "@eslint/plugin-kit": "^0.3.5", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", @@ -3556,14 +4622,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", - "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.7" + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -3633,9 +4699,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", - "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3785,9 +4851,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3916,9 +4982,9 @@ } }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { @@ -4051,9 +5117,9 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -4067,16 +5133,16 @@ } }, "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, "license": "MIT", "engines": { "node": "*" }, "funding": { - "type": "patreon", + "type": "github", "url": "https://github.com/sponsors/rawify" } }, @@ -4135,6 +5201,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4201,23 +5277,21 @@ } }, "node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -4277,9 +5351,9 @@ } }, "node_modules/globals": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", - "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", "dev": true, "license": "MIT", "engines": { @@ -4356,13 +5430,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -4442,6 +5509,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hashery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.4.0.tgz", + "integrity": "sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^1.14.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -4455,9 +5535,9 @@ } }, "node_modules/hookified": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.12.0.tgz", - "integrity": "sha512-hMr1Y9TCLshScrBbV2QxJ9BROddxZ12MX9KsCtuGGy/3SmmN5H1PllKerrVlSotur9dlE8hmUKAOSa3WDzsZmQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.0.tgz", + "integrity": "sha512-51w+ZZGt7Zw5q7rM3nC4t3aLn/xvKDETsXqMczndvwyVQhAHfUmUuFBRFcos8Iyebtk7OAE9dL26wFNzZVVOkw==", "dev": true, "license": "MIT" }, @@ -4711,14 +5791,15 @@ } }, "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -4982,16 +6063,13 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -5007,9 +6085,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -5354,9 +6432,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.20.tgz", - "integrity": "sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, @@ -5382,16 +6460,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5568,6 +6636,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5758,6 +6832,21 @@ "postcss": "^8.4.31" } }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -5776,9 +6865,9 @@ } }, "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz", + "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", "dev": true, "license": "MIT", "peer": true, @@ -5793,9 +6882,9 @@ } }, "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", "dev": true, "license": "MIT", "dependencies": { @@ -5844,6 +6933,19 @@ "teleport": ">=0.2.0" } }, + "node_modules/qified": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.6.0.tgz", + "integrity": "sha512-tsSGN1x3h569ZSU1u6diwhltLyfUWDp3YbFHedapTmpBl0B3P6U3+Qptg7xu+v+1io1EwhdPyyRHYbEw0KN2FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^1.14.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5866,9 +6968,9 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", - "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", "peer": true, "engines": { @@ -5876,16 +6978,16 @@ } }, "node_modules/react-dom": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", - "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", "peer": true, "dependencies": { - "scheduler": "^0.26.0" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.1.1" + "react": "^19.2.3" } }, "node_modules/react-is": { @@ -5906,9 +7008,9 @@ } }, "node_modules/react-router": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.2.tgz", - "integrity": "sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.12.0.tgz", + "integrity": "sha512-kTPDYPFzDVGIIGNLS5VJykK0HfHLY5MF3b+xj0/tTyNYL1gF1qs7u67Z9jEhQk2sQ98SUaHxlG31g1JtF7IfVw==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -5928,12 +7030,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.8.2.tgz", - "integrity": "sha512-Z4VM5mKDipal2jQ385H6UBhiiEDlnJPx6jyWsTYoZQdl5TrjxEV2a9yl3Fi60NBJxYzOTGTTHXPi0pdizvTwow==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.12.0.tgz", + "integrity": "sha512-pfO9fiBcpEfX4Tx+iTYKDtPbrSLLCbwJ5EqP+SPYQu1VYCXdy79GSj0wttR0U4cikVdlImZuEZ/9ZNCgoaxwBA==", "license": "MIT", "dependencies": { - "react-router": "7.8.2" + "react-router": "7.12.0" }, "engines": { "node": ">=20.0.0" @@ -6037,9 +7139,9 @@ } }, "node_modules/rollup": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz", - "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==", + "version": "4.55.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.2.tgz", + "integrity": "sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==", "dev": true, "license": "MIT", "dependencies": { @@ -6053,27 +7155,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.50.1", - "@rollup/rollup-android-arm64": "4.50.1", - "@rollup/rollup-darwin-arm64": "4.50.1", - "@rollup/rollup-darwin-x64": "4.50.1", - "@rollup/rollup-freebsd-arm64": "4.50.1", - "@rollup/rollup-freebsd-x64": "4.50.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.50.1", - "@rollup/rollup-linux-arm-musleabihf": "4.50.1", - "@rollup/rollup-linux-arm64-gnu": "4.50.1", - "@rollup/rollup-linux-arm64-musl": "4.50.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.50.1", - "@rollup/rollup-linux-ppc64-gnu": "4.50.1", - "@rollup/rollup-linux-riscv64-gnu": "4.50.1", - "@rollup/rollup-linux-riscv64-musl": "4.50.1", - "@rollup/rollup-linux-s390x-gnu": "4.50.1", - "@rollup/rollup-linux-x64-gnu": "4.50.1", - "@rollup/rollup-linux-x64-musl": "4.50.1", - "@rollup/rollup-openharmony-arm64": "4.50.1", - "@rollup/rollup-win32-arm64-msvc": "4.50.1", - "@rollup/rollup-win32-ia32-msvc": "4.50.1", - "@rollup/rollup-win32-x64-msvc": "4.50.1", + "@rollup/rollup-android-arm-eabi": "4.55.2", + "@rollup/rollup-android-arm64": "4.55.2", + "@rollup/rollup-darwin-arm64": "4.55.2", + "@rollup/rollup-darwin-x64": "4.55.2", + "@rollup/rollup-freebsd-arm64": "4.55.2", + "@rollup/rollup-freebsd-x64": "4.55.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.2", + "@rollup/rollup-linux-arm-musleabihf": "4.55.2", + "@rollup/rollup-linux-arm64-gnu": "4.55.2", + "@rollup/rollup-linux-arm64-musl": "4.55.2", + "@rollup/rollup-linux-loong64-gnu": "4.55.2", + "@rollup/rollup-linux-loong64-musl": "4.55.2", + "@rollup/rollup-linux-ppc64-gnu": "4.55.2", + "@rollup/rollup-linux-ppc64-musl": "4.55.2", + "@rollup/rollup-linux-riscv64-gnu": "4.55.2", + "@rollup/rollup-linux-riscv64-musl": "4.55.2", + "@rollup/rollup-linux-s390x-gnu": "4.55.2", + "@rollup/rollup-linux-x64-gnu": "4.55.2", + "@rollup/rollup-linux-x64-musl": "4.55.2", + "@rollup/rollup-openbsd-x64": "4.55.2", + "@rollup/rollup-openharmony-arm64": "4.55.2", + "@rollup/rollup-win32-arm64-msvc": "4.55.2", + "@rollup/rollup-win32-ia32-msvc": "4.55.2", + "@rollup/rollup-win32-x64-gnu": "4.55.2", + "@rollup/rollup-win32-x64-msvc": "4.55.2", "fsevents": "~2.3.2" } }, @@ -6157,15 +7263,15 @@ } }, "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -6176,9 +7282,9 @@ } }, "node_modules/set-cookie-parser": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", "license": "MIT" }, "node_modules/set-function-length": { @@ -6599,9 +7705,9 @@ } }, "node_modules/stylelint": { - "version": "16.24.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.24.0.tgz", - "integrity": "sha512-7ksgz3zJaSbTUGr/ujMXvLVKdDhLbGl3R/3arNudH7z88+XZZGNLMTepsY28WlnvEFcuOmUe7fg40Q3lfhOfSQ==", + "version": "16.26.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.26.1.tgz", + "integrity": "sha512-v20V59/crfc8sVTAtge0mdafI3AdnzQ2KsWe6v523L4OA1bJO02S7MO2oyXDCS6iWb9ckIPnqAFVItqSBQr7jw==", "dev": true, "funding": [ { @@ -6616,19 +7722,20 @@ "license": "MIT", "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-syntax-patches-for-csstree": "^1.0.19", "@csstools/css-tokenizer": "^3.0.4", "@csstools/media-query-list-parser": "^4.0.3", "@csstools/selector-specificity": "^5.0.0", - "@dual-bundle/import-meta-resolve": "^4.1.0", + "@dual-bundle/import-meta-resolve": "^4.2.1", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.3", "css-tree": "^3.1.0", - "debug": "^4.4.1", + "debug": "^4.4.3", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^10.1.4", + "file-entry-cache": "^11.1.1", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", @@ -6710,29 +7817,6 @@ "stylelint": "^16.18.0" } }, - "node_modules/stylelint/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, "node_modules/stylelint/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -6758,40 +7842,25 @@ "license": "MIT" }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.4.tgz", - "integrity": "sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==", + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.2.tgz", + "integrity": "sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^6.1.13" + "flat-cache": "^6.1.20" } }, "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.13.tgz", - "integrity": "sha512-gmtS2PaUjSPa4zjObEIn4WWliKyZzYljgxODBfxugpK6q6HU9ClXzgCJ+nlcPKY9Bt090ypTOLIFWkV0jbKFjw==", + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.20.tgz", + "integrity": "sha512-AhHYqwvN62NVLp4lObVXGVluiABTHapoB57EyegZVmazN+hhGhLTn3uZbOofoTw4DSDvVCadzzyChXhOAvy8uQ==", "dev": true, "license": "MIT", "dependencies": { - "cacheable": "^1.10.4", + "cacheable": "^2.3.2", "flatted": "^3.3.3", - "hookified": "^1.11.0" - } - }, - "node_modules/stylelint/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" + "hookified": "^1.15.0" } }, "node_modules/stylelint/node_modules/resolve-from": { @@ -6882,9 +7951,9 @@ "dev": true }, "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7046,9 +8115,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "dev": true, "license": "MIT", "engines": { @@ -7165,16 +8234,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.43.0.tgz", - "integrity": "sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.1.tgz", + "integrity": "sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.43.0", - "@typescript-eslint/parser": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/utils": "8.43.0" + "@typescript-eslint/eslint-plugin": "8.53.1", + "@typescript-eslint/parser": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/utils": "8.53.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7208,9 +8277,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -7256,9 +8325,9 @@ "license": "MIT" }, "node_modules/vite": { - "version": "6.3.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", - "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", "peer": true, @@ -7446,9 +8515,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, "license": "MIT", "dependencies": { diff --git a/dashboard/package.json b/dashboard/package.json index a0f7ddf..7b42724 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -10,34 +10,36 @@ "preview": "vite preview" }, "dependencies": { - "@syncfusion/ej2-base": "^30.2.0", - "@syncfusion/ej2-buttons": "^30.2.0", - "@syncfusion/ej2-calendars": "^30.2.0", - "@syncfusion/ej2-dropdowns": "^30.2.0", - "@syncfusion/ej2-grids": "^30.2.0", - "@syncfusion/ej2-icons": "^30.2.0", - "@syncfusion/ej2-inputs": "^30.2.0", - "@syncfusion/ej2-kanban": "^30.2.0", - "@syncfusion/ej2-layouts": "^30.2.0", - "@syncfusion/ej2-lists": "^30.2.0", - "@syncfusion/ej2-navigations": "^30.2.0", - "@syncfusion/ej2-notifications": "^30.2.0", - "@syncfusion/ej2-popups": "^30.2.0", - "@syncfusion/ej2-react-base": "^30.2.0", - "@syncfusion/ej2-react-buttons": "^30.2.0", - "@syncfusion/ej2-react-calendars": "^30.2.0", - "@syncfusion/ej2-react-dropdowns": "^30.2.0", - "@syncfusion/ej2-react-filemanager": "^30.2.0", - "@syncfusion/ej2-react-grids": "^30.2.0", - "@syncfusion/ej2-react-inputs": "^30.2.0", - "@syncfusion/ej2-react-kanban": "^30.2.0", - "@syncfusion/ej2-react-layouts": "^30.2.0", - "@syncfusion/ej2-react-navigations": "^30.2.0", - "@syncfusion/ej2-react-notifications": "^30.2.0", - "@syncfusion/ej2-react-popups": "^30.2.0", - "@syncfusion/ej2-react-schedule": "^30.2.0", - "@syncfusion/ej2-react-splitbuttons": "^30.2.0", - "@syncfusion/ej2-splitbuttons": "^30.2.0", + "@syncfusion/ej2-base": "^30.2.0", + "@syncfusion/ej2-buttons": "^30.2.0", + "@syncfusion/ej2-calendars": "^30.2.0", + "@syncfusion/ej2-dropdowns": "^30.2.0", + "@syncfusion/ej2-gantt": "^32.1.23", + "@syncfusion/ej2-grids": "^30.2.0", + "@syncfusion/ej2-icons": "^30.2.0", + "@syncfusion/ej2-inputs": "^30.2.0", + "@syncfusion/ej2-kanban": "^30.2.0", + "@syncfusion/ej2-layouts": "^30.2.0", + "@syncfusion/ej2-lists": "^30.2.0", + "@syncfusion/ej2-navigations": "^30.2.0", + "@syncfusion/ej2-notifications": "^30.2.0", + "@syncfusion/ej2-popups": "^30.2.0", + "@syncfusion/ej2-react-base": "^30.2.0", + "@syncfusion/ej2-react-buttons": "^30.2.0", + "@syncfusion/ej2-react-calendars": "^30.2.0", + "@syncfusion/ej2-react-dropdowns": "^30.2.0", + "@syncfusion/ej2-react-filemanager": "^30.2.0", + "@syncfusion/ej2-react-gantt": "^32.1.23", + "@syncfusion/ej2-react-grids": "^30.2.0", + "@syncfusion/ej2-react-inputs": "^30.2.0", + "@syncfusion/ej2-react-kanban": "^30.2.0", + "@syncfusion/ej2-react-layouts": "^30.2.0", + "@syncfusion/ej2-react-navigations": "^30.2.0", + "@syncfusion/ej2-react-notifications": "^30.2.0", + "@syncfusion/ej2-react-popups": "^30.2.0", + "@syncfusion/ej2-react-schedule": "^30.2.0", + "@syncfusion/ej2-react-splitbuttons": "^30.2.0", + "@syncfusion/ej2-splitbuttons": "^30.2.0", "cldr-data": "^36.0.4", "lucide-react": "^0.522.0", "react": "^19.1.0", diff --git a/dashboard/public/program-info.json b/dashboard/public/program-info.json index a2e4cc6..55bc242 100644 --- a/dashboard/public/program-info.json +++ b/dashboard/public/program-info.json @@ -1,6 +1,6 @@ { "appName": "Infoscreen-Management", - "version": "2026.1.0-alpha.13", + "version": "2026.1.0-alpha.14", "copyright": "© 2026 Third-Age-Applications", "supportContact": "support@third-age-applications.com", "description": "Eine zentrale Verwaltungsoberfläche für digitale Informationsbildschirme.", @@ -30,6 +30,17 @@ "commitId": "9f2ae8b44c3a" }, "changelog": [ + { + "version": "2026.1.0-alpha.14", + "date": "2026-01-28", + "changes": [ + "✨ UI: Neue 'Ressourcen'-Seite mit Timeline-Ansicht zeigt aktive Events für alle Raumgruppen parallel.", + "📊 Ressourcen: Kompakte Zeitachsen-Darstellung.", + "🎯 Ressourcen: Zeigt aktuell laufende Events mit Typ, Titel und Zeitfenster in Echtzeit.", + "🔄 Ressourcen: Gruppensortierung anpassbar mit visueller Reihenfolgen-Verwaltung.", + "🎨 Ressourcen: Farbcodierte Event-Balken entsprechend dem Gruppen-Theme." + ] + }, { "version": "2025.1.0-alpha.13", "date": "2025-12-29", diff --git a/dashboard/src/appointments.tsx b/dashboard/src/appointments.tsx index 10d612a..1a381bf 100644 --- a/dashboard/src/appointments.tsx +++ b/dashboard/src/appointments.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useState } from 'react'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; import { ScheduleComponent, Day, @@ -198,6 +198,17 @@ const Appointments: React.FC = () => { const [hasSchoolYearPlan, setHasSchoolYearPlan] = React.useState(false); const [periods, setPeriods] = React.useState<{ id: number; label: string }[]>([]); const [activePeriodId, setActivePeriodId] = React.useState(null); + const getWeekMonday = (date: Date): Date => { + const d = new Date(date); + const day = d.getDay(); + const diffToMonday = (day + 6) % 7; // Monday = 0 + d.setDate(d.getDate() - diffToMonday); + d.setHours(12, 0, 0, 0); // use noon to avoid TZ shifting back a day + return d; + }; + + const [selectedDate, setSelectedDate] = useState(() => getWeekMonday(new Date())); + const navigationSynced = useRef(false); // Confirmation dialog state @@ -681,6 +692,7 @@ const Appointments: React.FC = () => { change={async (e: { value: number }) => { const id = Number(e.value); if (!id) return; + if (activePeriodId === id) return; // avoid firing on initial mount try { const updated = await setActiveAcademicPeriod(id); setActivePeriodId(updated.id); @@ -692,6 +704,7 @@ const Appointments: React.FC = () => { scheduleRef.current.selectedDate = target; scheduleRef.current.dataBind?.(); } + setSelectedDate(target); updateHolidaysInView(); } catch (err) { console.error('Aktive Periode setzen fehlgeschlagen:', err); @@ -814,8 +827,6 @@ const Appointments: React.FC = () => { // The CustomEventModal already handled the API calls internally // For now, just refresh the data (the recurring event logic is handled in the modal itself) - console.log('Modal operation completed, refreshing data'); - setModalOpen(false); setEditMode(false); @@ -826,8 +837,6 @@ const Appointments: React.FC = () => { setTimeout(() => { scheduleRef.current?.refreshEvents?.(); }, 0); - - console.log('Modal save cycle completed - data refreshed'); }} initialData={modalInitialData} groupName={groups.find(g => g.id === selectedGroupId) ?? { id: selectedGroupId, name: '' }} @@ -835,10 +844,21 @@ const Appointments: React.FC = () => { editMode={editMode} // NEU: Prop für Editiermodus /> { + const inst = scheduleRef.current; + if (inst && selectedDate) { + inst.selectedDate = selectedDate; + inst.dataBind?.(); + } + }} eventSettings={{ dataSource: dataSource, fields: { @@ -857,6 +877,17 @@ const Appointments: React.FC = () => { updateHolidaysInView(); // Bei Navigation oder Viewwechsel Events erneut laden (für Range-basierte Expansion) if (args && (args.requestType === 'dateNavigate' || args.requestType === 'viewNavigate')) { + if (!navigationSynced.current) { + navigationSynced.current = true; + if (scheduleRef.current && selectedDate) { + scheduleRef.current.selectedDate = selectedDate; + scheduleRef.current.dataBind?.(); + } + return; + } + if (scheduleRef.current?.selectedDate) { + setSelectedDate(new Date(scheduleRef.current.selectedDate)); + } fetchAndSetEvents(); return; } @@ -1284,7 +1315,6 @@ const Appointments: React.FC = () => { } } }} - firstDayOfWeek={1} renderCell={(args: RenderCellEventArgs) => { // Nur für Arbeitszellen (Stunden-/Tageszellen) if (args.elementType === 'workCells') { diff --git a/dashboard/src/infoscreen_groups.tsx b/dashboard/src/infoscreen_groups.tsx index f7ea008..09056ae 100644 --- a/dashboard/src/infoscreen_groups.tsx +++ b/dashboard/src/infoscreen_groups.tsx @@ -141,6 +141,25 @@ const Infoscreen_groups: React.FC = () => { ]); setNewGroupName(''); setShowDialog(false); + + // Update group order to include the new group + try { + const orderResponse = await fetch('/api/groups/order'); + if (orderResponse.ok) { + const orderData = await orderResponse.json(); + const currentOrder = orderData.order || []; + // Add new group ID to the end if not already present + if (!currentOrder.includes(newGroup.id)) { + await fetch('/api/groups/order', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ order: [...currentOrder, newGroup.id] }), + }); + } + } + } catch (err) { + console.error('Failed to update group order:', err); + } } catch (err) { toast.show({ content: (err as Error).message, @@ -154,6 +173,10 @@ const Infoscreen_groups: React.FC = () => { // Löschen einer Gruppe const handleDeleteGroup = async (groupName: string) => { try { + // Find the group ID before deleting + const groupToDelete = groups.find(g => g.headerText === groupName); + const deletedGroupId = groupToDelete?.id; + // Clients der Gruppe in "Nicht zugeordnet" verschieben const groupClients = clients.filter(c => c.Status === groupName); if (groupClients.length > 0) { @@ -172,6 +195,27 @@ const Infoscreen_groups: React.FC = () => { timeOut: 5000, showCloseButton: false, }); + + // Update group order to remove the deleted group + if (deletedGroupId) { + try { + const orderResponse = await fetch('/api/groups/order'); + if (orderResponse.ok) { + const orderData = await orderResponse.json(); + const currentOrder = orderData.order || []; + // Remove deleted group ID from order + const updatedOrder = currentOrder.filter((id: number) => id !== deletedGroupId); + await fetch('/api/groups/order', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ order: updatedOrder }), + }); + } + } catch (err) { + console.error('Failed to update group order:', err); + } + } + // Gruppen und Clients neu laden const groupData = await fetchGroups(); const groupMap = Object.fromEntries(groupData.map((g: Group) => [g.id, g.name])); diff --git a/dashboard/src/ressourcen.css b/dashboard/src/ressourcen.css new file mode 100644 index 0000000..19d1f41 --- /dev/null +++ b/dashboard/src/ressourcen.css @@ -0,0 +1,177 @@ +/* Ressourcen - Timeline Schedule Styles */ + +.ressourcen-container { + padding: 20px; + background-color: #f5f5f5; + min-height: 100vh; +} + +.ressourcen-title { + font-size: 28px; + font-weight: 600; + margin-bottom: 20px; + color: #333; +} + +.ressourcen-controls { + display: flex; + flex-wrap: wrap; + gap: 15px; + margin-bottom: 30px; + align-items: center; + background-color: white; + padding: 15px; + border-radius: 8px; + box-shadow: 0 2px 4px rgb(0 0 0 / 10%); +} + +.ressourcen-control-group { + display: flex; + align-items: center; + gap: 10px; +} + +.ressourcen-label { + font-weight: 500; + color: #555; + white-space: nowrap; +} + +.ressourcen-button-group { + display: flex; + gap: 8px; +} + +.ressourcen-button { + border-radius: 4px !important; + font-weight: 500; +} + +/* Group Order Panel */ +.ressourcen-order-panel { + background: white; + padding: 15px; + margin-bottom: 15px; + border-radius: 8px; + box-shadow: 0 2px 4px rgb(0 0 0 / 10%); +} + +.ressourcen-order-header { + width: 100%; +} + +.ressourcen-order-list { + display: flex; + flex-direction: column; + gap: 8px; + max-height: 250px; + overflow-y: auto; + padding: 8px; + background-color: #f9f9f9; + border-radius: 4px; +} + +.ressourcen-order-item { + display: flex; + align-items: center; + gap: 12px; + padding: 8px; + background: white; + border: 1px solid #e0e0e0; + border-radius: 4px; + font-size: 13px; +} + +.ressourcen-order-position { + font-weight: 600; + color: #666; + min-width: 24px; + text-align: right; +} + +.ressourcen-order-name { + flex: 1; + color: #333; +} + +.ressourcen-order-buttons { + display: flex; + gap: 4px; +} + +.ressourcen-order-buttons .e-btn { + min-width: 32px !important; +} + +.ressourcen-loading { + text-align: center; + padding: 40px; + background-color: white; + border-radius: 8px; + box-shadow: 0 2px 4px rgb(0 0 0 / 10%); +} + +.ressourcen-loading p { + font-size: 16px; + color: #666; +} + +.ressourcen-timeline-wrapper { + background-color: white; + border-radius: 8px; + box-shadow: 0 2px 8px rgb(0 0 0 / 10%); + overflow: hidden; + display: flex; + flex-direction: column; +} + +/* Scheduler Timeline Styling */ +.e-schedule { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, + Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; +} + +.e-schedule .e-timeline-view { + border: none; +} + +.e-schedule .e-date-header { + background-color: #f9f9f9; + border-bottom: 1px solid #e0e0e0; +} + +.e-schedule .e-header-cells { + font-weight: 600; + color: #333; +} + +.ressourcen-timeline-wrapper .e-schedule { + flex: 1; + height: 100% !important; +} + +.e-schedule .e-work-cells { + background-color: #fafafa; + border-color: #f0f0f0; +} + +/* Set compact row height */ +.e-schedule .e-timeline-view .e-content-wrap table tbody tr { + height: 65px; +} + +.e-schedule .e-timeline-view .e-content-wrap .e-work-cells { + height: 65px; +} + +/* Event bar styling */ +.e-schedule .e-appointment { + border-radius: 4px; + color: white; + line-height: normal; +} + +.e-schedule .e-appointment .e-subject { + font-size: 12px; + font-weight: 500; +} diff --git a/dashboard/src/ressourcen.tsx b/dashboard/src/ressourcen.tsx index d0f687d..05490ee 100644 --- a/dashboard/src/ressourcen.tsx +++ b/dashboard/src/ressourcen.tsx @@ -1,8 +1,356 @@ -import React from 'react'; -const Ressourcen: React.FC = () => ( -
-

Ressourcen

-

Willkommen im Infoscreen-Management Ressourcen.

-
-); +import React, { useEffect, useState } from 'react'; +import { + ScheduleComponent, + ViewsDirective, + ViewDirective, + Inject, + TimelineViews, + Resize, + DragAndDrop, + ResourcesDirective, + ResourceDirective, +} from '@syncfusion/ej2-react-schedule'; +import { ButtonComponent } from '@syncfusion/ej2-react-buttons'; +import { fetchGroupsWithClients, type Group } from './apiClients'; +import { fetchEvents } from './apiEvents'; +import { getGroupColor } from './groupColors'; +import './ressourcen.css'; + +interface ScheduleEvent { + Id: number; + Subject: string; + StartTime: Date; + EndTime: Date; + ResourceId: number; + EventType?: string; +} + +type TimelineView = 'day' | 'week'; + +const Ressourcen: React.FC = () => { + const [scheduleData, setScheduleData] = useState([]); + const [groups, setGroups] = useState([]); + const [groupOrder, setGroupOrder] = useState([]); + const [showOrderPanel, setShowOrderPanel] = useState(false); + const [timelineView] = useState('day'); + const [viewDate] = useState(() => { + const now = new Date(); + now.setHours(0, 0, 0, 0); + return now; + }); + const [loading, setLoading] = useState(false); + const scheduleRef = React.useRef(null); + + // Calculate dynamic height based on number of groups + const calculatedHeight = React.useMemo(() => { + const rowHeight = 65; // px per row + const headerHeight = 100; // approx header height + const totalHeight = groups.length * rowHeight + headerHeight; + return `${totalHeight}px`; + }, [groups.length]); + + // Load groups on mount + useEffect(() => { + const loadGroups = async () => { + try { + console.log('[Ressourcen] Loading groups...'); + const fetchedGroups = await fetchGroupsWithClients(); + console.log('[Ressourcen] Fetched groups:', fetchedGroups); + // Filter out "Nicht zugeordnet" but show all other groups even if empty + const filteredGroups = fetchedGroups.filter( + (group) => group.name !== 'Nicht zugeordnet' + ); + console.log('[Ressourcen] Filtered groups:', filteredGroups); + setGroups(filteredGroups); + } catch (error) { + console.error('Fehler beim Laden der Gruppen:', error); + } + }; + loadGroups(); + }, []); + + // Helper: Parse ISO date string + const parseUTCDate = React.useCallback((dateStr: string): Date => { + const utcStr = dateStr.endsWith('Z') ? dateStr : dateStr + 'Z'; + return new Date(utcStr); + }, []); + + // Calculate date range based on view + const getDateRange = React.useCallback((): { start: Date; end: Date } => { + const start = new Date(viewDate); + start.setHours(0, 0, 0, 0); + + const end = new Date(start); + if (timelineView === 'day') { + end.setHours(23, 59, 59, 999); + } else if (timelineView === 'week') { + end.setDate(start.getDate() + 6); + end.setHours(23, 59, 59, 999); + } + return { start, end }; + }, [viewDate, timelineView]); + + // Load events for all groups + useEffect(() => { + if (groups.length === 0) { + console.log('[Ressourcen] No groups to load events for'); + setScheduleData([]); + return; + } + + const loadEventsForAllGroups = async () => { + setLoading(true); + console.log('[Ressourcen] Loading events for', groups.length, 'groups'); + try { + const { start, end } = getDateRange(); + const events: ScheduleEvent[] = []; + let eventId = 1; + + // Create events for each group + for (const group of groups) { + try { + console.log(`[Ressourcen] Fetching events for group "${group.name}" (ID: ${group.id})`); + const apiEvents = await fetchEvents(group.id.toString(), false, { + start, + end, + }); + console.log(`[Ressourcen] Got ${apiEvents?.length || 0} events for group "${group.name}"`); + + if (Array.isArray(apiEvents) && apiEvents.length > 0) { + const event = apiEvents[0]; + const eventTitle = event.subject || event.title || 'Unnamed Event'; + const eventType = event.type || event.event_type || 'other'; + const eventStart = event.startTime || event.start; + const eventEnd = event.endTime || event.end; + + if (eventStart && eventEnd) { + const parsedStart = parseUTCDate(eventStart); + const parsedEnd = parseUTCDate(eventEnd); + + // Capitalize first letter of event type + const formattedType = eventType.charAt(0).toUpperCase() + eventType.slice(1); + + events.push({ + Id: eventId++, + Subject: `${formattedType} - ${eventTitle}`, + StartTime: parsedStart, + EndTime: parsedEnd, + ResourceId: group.id, + EventType: eventType, + }); + console.log(`[Ressourcen] Group "${group.name}" has event: ${eventTitle}`); + } + } + } catch (error) { + console.error(`Fehler beim Laden von Ereignissen für Gruppe ${group.name}:`, error); + } + } + + console.log('[Ressourcen] Final events:', events); + setScheduleData(events); + } finally { + setLoading(false); + } + }; + + loadEventsForAllGroups(); + }, [groups, timelineView, viewDate, parseUTCDate, getDateRange]); + + // Load saved group order from backend on mount + useEffect(() => { + const loadGroupOrder = async () => { + try { + console.log('[Ressourcen] Loading saved group order from backend...'); + const response = await fetch('/api/groups/order'); + if (response.ok) { + const data = await response.json(); + console.log('[Ressourcen] Retrieved group order:', data); + if (data.order && Array.isArray(data.order)) { + // Filter order to only include IDs that exist in current groups + const existingGroupIds = groups.map(g => g.id); + const validOrder = data.order.filter((id: number) => existingGroupIds.includes(id)); + + // Add any missing group IDs that aren't in the saved order + const missingIds = existingGroupIds.filter(id => !validOrder.includes(id)); + const finalOrder = [...validOrder, ...missingIds]; + + console.log('[Ressourcen] Synced order:', finalOrder); + setGroupOrder(finalOrder); + } else { + // No saved order, use default (current group order) + setGroupOrder(groups.map(g => g.id)); + } + } else { + console.log('[Ressourcen] No saved order found, using default'); + setGroupOrder(groups.map(g => g.id)); + } + } catch (error) { + console.error('[Ressourcen] Error loading group order:', error); + // Fall back to default order + setGroupOrder(groups.map(g => g.id)); + } + }; + + if (groups.length > 0 && groupOrder.length === 0) { + loadGroupOrder(); + } + }, [groups, groupOrder.length]); + + // Move group up in order + const moveGroupUp = (groupId: number) => { + const index = groupOrder.indexOf(groupId); + if (index > 0) { + const newOrder = [...groupOrder]; + [newOrder[index - 1], newOrder[index]] = [newOrder[index], newOrder[index - 1]]; + setGroupOrder(newOrder); + } + }; + + // Move group down in order + const moveGroupDown = (groupId: number) => { + const index = groupOrder.indexOf(groupId); + if (index < groupOrder.length - 1) { + const newOrder = [...groupOrder]; + [newOrder[index], newOrder[index + 1]] = [newOrder[index + 1], newOrder[index]]; + setGroupOrder(newOrder); + } + }; + + // Save group order to backend + const saveGroupOrder = async () => { + try { + console.log('[Ressourcen] Saving group order:', groupOrder); + const response = await fetch('/api/groups/order', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ order: groupOrder }), + }); + if (!response.ok) throw new Error('Failed to save group order'); + console.log('[Ressourcen] Group order saved successfully'); + } catch (error) { + console.error('Fehler beim Speichern der Reihenfolge:', error); + } + }; + + // Get sorted groups based on current order + const sortedGroups = React.useMemo(() => { + if (groupOrder.length === 0) return groups; + + // Map order to actual groups + const ordered = groupOrder + .map(id => groups.find(g => g.id === id)) + .filter((g): g is Group => g !== undefined); + + // Add any groups not in the order (new groups) + const orderedIds = new Set(ordered.map(g => g.id)); + const unordered = groups.filter(g => !orderedIds.has(g.id)); + + return [...ordered, ...unordered]; + }, [groups, groupOrder]); + + return ( +
+

📊 Ressourcen - Übersicht

+ +
+ setShowOrderPanel(!showOrderPanel)} + > + {showOrderPanel ? '✓ Reihenfolge' : 'Reihenfolge ändern'} + +
+ + {/* Group Order Control Panel */} + {showOrderPanel && ( +
+
+

+ 📋 Reihenfolge der Gruppen +

+
+ {sortedGroups.map((group, index) => ( +
+ {index + 1}. + {group.name} +
+ moveGroupUp(group.id)} + disabled={index === 0} + title="Nach oben" + style={{ padding: '4px 8px', minWidth: '32px' }} + > + ↑ + + moveGroupDown(group.id)} + disabled={index === sortedGroups.length - 1} + title="Nach unten" + style={{ padding: '4px 8px', minWidth: '32px' }} + > + ↓ + +
+
+ ))} +
+ + 💾 Reihenfolge speichern + +
+
+ )} + + {/* Timeline Schedule */} + {loading ? ( +
+

Wird geladen...

+
+ ) : ( +
+ + + + + + + ({ + text: g.name, + id: g.id, + color: getGroupColor(g.id.toString(), groups.map(grp => ({ id: grp.id.toString() }))), + }))} + textField="text" + idField="id" + colorField="color" + /> + + + +
+ )} +
+ ); +}; + export default Ressourcen; diff --git a/dashboard/src/users.tsx b/dashboard/src/users.tsx index 2f281bc..398acdb 100644 --- a/dashboard/src/users.tsx +++ b/dashboard/src/users.tsx @@ -9,8 +9,6 @@ import { Toolbar, Edit, CommandColumn, - type EditSettingsModel, - type CommandModel, } from '@syncfusion/ej2-react-grids'; import { ButtonComponent } from '@syncfusion/ej2-react-buttons'; import { DialogComponent } from '@syncfusion/ej2-react-popups'; diff --git a/server/init_defaults.py b/server/init_defaults.py index 0dad2b6..7be8eb8 100644 --- a/server/init_defaults.py +++ b/server/init_defaults.py @@ -68,6 +68,7 @@ with engine.connect() as conn: ('holiday_banner_enabled', 'true', 'Ferienstatus-Banner auf Dashboard anzeigen'), ('organization_name', '', 'Name der Organisation (wird im Header angezeigt)'), ('refresh_seconds', '0', 'Scheduler Republish-Intervall (Sekunden; 0 deaktiviert)'), + ('group_order', '[]', 'Benutzerdefinierte Reihenfolge der Raumgruppen (JSON-Array mit Group-IDs)'), ] for key, value, description in default_settings: diff --git a/server/routes/groups.py b/server/routes/groups.py index a2b1732..39a1035 100644 --- a/server/routes/groups.py +++ b/server/routes/groups.py @@ -208,3 +208,55 @@ def get_groups_with_clients(): }) session.close() return jsonify(result) + + +@groups_bp.route("/order", methods=["GET"]) +def get_group_order(): + """Retrieve the saved group order from system settings.""" + from models.models import SystemSetting + session = Session() + try: + setting = session.query(SystemSetting).filter_by(key='group_order').first() + if setting and setting.value: + import json + order = json.loads(setting.value) + return jsonify({"order": order}) + return jsonify({"order": None}) + except Exception as e: + print(f"Error loading group order: {e}") + return jsonify({"order": None}) + finally: + session.close() + + +@groups_bp.route("/order", methods=["POST"]) +@require_role('admin') +def save_group_order(): + """Save the custom group order to system settings.""" + from models.models import SystemSetting + session = Session() + try: + data = request.get_json() + order = data.get('order') + + if not order or not isinstance(order, list): + return jsonify({"success": False, "error": "Invalid order data"}), 400 + + import json + order_json = json.dumps(order) + + setting = session.query(SystemSetting).filter_by(key='group_order').first() + if setting: + setting.value = order_json + else: + setting = SystemSetting(key='group_order', value=order_json) + session.add(setting) + + session.commit() + return jsonify({"success": True}) + except Exception as e: + session.rollback() + print(f"Error saving group order: {e}") + return jsonify({"success": False, "error": str(e)}), 500 + finally: + session.close()