diff --git a/.cursor/plans/implement_rbac_roles_page_8dd9fac6.plan.md b/.cursor/plans/implement_rbac_roles_page_8dd9fac6.plan.md new file mode 100644 index 0000000..4828679 --- /dev/null +++ b/.cursor/plans/implement_rbac_roles_page_8dd9fac6.plan.md @@ -0,0 +1,144 @@ +# Implement RBAC Roles Page + +## Overview +Implement the RBAC roles admin page following the exact pattern used in `mandates.ts`. This includes creating the API file, custom hook for state management, updating the page configuration with CreateButton header button, and adding translations in all three languages (German, English, French). + +## Files to Create/Modify + +### 1. Create API File: `frontend_nyla/src/api/roleApi.ts` + - Follow the pattern from `mandateApi.ts` + - Implement all required endpoints: + - `fetchRoles()` - GET /api/rbac/roles (with pagination support) + - `fetchRoleById()` - GET /api/rbac/roles/{roleId} + - `fetchRoleOptions()` - GET /api/rbac/roles/options + - `createRole()` - POST /api/rbac/roles + - `updateRole()` - PUT /api/rbac/roles/{roleId} + - `deleteRole()` - DELETE /api/rbac/roles/{roleId} + - Include TypeScript types: `Role`, `RoleUpdateData`, `PaginationParams`, `PaginatedResponse` + +### 2. Create Hook: `frontend_nyla/src/hooks/useAdminRbacRoles.ts` + - Follow the exact pattern from `useAdminMandates.ts` + - Create two hooks: + - `useRbacRoles()` - Main hook for data fetching and state management + - Fetch roles with pagination support + - Fetch attributes from `/api/attributes/Role` using `fetchAttributes(request, 'Role')` + - Fetch permissions using `checkPermission('DATA', 'Role')` + - Implement `generateEditFieldsFromAttributes()` using `attributeTypeMapper` utilities + - Implement `generateCreateFieldsFromAttributes()` using `attributeTypeMapper` utilities + - Implement `ensureAttributesLoaded()` for EditActionButton + - Implement optimistic updates (`removeOptimistically`, `updateOptimistically`) + - Return pagination info, attributes, permissions, and all required functions + - `useRbacRoleOperations()` - Operations hook for CRUD + - `handleRoleDelete()` - Delete with loading state tracking + - `handleRoleCreate()` - Create with error handling + - `handleRoleUpdate()` - Update with error handling + - Track loading states in Sets (deletingRoles, editingRoles, creatingRole) + - Return error states (deleteError, createError, updateError) + +### 3. Update Page Configuration: `frontend_nyla/src/core/PageManager/data/pages/admin/rbac-role.ts` + - Follow the exact structure from `mandates.ts` + - Import `FaPlus` from `react-icons/fa` for the create button icon + - Create `createRbacRolesHook()` factory function that: + - Uses `useRbacRoles()` and `useRbacRoleOperations()` + - Converts attributes to columns using `attributesToColumns()` helper + - Implements `handleDeleteSingle` and `handleDeleteMultiple` callbacks + - Returns all required data for FormGeneratorTable + - Update `rbacRolePageData`: + - Add header button with `FaPlus` icon for creating roles (following mandates.ts pattern): + ```typescript + headerButtons: [ + { + id: 'add-role', + label: 'admin.rbac-role.new_button', + variant: 'primary', + size: 'md', + icon: FaPlus, + formConfig: { + fields: [], // Empty array - fields will be generated dynamically from attributes + popupTitle: 'admin.rbac-role.modal.create.title', + popupSize: 'medium', + createOperationName: 'handleRoleCreate', + successMessage: 'admin.rbac-role.create.success', + errorMessage: 'admin.rbac-role.create.error' + } + } + ] + ``` + - Add table content section with: + - `hookFactory: createRbacRolesHook` + - Action buttons: edit and delete (following mandates pattern) + - Configure edit button with `fetchItemFunctionName: 'fetchRoleById'` + - Configure delete button with proper operation names + - Add permission-based disabled logic + - Keep existing privilege checker (sysadmin only) + +### 4. Update Translations: All three locale files + - **German (`frontend_nyla/src/locales/de.ts`)**: Add missing translations after line 756: + - `'admin.rbac-role.new_button': 'Rolle hinzufügen'` + - `'admin.rbac-role.action.edit': 'Bearbeiten'` + - `'admin.rbac-role.action.delete': 'Löschen'` + - `'admin.rbac-role.modal.create.title': 'Neue Rolle erstellen'` + - `'admin.rbac-role.create.success': 'Rolle erfolgreich erstellt'` + - `'admin.rbac-role.create.error': 'Fehler beim Erstellen der Rolle'` + + - **English (`frontend_nyla/src/locales/en.ts`)**: Add missing translations after line 756: + - `'admin.rbac-role.new_button': 'Add Role'` + - `'admin.rbac-role.action.edit': 'Edit'` + - `'admin.rbac-role.action.delete': 'Delete'` + - `'admin.rbac-role.modal.create.title': 'Create New Role'` + - `'admin.rbac-role.create.success': 'Role created successfully'` + - `'admin.rbac-role.create.error': 'Error creating role'` + + - **French (`frontend_nyla/src/locales/fr.ts`)**: Add missing translations after line 756: + - `'admin.rbac-role.new_button': 'Ajouter un rôle'` + - `'admin.rbac-role.action.edit': 'Modifier'` + - `'admin.rbac-role.action.delete': 'Supprimer'` + - `'admin.rbac-role.modal.create.title': 'Créer un nouveau rôle'` + - `'admin.rbac-role.create.success': 'Rôle créé avec succès'` + - `'admin.rbac-role.create.error': 'Erreur lors de la création du rôle'` + +## Implementation Details + +### API File Structure +- Use `ApiRequestFunction` type from `useApi` +- Support pagination parameters (page, pageSize, sort, filters, search) +- Handle both paginated and non-paginated responses +- Use `/api/rbac/roles` as base URL +- Use `/api/attributes/Role` for attributes endpoint + +### Hook Pattern +- Use `useApiRequest` hook for API calls +- Use `usePermissions` hook for permission checking +- Use `getUserDataCache()` to check authentication before fetching +- Implement attribute type mapping using utilities from `attributeTypeMapper.ts`: + - `isCheckboxType()`, `isSelectType()`, `isMultiselectType()`, `isDateTimeType()`, `isTextareaType()` +- Filter out non-editable fields (id, readonly fields, etc.) +- Handle options arrays and option references + +### Page Configuration Pattern +- Use `attributesToColumns()` helper to convert attributes to column config +- Disable filtering for date/timestamp fields using `isDateTimeType()` +- Configure action buttons with proper field mappings and operation names +- Use permission-based disabled logic for buttons +- Set `entityType: 'Role'` for EditActionButton +- Add header button using CreateButton component pattern (via formConfig in headerButtons) + +## Key Dependencies +- `useApiRequest` from `hooks/useApi` +- `usePermissions` from `hooks/usePermissions` +- `fetchAttributes` from `api/attributesApi` +- `attributeTypeMapper` utilities from `utils/attributeTypeMapper` +- `FormGeneratorTable` component +- `EditActionButton` and `DeleteActionButton` components +- `CreateButton` component (rendered via PageRenderer from headerButtons formConfig) +- `FaPlus` icon from `react-icons/fa` + +## Testing Considerations +- Verify all API endpoints are called correctly +- Ensure attributes are fetched from `/api/attributes/Role` +- Verify permission checks work correctly +- Test create, edit, delete operations +- Verify optimistic updates work +- Check that date/timestamp fields are not filterable +- Verify CreateButton appears in header and opens create modal +- Verify translations work in all three languages diff --git a/.github/workflows/poweron_nyla_int.yml b/.github/workflows/poweron_nyla_int.yml new file mode 100644 index 0000000..f2e8030 --- /dev/null +++ b/.github/workflows/poweron_nyla_int.yml @@ -0,0 +1,71 @@ +name: Deploy Nyla Frontend to Integration + +on: + push: + branches: + - int + workflow_dispatch: + +# Cancel in-progress runs when a new run is triggered (saves logs/storage) +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v5 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '20' + cache: 'npm' + + - name: Copy integration environment file + run: | + cp config/env-poweron-nyla-int.env .env + + - name: Install dependencies + run: | + npm ci + npm install express + + - name: Build React app for integration + run: npm run build:int + + - name: Prepare deployment package + run: | + # Create deployment package with build files and necessary configs + mkdir deploy + cp -r dist/* deploy/ + # Create a simple server.js for serving the app + echo "const express = require('express');" > deploy/server.js + echo "const path = require('path');" >> deploy/server.js + echo "const app = express();" >> deploy/server.js + echo "app.use(express.static(path.join(__dirname)));" >> deploy/server.js + echo "app.get('/*', function(req, res) { res.sendFile(path.join(__dirname, 'index.html')); });" >> deploy/server.js + echo "const port = process.env.PORT || 8080;" >> deploy/server.js + echo "app.listen(port, () => console.log('Server running on port', port));" >> deploy/server.js + # Create a new package.json for deployment + echo '{ + "name": "frontend-int", + "version": "1.0.0", + "private": true, + "scripts": { + "start": "node server.js" + }, + "dependencies": { + "express": "^4.18.2" + } + }' > deploy/package.json + + - name: 'Deploy to Azure Web App' + uses: azure/webapps-deploy@v3 + with: + app-name: 'poweron-nyla-int' + publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_POWERON_NYLA_INT }} + package: ./deploy \ No newline at end of file diff --git a/.github/workflows/poweron_nyla_main.yml b/.github/workflows/poweron_nyla_main.yml new file mode 100644 index 0000000..109069f --- /dev/null +++ b/.github/workflows/poweron_nyla_main.yml @@ -0,0 +1,71 @@ +name: Deploy Nyla Frontend to Production + +on: + push: + branches: + - main + workflow_dispatch: + +# Cancel in-progress runs when a new run is triggered (saves logs/storage) +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v5 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '20' + cache: 'npm' + + - name: Copy production environment file + run: | + cp config/env-poweron-nyla-prod.env .env + + - name: Install dependencies + run: | + npm ci + npm install express + + - name: Build React app for production + run: npm run build:prod + + - name: Prepare deployment package + run: | + # Create deployment package with build files and necessary configs + mkdir deploy + cp -r dist/* deploy/ + # Create a simple server.js for serving the app + echo "const express = require('express');" > deploy/server.js + echo "const path = require('path');" >> deploy/server.js + echo "const app = express();" >> deploy/server.js + echo "app.use(express.static(path.join(__dirname)));" >> deploy/server.js + echo "app.get('/*', function(req, res) { res.sendFile(path.join(__dirname, 'index.html')); });" >> deploy/server.js + echo "const port = process.env.PORT || 8080;" >> deploy/server.js + echo "app.listen(port, () => console.log('Server running on port', port));" >> deploy/server.js + # Create a new package.json for deployment + echo '{ + "name": "frontend", + "version": "1.0.0", + "private": true, + "scripts": { + "start": "node server.js" + }, + "dependencies": { + "express": "^4.18.2" + } + }' > deploy/package.json + + - name: 'Deploy to Azure Web App' + uses: azure/webapps-deploy@v3 + with: + app-name: 'poweron-nyla' + publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_POWERON_NYLA }} + package: ./deploy diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b7aac00 --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Environment files +.env +.env.local +.env.*.local + +.cursorignore + +# Keep environment files in config/ (naming: env-.env) +!config/env-*.env \ No newline at end of file diff --git a/README copy.md b/README copy.md new file mode 100644 index 0000000..f792e3a --- /dev/null +++ b/README copy.md @@ -0,0 +1,214 @@ +# PowerOn Nyla Frontend + +## 🏗️ Project Architecture + +```mermaid +graph TB + %% Environment Files + ENV_DEV["env-poweron-nyla-dev.env
Development"] + ENV_PROD["env-poweron-nyla-prod.env
Production"] + ENV_INT["env-poweron-nyla-int.env
Integration"] + + %% Configuration System + CONFIG_TS["config.ts
TypeScript Config
(React Frontend)"] + CONFIG_JS["serverConfig.js
JavaScript Config
(Node.js Servers)"] + + %% Source Code + SRC["src/
React Components"] + PUBLIC["public/
Static Assets"] + HTML["index.html
Main Template"] + + %% Build Process + VITE["vite.config.ts
Build Configuration"] + PACKAGE["package.json
Dependencies & Scripts"] + TSCONFIG["tsconfig.json
TypeScript Config"] + + %% Build Output + DIST["dist/
Built Application"] + + %% Servers + SERVER_DEV["server.js
Dev Server"] + SERVER_DEPLOY["deploy-server.js
Deploy Server"] + SERVER_LEGACY["server.js
Legacy Server"] + + %% Deployment + GITHUB[".github/workflows/
GitHub Actions"] + AZURE["Azure Static Web Apps"] + STATIC_CONFIG["staticwebapp.config.json
Azure Config"] + + %% Environment Flow + ENV_DEV --> CONFIG_TS + ENV_PROD --> CONFIG_TS + ENV_INT --> CONFIG_TS + + ENV_DEV --> CONFIG_JS + ENV_PROD --> CONFIG_JS + ENV_INT --> CONFIG_JS + + %% Configuration Usage + CONFIG_TS --> SRC + CONFIG_JS --> SERVER_DEV + CONFIG_JS --> SERVER_DEPLOY + CONFIG_JS --> SERVER_LEGACY + + %% Build Process + SRC --> VITE + PUBLIC --> VITE + HTML --> VITE + PACKAGE --> VITE + TSCONFIG --> VITE + CONFIG_TS --> VITE + + VITE --> DIST + + %% Server Usage + DIST --> SERVER_DEV + DIST --> SERVER_DEPLOY + DIST --> SERVER_LEGACY + + %% Deployment Flow + GITHUB --> ENV_PROD + GITHUB --> ENV_INT + GITHUB --> DIST + GITHUB --> SERVER_DEPLOY + GITHUB --> AZURE + + STATIC_CONFIG --> AZURE + + %% Styling + classDef envFile fill:black,stroke:#01579b,stroke-width:2px + classDef configFile fill:black,stroke:#4a148c,stroke-width:2px + classDef sourceFile fill:black,stroke:#1b5e20,stroke-width:2px + classDef buildFile fill:black,stroke:#e65100,stroke-width:2px + classDef serverFile fill:black,stroke:#880e4f,stroke-width:2px + classDef deployFile fill:black,stroke:#33691e,stroke-width:2px + + class ENV_DEV,ENV_PROD,ENV_INT envFile + class CONFIG_TS,CONFIG_JS configFile + class SRC,PUBLIC,HTML sourceFile + class VITE,PACKAGE,TSCONFIG,DIST buildFile + class SERVER_DEV,SERVER_DEPLOY,SERVER_LEGACY serverFile + class GITHUB,AZURE,STATIC_CONFIG deployFile +``` + +### Flow Overview: +1. **Environment files** → **Configuration system** → **Source code** +2. **Source code** → **Build process** → **Built application** +3. **Built application** → **Servers** → **Deployment** +4. **GitHub Actions** → **Azure Static Web Apps** + + +## 🔧 Configuration Setup + +The app uses a **dual configuration system** to handle environment variables across different contexts: + +### Configuration Files +- **`config/config.ts`** - TypeScript config for React frontend + - **Why:** Provides type-safe access to environment variables in the browser + - **How:** Uses `import.meta.env` (Vite's environment API) to access `VITE_*` variables + - **Used by:** All React components, hooks, and frontend logic + +- **`config/serverConfig.js`** - JavaScript config for Node.js servers + - **Why:** Node.js can't access `import.meta.env`, needs `process.env` + - **How:** Uses `dotenv` to load `.env` files and `process.env` to access variables + - **Used by:** Express servers and build scripts + +### Environment Files + +Naming convention: `env-.env` — matches the GitHub Actions workflow that uses it. + +- **`config/env-poweron-nyla-dev.env`** — Local development (localhost gateway) +- **`config/env-poweron-nyla-int.env`** — Integration (used by `poweron_nyla_int` workflow) +- **`config/env-poweron-nyla-prod.env`** — Production (used by `poweron_nyla_main` workflow) + +Each env is copied to root `.env` at build time (by CI or manually for local dev). + +### Usage +```bash +# Local development — copy env then start Vite +cp config/env-poweron-nyla-dev.env .env +npm run dev + +# Production build (CI copies env-poweron-nyla-prod.env → .env) +npm run build:prod + +# Integration build (CI copies env-poweron-nyla-int.env → .env) +npm run build:int +``` + +## 🖥️ Server Files + +- **`scripts/server.js`** - Express server for local development + - **Why:** Serves the built React app locally for testing + - **How:** Serves static files from `dist/` directory on port 3000 + - **Used by:** Developers running `npm run dev` or manual testing + +- **`scripts/deploy-server.js`** - Express server for deployment + - **Why:** Production server that serves the built app in cloud environments + - **How:** Serves static files and handles routing for SPA (Single Page Application) + - **Used by:** Azure Static Web Apps and other deployment platforms + +- **`server.js`** - Legacy server (kept for compatibility) + - **Why:** Backup server file in case deployment scripts need it + - **How:** Basic Express server setup + - **Used by:** Fallback option for deployments + +Both servers use `config/serverConfig.js` for environment variables and logging. + +## 📁 Root Directory Files + +### Core Application Files +- **`package.json`** - Node.js project configuration + - **Why:** Defines dependencies, scripts, and project metadata + - **How:** Used by npm/yarn to install packages and run scripts + - **Contains:** Dependencies, build scripts, project info + +- **`vite.config.ts`** - Vite build tool configuration + - **Why:** Configures how Vite builds and serves the React app + - **How:** Defines plugins, build options, and environment variable handling + - **Contains:** React plugin, HTML plugin, environment loading, build settings + +- **`tsconfig.json`** - TypeScript compiler configuration + - **Why:** Defines TypeScript compilation rules and target settings + - **How:** Used by TypeScript compiler and IDE for type checking + - **Contains:** Compiler options, file includes/excludes, module resolution + +- **`index.html`** - Main HTML template + - **Why:** Entry point for the React application + - **How:** Vite injects the built JavaScript and CSS into this template + - **Contains:** HTML structure, dynamic title injection, script tags + +### Build and Deployment + +- **`staticwebapp.config.json`** - Azure Static Web Apps configuration + - **Why:** Configures routing and MIME types for Azure deployment + - **How:** Used by Azure Static Web Apps service + - **Contains:** Navigation fallback rules, MIME type mappings + +### Source Code and Assets +- **`src/`** - Source code directory + - **Why:** Contains all React components, hooks, and application logic + - **How:** Vite processes these files during build + - **Contains:** Components, pages, hooks, contexts, locales, assets + +- **`public/`** - Static assets + - **Why:** Files that should be copied directly to build output + - **How:** Vite copies these files to `dist/` during build + - **Contains:** Images, logos, favicons, other static files + +### Configuration and Scripts +- **`config/`** - Configuration files directory + - **Why:** Centralizes all configuration and environment files + - **How:** Contains environment files and config modules + - **Contains:** Environment files, config.ts, serverConfig.js + +- **`scripts/`** - Server scripts directory + - **Why:** Separates server-related files from main application code + - **How:** Contains Express server implementations + - **Contains:** server.js, deploy-server.js + +### CI/CD +- **`.github/workflows/`** - GitHub Actions workflows + - **Why:** Automates deployment to different environments + - **How:** Triggers on git pushes and deploys to Azure + - **Contains:** YAML files for dev, int, and prod deployments diff --git a/Untitled b/Untitled new file mode 100644 index 0000000..2f259b7 --- /dev/null +++ b/Untitled @@ -0,0 +1 @@ +s \ No newline at end of file diff --git a/config/config.ts b/config/config.ts new file mode 100644 index 0000000..21a7472 --- /dev/null +++ b/config/config.ts @@ -0,0 +1,178 @@ +/** + * Simple Configuration Service + * Centralized access to environment variables with fallbacks + */ + +// API Configuration +export const getApiBaseUrl = (): string => { + return import.meta.env.VITE_API_BASE_URL || 'http://localhost:8000'; +}; + +export const getApiTimeout = (): number => { + return parseInt(import.meta.env.VITE_API_TIMEOUT || '10000'); +}; + +// App Configuration +export const getAppName = (): string => { + return import.meta.env.VITE_APP_NAME || 'PowerOn'; +}; + +export const getAppVersion = (): string => { + return import.meta.env.VITE_APP_VERSION || '0.0.0'; +}; + +export const getAppEnvironment = (): string => { + return import.meta.env.VITE_APP_ENVIRONMENT || 'dev'; +}; + +// Environment Detection +export const isDevelopment = (): boolean => { + return import.meta.env.MODE === 'development' || getAppEnvironment() === 'dev'; +}; + +export const isProduction = (): boolean => { + return import.meta.env.MODE === 'production' || getAppEnvironment() === 'prod'; +}; + +export const isIntegration = (): boolean => { + return getAppEnvironment() === 'int'; +}; + +// Debug Configuration +export const isDebugMode = (): boolean => { + return import.meta.env.VITE_DEBUG === 'true'; +}; + +export const getLogLevel = (): string => { + return import.meta.env.VITE_LOG_LEVEL || 'info'; +}; + +export const isConsoleLogsEnabled = (): boolean => { + return import.meta.env.VITE_ENABLE_CONSOLE_LOGS === 'true'; +}; + +// Microsoft Authentication +export const getMicrosoftClientId = (): string | undefined => { + return import.meta.env.VITE_MICROSOFT_CLIENT_ID; +}; + +export const getMicrosoftTenantId = (): string | undefined => { + return import.meta.env.VITE_MICROSOFT_TENANT_ID; +}; + +export const getEntraClientSecret = (): string | undefined => { + return import.meta.env.VITE_ENTRA_CLIENT_SECRET; +}; + +export const getEntraAuthority = (): string | undefined => { + return import.meta.env.VITE_ENTRA_AUTHORITY; +}; + +export const getEntraRedirectPath = (): string | undefined => { + return import.meta.env.VITE_ENTRA_REDIRECT_PATH; +}; + +export const getEntraRedirectUri = (): string | undefined => { + return import.meta.env.VITE_ENTRA_REDIRECT_URI; +}; + +// Feature Flags (if needed in the future) +export const isFeatureEnabled = (feature: string): boolean => { + const envKey = `VITE_ENABLE_${feature.toUpperCase()}`; + return import.meta.env[envKey] === 'true'; +}; + +// Analytics and Monitoring +export const isAnalyticsEnabled = (): boolean => { + return import.meta.env.VITE_ENABLE_ANALYTICS === 'true'; +}; + +export const isErrorReportingEnabled = (): boolean => { + return import.meta.env.VITE_ENABLE_ERROR_REPORTING === 'true'; +}; + +export const isPerformanceMonitoringEnabled = (): boolean => { + return import.meta.env.VITE_ENABLE_PERFORMANCE_MONITORING === 'true'; +}; + +// Development Server (for dev environment) +export const getDevServerPort = (): number => { + return parseInt(import.meta.env.VITE_DEV_SERVER_PORT || '5176'); +}; + +export const getDevServerHost = (): string => { + return import.meta.env.VITE_DEV_SERVER_HOST || 'localhost'; +}; + +export const isDevServerHttps = (): boolean => { + return import.meta.env.VITE_DEV_SERVER_HTTPS === 'true'; +}; + +// Security Configuration +export const isHttpsEnabled = (): boolean => { + return import.meta.env.VITE_ENABLE_HTTPS === 'true'; +}; + +export const isCspEnabled = (): boolean => { + return import.meta.env.VITE_ENABLE_CSP === 'true'; +}; + +// Test Configuration +export const isMockDataEnabled = (): boolean => { + return import.meta.env.VITE_ENABLE_MOCK_DATA === 'true'; +}; + +export const isTestMode = (): boolean => { + return import.meta.env.VITE_ENABLE_TEST_MODE === 'true'; +}; + +// Convenience object for easy destructuring +export const config = { + // API + getApiBaseUrl, + getApiTimeout, + + // App + getAppName, + getAppVersion, + getAppEnvironment, + + // Environment + isDevelopment, + isProduction, + isIntegration, + + // Debug + isDebugMode, + getLogLevel, + isConsoleLogsEnabled, + + // Microsoft Auth + getMicrosoftClientId, + getMicrosoftTenantId, + getEntraClientSecret, + getEntraAuthority, + getEntraRedirectPath, + getEntraRedirectUri, + + // Features + isFeatureEnabled, + + // Analytics + isAnalyticsEnabled, + isErrorReportingEnabled, + isPerformanceMonitoringEnabled, + + // Dev Server + getDevServerPort, + getDevServerHost, + isDevServerHttps, + + // Security + isHttpsEnabled, + isCspEnabled, + + // Test + isMockDataEnabled, + isTestMode, +}; diff --git a/config/env-poweron-nyla-dev.env b/config/env-poweron-nyla-dev.env new file mode 100644 index 0000000..a66d513 --- /dev/null +++ b/config/env-poweron-nyla-dev.env @@ -0,0 +1,6 @@ +# Environment: poweron-nyla-dev (local development) +# Consumed by: Vite build (title) + SPA runtime (getApiBaseUrl / getAppName) +# Auth and secrets live on the gateway — never in frontend env. + +VITE_API_BASE_URL="http://localhost:8000/" +VITE_APP_NAME=PowerOn Nyla dev diff --git a/config/env-poweron-nyla-int.env b/config/env-poweron-nyla-int.env new file mode 100644 index 0000000..6655d68 --- /dev/null +++ b/config/env-poweron-nyla-int.env @@ -0,0 +1,6 @@ +# Environment: poweron-nyla-int (integration) +# Consumed by: Vite build (title) + SPA runtime (getApiBaseUrl / getAppName) +# Auth and secrets live on the gateway — never in frontend env. + +VITE_API_BASE_URL=https://gateway-int.poweron.swiss +VITE_APP_NAME=Poweron Nyla int diff --git a/config/env-poweron-nyla-prod.env b/config/env-poweron-nyla-prod.env new file mode 100644 index 0000000..7c3adff --- /dev/null +++ b/config/env-poweron-nyla-prod.env @@ -0,0 +1,6 @@ +# Environment: poweron-nyla-prod (production) +# Consumed by: Vite build (title) + SPA runtime (getApiBaseUrl / getAppName) +# Auth and secrets live on the gateway — never in frontend env. + +VITE_API_BASE_URL=https://gateway-prod.poweron.swiss +VITE_APP_NAME=PowerOn Nyla diff --git a/config/index.ts b/config/index.ts new file mode 100644 index 0000000..ac50c32 --- /dev/null +++ b/config/index.ts @@ -0,0 +1,12 @@ +// Export simple configuration service +export * from './config'; + +// Re-export commonly used functions +export { + getApiBaseUrl, + getAppName, + isDevelopment, + isProduction, + isDebugMode, + config +} from './config'; diff --git a/config/serverConfig.js b/config/serverConfig.js new file mode 100644 index 0000000..7dad682 --- /dev/null +++ b/config/serverConfig.js @@ -0,0 +1,191 @@ +/** + * Server Configuration Service + * Node.js compatible configuration for server files + */ + +// API Configuration +export const getApiBaseUrl = () => { + return process.env.VITE_API_BASE_URL || 'http://localhost:8000'; +}; + +export const getApiTimeout = () => { + return parseInt(process.env.VITE_API_TIMEOUT || '10000'); +}; + +// App Configuration +export const getAppName = () => { + return process.env.VITE_APP_NAME || 'PowerOn'; +}; + +export const getAppVersion = () => { + return process.env.VITE_APP_VERSION || '0.0.0'; +}; + +export const getAppEnvironment = () => { + return process.env.VITE_APP_ENVIRONMENT || 'dev'; +}; + +// Environment Detection +export const isDevelopment = () => { + return process.env.NODE_ENV === 'development' || getAppEnvironment() === 'dev'; +}; + +export const isProduction = () => { + return process.env.NODE_ENV === 'production' || getAppEnvironment() === 'prod'; +}; + +export const isIntegration = () => { + return getAppEnvironment() === 'int'; +}; + +// Debug Configuration +export const isDebugMode = () => { + return process.env.VITE_DEBUG === 'true'; +}; + +export const getLogLevel = () => { + return process.env.VITE_LOG_LEVEL || 'info'; +}; + +export const isConsoleLogsEnabled = () => { + return process.env.VITE_ENABLE_CONSOLE_LOGS === 'true'; +}; + +// Microsoft Authentication +export const getMicrosoftClientId = () => { + return process.env.VITE_MICROSOFT_CLIENT_ID; +}; + +export const getMicrosoftTenantId = () => { + return process.env.VITE_MICROSOFT_TENANT_ID; +}; + +export const getEntraClientSecret = () => { + return process.env.VITE_ENTRA_CLIENT_SECRET; +}; + +export const getEntraAuthority = () => { + return process.env.VITE_ENTRA_AUTHORITY; +}; + +export const getEntraRedirectPath = () => { + return process.env.VITE_ENTRA_REDIRECT_PATH; +}; + +export const getEntraRedirectUri = () => { + return process.env.VITE_ENTRA_REDIRECT_URI; +}; + +// Feature Flags +export const isFeatureEnabled = (feature) => { + const envKey = `VITE_ENABLE_${feature.toUpperCase()}`; + return process.env[envKey] === 'true'; +}; + +// Analytics and Monitoring +export const isAnalyticsEnabled = () => { + return process.env.VITE_ENABLE_ANALYTICS === 'true'; +}; + +export const isErrorReportingEnabled = () => { + return process.env.VITE_ENABLE_ERROR_REPORTING === 'true'; +}; + +export const isPerformanceMonitoringEnabled = () => { + return process.env.VITE_ENABLE_PERFORMANCE_MONITORING === 'true'; +}; + +// Development Server +export const getDevServerPort = () => { + return parseInt(process.env.VITE_DEV_SERVER_PORT || '5176'); +}; + +export const getDevServerHost = () => { + return process.env.VITE_DEV_SERVER_HOST || 'localhost'; +}; + +export const isDevServerHttps = () => { + return process.env.VITE_DEV_SERVER_HTTPS === 'true'; +}; + +// Security Configuration +export const isHttpsEnabled = () => { + return process.env.VITE_ENABLE_HTTPS === 'true'; +}; + +export const isCspEnabled = () => { + return process.env.VITE_ENABLE_CSP === 'true'; +}; + +// Test Configuration +export const isMockDataEnabled = () => { + return process.env.VITE_ENABLE_MOCK_DATA === 'true'; +}; + +export const isTestMode = () => { + return process.env.VITE_ENABLE_TEST_MODE === 'true'; +}; + +// Server-specific configuration +export const getServerPort = () => { + return process.env.PORT || 3000; +}; + +export const getServerHost = () => { + return process.env.HOST || '0.0.0.0'; +}; + +// Convenience object for easy destructuring +export const config = { + // API + getApiBaseUrl, + getApiTimeout, + + // App + getAppName, + getAppVersion, + getAppEnvironment, + + // Environment + isDevelopment, + isProduction, + isIntegration, + + // Debug + isDebugMode, + getLogLevel, + isConsoleLogsEnabled, + + // Microsoft Auth + getMicrosoftClientId, + getMicrosoftTenantId, + getEntraClientSecret, + getEntraAuthority, + getEntraRedirectPath, + getEntraRedirectUri, + + // Features + isFeatureEnabled, + + // Analytics + isAnalyticsEnabled, + isErrorReportingEnabled, + isPerformanceMonitoringEnabled, + + // Dev Server + getDevServerPort, + getDevServerHost, + isDevServerHttps, + + // Security + isHttpsEnabled, + isCspEnabled, + + // Test + isMockDataEnabled, + isTestMode, + + // Server + getServerPort, + getServerHost, +}; diff --git a/config/universalConfig.js b/config/universalConfig.js new file mode 100644 index 0000000..68933fa --- /dev/null +++ b/config/universalConfig.js @@ -0,0 +1,101 @@ +/** + * Universal Configuration - Works in both Node.js and Browser + */ + +// Helper to get environment variable (works in both Node.js and browser) +const getEnvVar = (key, defaultValue = undefined) => { + // Node.js environment + if (typeof process !== 'undefined' && process.env) { + return process.env[key] || defaultValue; + } + + // Browser environment (Vite) + if (typeof import !== 'undefined' && import.meta && import.meta.env) { + return import.meta.env[key] || defaultValue; + } + + return defaultValue; +}; + +// API Configuration +export const getApiBaseUrl = () => { + return getEnvVar('VITE_API_BASE_URL', 'http://localhost:8000'); +}; + +export const getApiTimeout = () => { + return parseInt(getEnvVar('VITE_API_TIMEOUT', '10000')); +}; + +// App Configuration +export const getAppName = () => { + return getEnvVar('VITE_APP_NAME', 'PowerOn'); +}; + +export const getAppVersion = () => { + return getEnvVar('VITE_APP_VERSION', '0.0.0'); +}; + +export const getAppEnvironment = () => { + return getEnvVar('VITE_APP_ENVIRONMENT', 'dev'); +}; + +// Environment Detection +export const isDevelopment = () => { + const mode = getEnvVar('NODE_ENV') || getEnvVar('MODE'); + const appEnv = getAppEnvironment(); + return mode === 'development' || appEnv === 'dev'; +}; + +export const isProduction = () => { + const mode = getEnvVar('NODE_ENV') || getEnvVar('MODE'); + const appEnv = getAppEnvironment(); + return mode === 'production' || appEnv === 'prod'; +}; + +export const isIntegration = () => { + return getAppEnvironment() === 'int'; +}; + +// Debug Configuration +export const isDebugMode = () => { + return getEnvVar('VITE_DEBUG') === 'true'; +}; + +export const getLogLevel = () => { + return getEnvVar('VITE_LOG_LEVEL', 'info'); +}; + +// Microsoft Authentication +export const getMicrosoftClientId = () => { + return getEnvVar('VITE_MICROSOFT_CLIENT_ID'); +}; + +export const getMicrosoftTenantId = () => { + return getEnvVar('VITE_MICROSOFT_TENANT_ID'); +}; + +export const getEntraAuthority = () => { + return getEnvVar('VITE_ENTRA_AUTHORITY'); +}; + +export const getEntraRedirectUri = () => { + return getEnvVar('VITE_ENTRA_REDIRECT_URI'); +}; + +// Convenience object +export const config = { + getApiBaseUrl, + getApiTimeout, + getAppName, + getAppVersion, + getAppEnvironment, + isDevelopment, + isProduction, + isIntegration, + isDebugMode, + getLogLevel, + getMicrosoftClientId, + getMicrosoftTenantId, + getEntraAuthority, + getEntraRedirectUri, +}; diff --git a/docs/BACKEND_DRIVEN_RENDERING_TRUSTEE.md b/docs/BACKEND_DRIVEN_RENDERING_TRUSTEE.md new file mode 100644 index 0000000..38c217d --- /dev/null +++ b/docs/BACKEND_DRIVEN_RENDERING_TRUSTEE.md @@ -0,0 +1,145 @@ +# Frontend (Backend-Driven) Rendering am Beispiel Trustee + +## Kurzfassung der Architektur + +Das Frontend rendert Trustee-Inhalte auf **zwei Wegen**: + +1. **Path-basiert (PageManager)** – z.B. Pfad `trustee/organisations` → PageManager lädt PageData → PageRenderer nutzt `tableConfig.hookFactory()` → Trustee-Hook (z.B. `useTrusteeOrganisations`) → Backend-APIs → FormGeneratorTable mit Spalten/Formularen aus Backend-Attributen. + +2. **Feature-Instanz-Route** – URL `mandates/:mandateId/trustee/:instanceId/documents` → FeatureLayout → FeatureViewPage (view=documents) → TrusteeDocumentsView → gleiche Hooks und gleiche Backend-APIs → FormGeneratorTable/FormGeneratorForm. + +Backend-seitig liefern die Trustee-Routes (Prefix `/api/trustee`) Attribute, CRUD und Options; die Pydantic-Modelle bestimmen die Felddefinitionen. + +--- + +## Mermaid-Diagramm: Backend-Driven Rendering (Trustee) + +```mermaid +flowchart TB + subgraph Router["Router (App.tsx)"] + RouteHome["/ → Home"] + RouteFeature["/mandates/:mandateId/:featureCode/:instanceId/*"] + end + + subgraph PathBased["Path-basierter Pfad (z.B. trustee/organisations)"] + Home[Home] + SidebarProvider[SidebarProvider] + PageManager[PageManager] + Location[useLocation → path] + GetPageData[getPageDataByPath(path)] + PageData[trusteeOrganisationsPageData etc.] + PageRenderer[PageRenderer] + HookFactory[tableConfig.hookFactory] + CreateHook[createOrganisationsHook] + end + + subgraph FeatureRoute["Feature-Instanz-Pfad"] + FeatureLayout[FeatureLayout] + Outlet[Outlet] + FeatureViewPage[FeatureViewPage view=documents|positions|...] + ViewRegistry[VIEW_COMPONENTS.trustee] + TrusteeView[TrusteeDocumentsView / TrusteePositionsView / ...] + end + + subgraph Hooks["Trustee Hooks (useTrustee.ts)"] + UseTrusteeOrgs[useTrusteeOrganisations] + UseTrusteeDocs[useTrusteeDocuments] + UseTrusteePositions[useTrusteePositions] + UseInstanceId[useInstanceId aus URL] + end + + subgraph BackendCalls["Backend-API-Aufrufe"] + AttrAPI["GET /api/trustee/instanceId/attributes/EntityType"] + ListAPI["GET /api/trustee/instanceId/organisations|documents|positions|..."] + CrudAPI["POST|PUT|DELETE /api/trustee/instanceId/..."] + OptionsAPI["GET /api/trustee/instanceId/organisations/options etc."] + end + + subgraph Backend["Gateway (Backend)"] + RouteTrustee[routeFeatureTrustee] + AttrEndpoint["get_entity_attributes → getModelAttributeDefinitions"] + Interface[interfaceFeatureTrustee] + DB[(PostgreSQL poweron_trustee)] + end + + subgraph UI["Generische UI-Komponenten"] + FormGeneratorTable[FormGeneratorTable] + FormGeneratorForm[FormGeneratorForm] + end + + RouteHome --> Home + Home --> SidebarProvider + Home --> PageManager + PageManager --> Location + Location --> GetPageData + GetPageData --> PageData + PageData --> PageRenderer + PageRenderer --> HookFactory + HookFactory --> CreateHook + CreateHook --> UseTrusteeOrgs + + RouteFeature --> FeatureLayout + FeatureLayout --> Outlet + Outlet --> FeatureViewPage + FeatureViewPage --> ViewRegistry + ViewRegistry --> TrusteeView + TrusteeView --> UseTrusteeDocs + TrusteeView --> UseTrusteePositions + + UseTrusteeOrgs --> UseInstanceId + UseTrusteeDocs --> UseInstanceId + UseTrusteePositions --> UseInstanceId + UseInstanceId --> AttrAPI + UseInstanceId --> ListAPI + UseInstanceId --> CrudAPI + UseInstanceId --> OptionsAPI + + AttrAPI --> RouteTrustee + ListAPI --> RouteTrustee + CrudAPI --> RouteTrustee + OptionsAPI --> RouteTrustee + RouteTrustee --> AttrEndpoint + RouteTrustee --> Interface + Interface --> DB + AttrEndpoint --> AttrAPI + + UseTrusteeOrgs --> FormGeneratorTable + UseTrusteeDocs --> FormGeneratorTable + UseTrusteePositions --> FormGeneratorTable + FormGeneratorTable --> FormGeneratorForm +``` + +--- + +## Wichtige Datenflüsse (Backend-Driven) + +| Was | Wo definiert / geladen | Verwendung im Frontend | +|-----|------------------------|-------------------------| +| **Spalten (Table)** | Backend: `GET .../attributes/{EntityType}` → `getModelAttributeDefinitions(PydanticModel)` | Hook setzt `attributes` → `attributesToColumns()` bzw. `hookData.columns` → FormGeneratorTable | +| **Formularfelder (Create/Edit)** | Entweder `formConfig.fields` in PageData (statisch) oder aus Hook: `generateCreateFieldsFromAttributes` / `generateEditFieldsFromAttributes` (Backend-Attribute) | PageRenderer / CreateButton → FormGeneratorForm(attributes=...) | +| **Dropdown-Optionen** | Backend: `GET .../organisations/options`, `.../contracts/options` etc. | `optionsReference: 'TrusteeOrganisation'` → useTrusteeOptions lädt Options → FormGeneratorForm | +| **CRUD** | Backend: POST/PUT/DELETE unter `/api/trustee/{instanceId}/{entity}` | Hook-Operationen (handleCreate, handleUpdate, handleDelete) → FormGeneratorTable Actions / Modals | + +--- + +## Relevante Dateien + +- **Frontend:** `src/core/PageManager/PageManager.tsx`, `src/core/PageManager/PageRenderer.tsx`, `src/core/PageManager/pageInterface.ts`, `src/core/PageManager/data/pages/trustee/organisations.ts`, `src/pages/FeatureView.tsx`, `src/pages/views/trustee/TrusteeDocumentsView.tsx`, `src/hooks/useTrustee.ts`, `src/api/trusteeApi.ts`. +- **Backend (Gateway):** `modules/features/trustee/routeFeatureTrustee.py` (Attributes, CRUD, Options), `modules/features/trustee/interfaceFeatureTrustee.py`, `modules/features/trustee/datamodelFeatureTrustee.py`. + +--- + +## Prüfung: Chatbot gleiche Logik wie Trustee? + +Der Chatbot wird im Frontend an **zwei Stellen** angebunden. Nur eine nutzt dieselbe backend-driven Logik wie Trustee. + +| Kriterium | Trustee (path-basiert) | Chatbot Route `/chatbot` | Chatbot Path `start/chatbot` | +|-----------|------------------------|---------------------------|-------------------------------| +| PageData (GenericPageData) | Ja | Nein | Ja (chatbotPageData) | +| PageRenderer | Ja | Nein | Ja | +| hookFactory in Config | Ja (tableConfig.hookFactory) | Nein | Ja (inputFormConfig.hookFactory) | +| Hook ruft Backend-API auf | Ja | Nein (Platzhalter) | Ja (chatbotApi) | +| Generische UI | FormGeneratorTable/Form | Eigene UI (ChatbotPage) | Messages, InputForm, ChatHistory | + +- **Route `/chatbot`** → rendert `ChatbotPage` (pages/migrate): eigenständige Komponente, kein PageManager/PageRenderer, simulierte Antwort (TODO: echte API). **Nicht** gleiche Logik wie Trustee. +- **Path `start/chatbot`** (PageManager/Sidebar) → `chatbotPageData` mit `createChatbotHook` → PageRenderer → useChatbot → echte APIs (`/api/chatbot/start/stream` etc.). **Gleiche** Logik wie Trustee (PageData + hookFactory + PageRenderer + Hook + Backend-API). diff --git a/docs/DASHBOARD_LOG_POLLING_DOCUMENTATION.md b/docs/DASHBOARD_LOG_POLLING_DOCUMENTATION.md new file mode 100644 index 0000000..a8a7c95 --- /dev/null +++ b/docs/DASHBOARD_LOG_POLLING_DOCUMENTATION.md @@ -0,0 +1,575 @@ +# Dashboard Log Polling and Rendering Documentation + +## Overview + +This documentation explains the complete flow of how dashboard messages (logs with `operationId`) are polled, processed, sorted, and rendered in the workflow dashboard. The system uses a hierarchical tree structure to display operations and their progress, with real-time updates through polling. + +## Architecture Flow + +The system follows this flow: + +1. **Polling Controller** (`workflowPollingController.js`) - Manages polling intervals and scheduling +2. **Data Layer** (`workflowData.js`) - Fetches data from API and routes logs to appropriate handlers +3. **Dashboard Processor** (`workflowUiRendererDashboard.js`) - Processes logs with `operationId` and builds hierarchical tree +4. **Dashboard Renderer** (`workflowUiRendererDashboard.js`) - Renders the hierarchical tree structure + +## Key Files + +- `workflowPollingController.js` - Centralized polling controller +- `workflowData.js` - API communication and data routing +- `workflowUiRendererDashboard.js` - Dashboard log processing and rendering +- `workflowCoordination.js` - State management coordination + +## Implementation Details + +### 1. Polling Mechanism + +**File**: `frontend_agents/public/js/modules/workflowPollingController.js` + +The polling controller uses a recursive `setTimeout` approach to create an infinite polling chain. This ensures continuous updates while preventing race conditions and rate limiting issues. + +#### Configuration + +- **Base interval**: 5 seconds (`baseInterval = 5000`) +- **Maximum interval**: 10 seconds (`maxInterval = 10000`) +- **Exponential backoff multiplier**: 1.5 +- **Concurrency prevention**: Uses `isPollInProgress` flag to prevent multiple simultaneous polls + +#### Key Methods + +**`startPolling(workflowId)`** +- Starts polling for a specific workflow +- Stops any existing polling before starting new one +- Sets `activeWorkflowId` and `isPolling` flag +- Executes immediate first poll (no delay) +- Validates workflow ID before starting + +**`doPolling()`** +- Executes one poll cycle asynchronously +- Prevents concurrent execution using `isPollInProgress` flag +- Calls `pollWorkflowData()` from `workflowData.js` +- Handles errors and implements exponential backoff on failures +- Self-schedules next poll using recursive `setTimeout` +- Validates workflow is still valid before scheduling next poll + +**`stopPolling()`** +- Stops all polling operations immediately +- Clears all scheduled timeouts +- Resets all state flags (`isPolling`, `isPollInProgress`, `activeWorkflowId`) +- Resets failure count + +**`pausePolling()` / `resumePolling()`** +- Temporarily pauses polling (e.g., during user interactions) +- Resumes polling after pause + +#### Polling Flow + +```javascript +startPolling(workflowId) + ↓ +doPolling() [immediate first poll] + ↓ +pollWorkflowData(workflowId) [async API call] + ↓ +setTimeout(() => doPolling(), interval) [schedule next poll] + ↓ +[recursive loop continues until stopped] +``` + +#### Error Handling + +- **Rate limiting (429 errors)**: Increases backoff more aggressively, stops polling after 5 consecutive rate limit errors +- **Network errors**: Logged but don't immediately stop polling (allows retry) +- **Workflow validation**: Checks if workflow is still valid before each poll cycle +- **Poll failures**: Exponential backoff increases interval up to `maxInterval` + +### 2. Data Fetching + +**File**: `frontend_agents/public/js/modules/workflowData.js` + +The `pollWorkflowData()` function orchestrates the data fetching process. + +#### API Calls + +The function makes two parallel API calls: + +1. **`api.getWorkflow(workflowId)`** - Fetches workflow status and metadata +2. **`api.getWorkflowChatData(workflowId, afterTimestamp)`** - Fetches unified chat data (messages, logs, stats) + +#### Incremental Polling + +- **First poll**: `afterTimestamp = null` → Fetches ALL historical data +- **Subsequent polls**: `afterTimestamp = workflowState.lastRenderedTimestamp` → Fetches only new items since last render +- **Timestamp tracking**: Uses `createdAt` timestamp from each item to track what's been rendered + +#### Data Processing + +The `processUnifiedChatData()` function processes items in chronological order: + +1. Routes each item based on `type` field: + - `'message'` → `processUnifiedMessage()` + - `'log'` → `processUnifiedLog()` + - `'stat'` → `processUnifiedStat()` + +2. Updates `lastRenderedTimestamp` after processing each item (ensures accurate incremental polling) + +3. Processes items sequentially to maintain chronological order + +#### Workflow Status Updates + +- Monitors workflow status changes +- Updates UI buttons and controls when status changes +- Handles special case: Ignores 'completed' status if workflow is in Round 2+ (prevents premature stopping) + +#### Polling Continuation Logic + +Polling continues based on workflow status: +- **'running'**: Continues polling +- **'completed'**: Continues polling temporarily to get final messages, then stops +- **'failed' / 'stopped'**: Stops polling immediately +- **Other statuses**: Stops polling + +### 3. Log Routing + +**File**: `frontend_agents/public/js/modules/workflowData.js` - `processUnifiedLog()` + +Logs are routed to different rendering areas based on the presence of `operationId`: + +#### Routing Logic + +```javascript +if (log.operationId) { + // Logs WITH operationId → Dashboard + processDashboardLogs([frontendLog]); +} else { + // Logs WITHOUT operationId → Unified Content Area + WorkflowCoordination.addLogEntry(frontendLog.message, frontendLog.type, frontendLog); +} +``` + +#### Log Format Conversion + +Backend `ChatLog` format is converted to frontend format: + +```javascript +{ + id: log.id, + message: log.message, + type: log.type || 'info', + timestamp: log.timestamp, + status: log.status || 'running', + progress: log.progress !== undefined && log.progress !== null ? log.progress : undefined, + performance: log.performance, + operationId: log.operationId || null, + parentId: log.parentId || null +} +``` + +#### Key Points + +- **All logs are processed**: No duplicates are skipped (logs may contain progress updates) +- **Progress tracking**: Logs with `operationId` typically contain progress information +- **Hierarchical structure**: `parentId` field enables parent-child relationships between operations + +### 4. Dashboard Log Processing + +**File**: `frontend_agents/public/js/modules/workflowUiRendererDashboard.js` - `processDashboardLogs()` + +This function processes logs with `operationId` and builds the hierarchical tree structure. + +#### Processing Steps + +1. **Group by operationId** + - Creates or updates operation groups in `dashboardLogTree.operations` Map + - Each operation stores logs in a Map keyed by `logId` (ensures uniqueness) + +2. **Update operation metadata** + - Updates `parentId` if not set yet (from first log entry) + - Updates `latestProgress` when log contains progress value + - Updates `latestStatus` when log contains status value + +3. **Generate unique log IDs** + - Uses provided `log.id` if available + - Otherwise generates: `log_${Date.now()}_${Math.random().toString(36).substring(2, 9)}` + - Ensures all progress updates are stored, even with same progress value + +4. **Build root operations list** + - Filters operations without `parentId` + - Stores in `dashboardLogTree.rootOperations` array + +5. **Trigger rendering** + - Calls `renderDashboard()` after processing all logs + +#### Data Structure + +```javascript +dashboardLogTree = { + operations: Map, // All logs for this operation + parentId: string | null, // Parent operation ID (if nested) + expanded: boolean, // UI expanded/collapsed state + latestProgress: number | null, // Most recent progress value + latestStatus: string | null // Most recent status value + }>, + rootOperations: string[], // Operation IDs without parent + logExpandedStates: Map, // Individual log expanded states + currentRound: number | null // Current workflow round +} +``` + +#### Important Behaviors + +- **All logs stored**: Every log with same `operationId` is stored (represents progress updates) +- **Latest values tracked**: `latestProgress` and `latestStatus` always reflect most recent state +- **Parent-child relationships**: Operations can nest via `parentId` field + +### 5. Sorting + +**File**: `frontend_agents/public/js/modules/workflowUiRendererDashboard.js` + +Multiple sorting mechanisms ensure consistent display order: + +#### Operation-Level Log Sorting + +**Location**: `renderOperationNode()` function, lines 169-173 + +Logs within an operation are sorted by timestamp in ascending order: + +```javascript +const logsArray = Array.from(operation.logs.values()).sort((a, b) => { + const tsA = a.timestamp || 0; + const tsB = b.timestamp || 0; + return tsA - tsB; // Ascending order (oldest first) +}); +``` + +**Purpose**: Ensures logs are displayed in chronological order within each operation. + +#### Child Operations Sorting + +**Location**: `getChildOperations()` function, line 453 + +Child operations are sorted alphabetically by `operationId`: + +```javascript +return Array.from(dashboardLogTree.operations.entries()) + .filter(([opId, op]) => op.parentId === parentId) + .map(([opId]) => opId) + .sort(); // Alphabetical sort for consistent ordering +``` + +**Purpose**: Provides consistent, predictable ordering of sibling operations. + +#### Timeline Sorting (Unified Content) + +**Location**: `workflowUiRenderer.js` - `renderUnifiedContent()` function + +Logs without `operationId` are combined with messages and sorted by timestamp: + +```javascript +timeline.sort((a, b) => a.timestamp - b.timestamp); +``` + +**Purpose**: Creates a unified chronological timeline of all non-dashboard content. + +#### Sorting Summary + +| Context | Sort Key | Order | Purpose | +|---------|----------|-------|---------| +| Logs within operation | `timestamp` | Ascending | Chronological display | +| Child operations | `operationId` | Alphabetical | Consistent ordering | +| Unified timeline | `timestamp` | Ascending | Chronological timeline | + +### 6. Rendering + +**File**: `frontend_agents/public/js/modules/workflowUiRendererDashboard.js` - `renderDashboard()` + +The rendering system creates a hierarchical tree structure with collapsible nodes and progress indicators. + +#### Hierarchical Structure + +- **Root operations**: Operations without `parentId` are rendered first +- **Child operations**: Operations with `parentId` matching a parent's `operationId` are nested +- **Single line per operation**: Each operation shows ONE line that updates with latest status/progress +- **All logs represented**: All logs with same `operationId` are represented by this single updating line + +#### Rendering Process + +**Step 1: `renderDashboard()`** +- Builds HTML from `dashboardLogTree` structure +- Handles empty state (no operations) +- Sets up event handlers for collapse/expand functionality + +**Step 2: `renderOperationNode(operationId, depth)`** (Recursive) +- Renders a single operation node +- Calculates indentation based on depth (8px per level) +- Determines if operation has child operations +- Gets latest log entry for operation name and type +- Calculates progress percentage (forces 100% when status is 'completed') +- Builds HTML for: + - Expand/collapse button (if has children) + - Operation icon (based on log type) + - Operation name (from latest log message) + - Status and progress percentage + - Progress bar (if progress available) +- Recursively renders child operations if expanded + +#### Visual Elements + +**Operation Header** +- Expand/collapse button (chevron icon) +- Operation icon (info/success/error/warning) +- Operation name (from latest log message) +- Status badge (running/completed/failed/etc.) +- Progress percentage (if available) + +**Progress Bar** +- Visual progress indicator +- Width based on progress percentage (0-100%) +- "completed" class when progress >= 100% +- Hidden if no progress value + +**Indentation** +- Root level (depth 0): No indentation +- Child levels: Indented via parent container padding (8px per level) +- Creates visual hierarchy + +#### State Management + +**Expanded/Collapsed State** +- Stored in `operation.expanded` boolean +- Toggled via `toggleOperationExpanded(operationId)` +- Persists during re-renders +- Controls visibility of child operations container + +**Event Handlers** +- `setupCollapseExpandHandlers()`: Sets up click handlers for expand buttons +- `setupLogCollapseExpandHandlers()`: Sets up handlers for log entry expansion +- Click handlers toggle expanded state and re-render dashboard + +#### Rendering Flow + +``` +renderDashboard() + ↓ +[For each root operation] + renderOperationNode(operationId, 0) + ↓ + [Build operation header HTML] + ↓ + [If has children and expanded] + [For each child operation] + renderOperationNode(childOperationId, depth) + ↓ + [Recursive rendering continues...] + ↓ +[Set innerHTML of dashboard container] + ↓ +[Setup event handlers] +``` + +#### Key Rendering Features + +1. **Progress Updates**: Operation line updates in-place as new logs arrive +2. **Status Changes**: Status badge updates when operation status changes +3. **Collapsible Tree**: Users can expand/collapse operation groups +4. **Visual Hierarchy**: Indentation shows parent-child relationships +5. **Latest State**: Always shows most recent log message, progress, and status + +## Data Structures + +### Dashboard Log Tree + +```javascript +{ + operations: Map, // All logs for this operation + parentId: string | null, // Parent operation ID + expanded: boolean, // UI expanded state + latestProgress: number | null, // Most recent progress (0-1) + latestStatus: string | null // Most recent status + }>, + rootOperations: string[], // Operation IDs without parent + logExpandedStates: Map, // Individual log expanded states + currentRound: number | null // Current workflow round +} +``` + +### Log Entry Format + +```javascript +{ + id: string, // Unique log ID + message: string, // Log message text + type: 'info' | 'success' | 'error' | 'warning', + timestamp: number, // Unix timestamp (seconds) + status: string, // Operation status + progress: number | null, // Progress value (0-1) or null + operationId: string | null, // Operation ID (null = unified content) + parentId: string | null // Parent operation ID (for nesting) +} +``` + +### Unified Chat Data Item + +```javascript +{ + type: 'message' | 'log' | 'stat', // Item type + item: { /* message/log/stat data */ }, + createdAt: number // Timestamp for sorting +} +``` + +## Key Features + +### 1. Incremental Polling + +- Uses `lastRenderedTimestamp` to fetch only new items +- First poll loads all historical data (`afterTimestamp = null`) +- Subsequent polls fetch incrementally (`afterTimestamp = lastRenderedTimestamp`) +- Reduces API load and improves performance + +### 2. Hierarchical Display + +- Operations can have parent-child relationships via `parentId` +- Visual indentation shows hierarchy +- Collapsible tree structure for better UX +- Supports unlimited nesting depth + +### 3. Progress Tracking + +- Shows progress bars for operations with progress values +- Updates in real-time as new logs arrive +- Forces 100% progress when status is 'completed' +- Displays status badges (running/completed/failed/etc.) + +### 4. Collapsible Tree + +- Users can expand/collapse operation groups +- Expand/collapse state persists during re-renders +- Click handlers on operation headers and expand buttons +- Smooth visual transitions + +### 5. Round Detection + +- Tracks current workflow round in `dashboardLogTree.currentRound` +- Clears dashboard when round changes (via `updateProgressFromMessage()`) +- Prevents mixing data from different workflow rounds + +### 6. Duplicate Prevention + +- Uses Map with `logId` keys to prevent duplicate entries +- Same log ID updates in place rather than creating duplicates +- Ensures unique log entries even with same progress value + +## Error Handling + +### Rate Limiting (429 Errors) + +- Detected in `pollWorkflowData()` and `doPolling()` +- Triggers exponential backoff with increased multiplier +- Stops polling after 5 consecutive rate limit errors +- Prevents API abuse + +### Network Errors + +- Logged but don't immediately stop polling +- Allows retry on transient network issues +- Controller handles backoff automatically +- Polling continues for recoverable errors + +### Rendering Errors + +- Don't stop polling (UI issue, not data issue) +- Logged for debugging +- Polling continues to get workflow status updates +- UI can recover on next successful render + +### Workflow Validation + +- `isWorkflowValid()` checks before each poll cycle +- Validates workflow state exists and matches active workflow +- Checks if polling is still enabled (`pollActive` flag) +- Stops polling if workflow is invalid + +## Performance Considerations + +### Polling Intervals + +- Base interval: 5 seconds (balanced between responsiveness and server load) +- Maximum interval: 10 seconds (prevents excessive backoff) +- Exponential backoff: Prevents overwhelming server during errors + +### Data Processing + +- Processes items sequentially to maintain chronological order +- Uses Maps for O(1) lookups when grouping operations +- Incremental polling reduces data transfer +- Timestamp-based filtering at API level + +### Rendering Optimization + +- Full re-render on each update (simplifies state management) +- Event handlers re-attached after each render +- HTML generation is efficient (string concatenation) +- Minimal DOM manipulation (innerHTML replacement) + +## Usage Examples + +### Starting Polling + +```javascript +import pollingController from './workflowPollingController.js'; + +// Start polling for a workflow +pollingController.startPolling('workflow-123'); +``` + +### Stopping Polling + +```javascript +// Stop polling +pollingController.stopPolling(); +``` + +### Processing Dashboard Logs + +```javascript +import { processDashboardLogs } from './workflowUiRendererDashboard.js'; + +// Process logs with operationId +const logs = [ + { + id: 'log-1', + message: 'Processing file...', + type: 'info', + timestamp: 1234567890, + status: 'running', + progress: 0.5, + operationId: 'op-123', + parentId: null + } +]; + +processDashboardLogs(logs); +``` + +### Clearing Dashboard + +```javascript +import { clearDashboard } from './workflowUiRendererDashboard.js'; + +// Clear dashboard (e.g., on workflow reset) +clearDashboard(true); // true = reset round tracking +``` + +## Related Documentation + +- `FRONTEND_ARCHITECTURE.md` - Overall frontend architecture +- `workflowCoordination.js` - State management coordination +- `workflowUiRenderer.js` - Unified content rendering + +## Conclusion + +The dashboard log polling and rendering system provides a robust, hierarchical display of workflow operations with real-time updates. The system efficiently handles incremental polling, sorts data chronologically, and renders a collapsible tree structure that scales to complex workflows with multiple nested operations. + diff --git a/docs/MONETARISIERUNG_FEATURES_INTERAKTIV.md b/docs/MONETARISIERUNG_FEATURES_INTERAKTIV.md new file mode 100644 index 0000000..2c73318 --- /dev/null +++ b/docs/MONETARISIERUNG_FEATURES_INTERAKTIV.md @@ -0,0 +1,227 @@ +# Monetarisierung der Features — interaktives Klärungs-Playbook + +Dieses Dokument ist für **Live-Workshops** gedacht (Product, Sales, Tech). Du kannst es in Cursor/VS Code oder GitHub öffnen: **Checkboxen** (`- [ ]`) und **leere Tabellenzellen** werden direkt im Editor abgehakt bzw. ausgefüllt. + +--- + +## 1. Ausgangslage aus `frontend_nyla` (gemeinsames Bild) + +Die App denkt in **Mandanten → Features → Instanzen → Rechte (Views)**. Nutzer haben keinen direkten „Mandanten-Login“, sondern **Zugriff auf Feature-Instanzen** (`featureStore`). + +| Baustein | Bedeutung für Pricing | +|----------|------------------------| +| **Feature-Code** (z. B. `chatbot`, `workspace`) | logische Produktlinie / Modul | +| **Instanz** | oft Kunde, Abteilung, Bot, “Organisation” — **horizontale Skalierung** (mehr Instanzen = mehr Wert oder mehr Kosten) | +| **Views / Berechtigungen** | micro-Segmente im Produkt (**Add-ons**, Rollenpakete, „Light vs Pro“) | +| **Feature Store** (`Store.tsx`) | Self-Service-Aktivierung (z. B. `automation`, `teamsbot`) — Kandidaten für **Freemium / Trial / Upsell** | +| **Billing im Frontend** (`billingApi.ts`) | Modelle `PREPAY_MANDATE`, `PREPAY_USER`, `UNLIMITED`; Transaktionen mit u. a. `featureCode`, `featureInstanceId`, Provider/Modell | + +**Leitidee:** Preis = *was* (Feature/View) × *wie viel* (Instanz, Nutzer, Volumen) × *wie abgerechnet* (Pauschale, Credits, Nachzahlung). + +--- + +## 2. Schnell-Check: Welches Geschäftsmodell passt grob? + +Arbeite die Fragen der Reihe nach durch und hake ab. + +- [ ] **Primärer Käufer:** zahlt der **Mandant** (Firma), der **Endnutzer**, oder ein **Partner**? +- [ ] **Value Metric:** was korreliert am ehesten mit Kundennutzen? (z. B. Mandanten, Instanzen, aktive Nutzer, gespeicherte Dokumente, API-Calls, AI-Tokens/CHF-Verbrauch) +- [ ] **Margen-Risiko:** wo sind **variable Kosten** (LLM, Storage, Third-Party) — müssen die **durchgereicht** oder **gepuffert** werden? +- [ ] **Go-to-Market:** brauchst du **Selbstbedienung** (Store) oder nur **Sales / Onboarding** (Admin legt Instanzen an)? +- [ ] **Fairness:** soll ein Power-User **pro Nutzer** limitiert sein oder **Kontingent pro Mandant**? + +### Entscheidungsbaum (Diskussionsvorlage) + +```mermaid +flowchart TD + A[Nutzerwert skaliert primär mit Volumen?] -->|Ja| B[Usage / Credits / Nachzahlung] + A -->|Nein| C[Festpreis / Seat / Instanz] + B --> D[Pro Feature oder globaler Credit-Pool?] + C --> E[Wer zählt als Seat: Login oder aktive Nutzung?] + D --> F[Sichtbar im Billing-Dashboard pro FeatureCode?] + E --> G[Wie viele Instanzen sind inkludiert?] +``` + +Trage Ergebnis hier ein (ein Satz): + +> **Entscheidung Grobmodell:** … + +--- + +## 3. Billing-Modelle (Anknüpfung an `billingApi.ts`) + +Ordnet euer **Angebot** den technisch vorhandenen **BillingModel**-Werten zu (Namen aus dem Frontend): + +| `BillingModel` | Typische Kundenstory | Wann sinnvoll? | +|----------------|---------------------|----------------| +| `PREPAY_MANDATE` | „Wir laden ein Konto auf, alle ziehen daraus.“ | Gemeinsamer Pool, ein Rechnungsempfänger | +| `PREPAY_USER` | „Jeder Nutzer hat ein Kontingent.“ | faire Verteilung bei heterogenem Nutzungsverhalten | +| `UNLIMITED` | „Flat rate / Enterprise-Vertrag.“ | Paketpreis deckt erwarteten Mix | + +**Workshop-Aufgabe** + +- [ ] Standard für **SMB**: +- [ ] Standard für **Enterprise**: +- [ ] Ausnahme / Piloten: + +--- + +## 4. Feature-Inventar (aus `FEATURE_REGISTRY`) + +Die folgende Tabelle ist die **Checkliste pro Modul**. Pro Zeile: **was** verkaufen wir, **woran** messen wir, **was** ist Inhalt eines Pakets? + +| `featureCode` | Produktname (DE) | Hauptnutzen (1 Satz) | Typische „Einheit“ für Preis (*Seat / Instanz / Request / GB / CHF-Verbrauch*) | Im **Feature Store** relevant? | Variable Kosten? (ja/nein/klein) | Notizen | +|---------------|------------------|----------------------|----------------------------------------------------------------------------------|-------------------------------|-----------------------------------|---------| +| `trustee` | Treuhand | | | ☐ ja ☐ nein | | | +| `realestate` | Immobilien | | | ☐ ja ☐ nein | | | +| `chatbot` | Chatbot | | | ☐ ja ☐ nein | | | +| `chatworkflow` | Workflow | | | ☐ ja ☐ nein | | | +| `automation` | Automatisierung | | | ☐ ja ☐ nein | | | +| `teamsbot` | Teams Bot | | | ☐ ja ☐ nein | | | +| `neutralization` | Neutralisierung | | | ☐ ja ☐ nein | | | +| `commcoach` | Kommunikations-Coach | | | ☐ ja ☐ nein | | | +| `workspace` | AI Workspace | | | ☐ ja ☐ nein | | | + +> **Hinweis Store:** In `Store.tsx` sind derzeit u. a. `automation` und `teamsbot` als Self-Service beschrieben — weitere Features können folgen, sobald Backend/Policy das erlaubt. + +--- + +## 5. Views als Upsell-Stufen (fein granulare Monetarisierung) + +Viele **Views** sind Kandidaten für „Basic / Pro“ oder Add-ons (technisch: Rechte pro View). + +**Vorgehen pro Feature:** Liste die Views und markiere: **Base** (muss rein), **Upsell**, **Admin-only** (meist kein direkter Upsell). + +### `trustee` + +- [ ] `dashboard` — Base / Upsell / Admin-only +- [ ] `positions` — … +- [ ] `documents` — … +- [ ] `position-documents` — … +- [ ] `expense-import` — … +- [ ] `scan-upload` — … +- [ ] `instance-roles` (adminOnly) — … +- [ ] `settings` — … + +### `chatbot` + +- [ ] `conversations` — … +- [ ] `settings` — … + +### `automation` + +- [ ] `definitions` — … +- [ ] `templates` — … +- [ ] `logs` — … + +### `teamsbot` + +- [ ] `dashboard` — … +- [ ] `sessions` — … +- [ ] `settings` — … + +### `neutralization` + +- [ ] `playground` / `dashboard` — … +- [ ] `config` — … +- [ ] `attributes` — … + +### `commcoach` + +- [ ] `dashboard` — … +- [ ] `coaching` — … +- [ ] `dossier` — … +- [ ] `settings` — … + +### `workspace` + +- [ ] `dashboard` — … +- [ ] `editor` — … +- [ ] `settings` — … + +### `realestate` + +- [ ] `dashboard` — … +- [ ] `instance-roles` (adminOnly) — … + +### `chatworkflow` + +- [ ] `dashboard` — … +- [ ] `runs` — … +- [ ] `files` — … + +**Paket-Entscheid (freies Feld):** + +| Paketname | Enthaltene `featureCode`s | Enthaltene Views / Ausnahmen | Limits (Instanzen, Nutzer, Speicher, Credits) | +|-----------|---------------------------|------------------------------|-----------------------------------------------| +| Starter | | | | +| Business | | | | +| Enterprise | | | | + +--- + +## 6. Nutzungsmessung vs. Produktversprechen + +Transaktionen im Billing können unter anderem **`featureCode`**, **`featureInstanceId`**, **`aicoreProvider`**, **`aicoreModel`** tragen — gut für **trans-parente** oder **Feature-spezifische** Auswertung. + +**Abgleich (interaktiv):** + +- [ ] Welche Features sollen im Kunden-UI **getrennt** sichtbar sein (`costByFeature` im Usage-Report)? +- [ ] Welche Kosten werden **in einen Topf** gelegt (einfacheres Pricing, weniger Erklärungsbedarf)? +- [ ] Gibt es **überproportionale** Kostenfaktoren (z. B. Web-Recherche beim Chatbot), die ein **Aufsatz** oder **Limit** brauchen? + +**Policy-Sätze (ausfüllen):** + +1. Wenn Guthaben **`warningThreshold`** unterschreitet, dann: … +2. Wenn **`blockOnZeroBalance`** aktiv ist, dann welche Features blocken wir zuerst: … +3. **Trial:** welche Features sind zeitlich / volumenmäßig limitiert: … + +--- + +## 7. Angebots-Builder (1 Seite für Sales) + +_Kopiere diesen Block pro Lead._ + +- **Kunde / Segment:** … +- **Mandanten-Setup:** # Instanzen geplant pro Feature: … +- **Nutzer / Rollen:** … +- **Inkludierte Module (`featureCode`):** … +- **Add-ons (Views):** … +- **BillingModel:** `PREPAY_MANDATE` / `PREPAY_USER` / `UNLIMITED` +- **Kontingente:** CHF/Monat, Tokens, API-Calls, Speicher: … +- **Preisgestaltung:** Listenpreis, Rabatt %, Laufzeit: … +- **Risiken / Sonderkosten (LLM, Integrationen):** … + +**Einwand-Notizen:** + +| Einwand | Antwort / Kompromiss | +|---------|----------------------| +| „Wir wollen unbegrenzt.“ | | +| „Wir haben viele Abteilungen (Instanzen).“ | | +| „Wir brauchen nur eine View.“ | | + +--- + +## 8. Definition of Done (Pricing ist „fertig“ besprochen) + +- [ ] Jedes `featureCode` hat **Paket** + **Messgröße** + **Ausnahmen** +- [ ] Jede revenue-relevante View ist **Base/Upsell** zugeordnet +- [ ] Store-Features haben **Activation Policy** (wer darf, was passiert nach Trial) +- [ ] Billing-Model pro Segment ist festgelegt inkl. **Warn-/Block-Verhalten** +- [ ] Sales-Template (Abschnitt 7) ist befüllt für **Pilotkunde 1** + +--- + +## 9. Referenz im Repo (für Technik-Abgleich) + +| Thema | Datei | +|-------|--------| +| Feature-Definitionen (Codes, Views) | `src/types/mandate.ts` (`FEATURE_REGISTRY`) | +| Mandant → Instanzen → Rechte | `src/stores/featureStore.tsx` | +| Self-Service Store | `src/pages/Store.tsx`, `src/api/storeApi.ts` | +| Billing-Typen & Reports | `src/api/billingApi.ts` | +| UI-Komponenten / Routing-Helfer | `src/config/pageRegistry.tsx` | + +--- + +*Version: 2026-03-20 — ausgerichtet auf den Stand von `frontend_nyla`; bei neuen Features die Tabellen in Abschnitt 4–5 ergänzen.* diff --git a/docs/MONETARISIERUNG_KURZ_PRAESENTATION.md b/docs/MONETARISIERUNG_KURZ_PRAESENTATION.md new file mode 100644 index 0000000..d8f9415 --- /dev/null +++ b/docs/MONETARISIERUNG_KURZ_PRAESENTATION.md @@ -0,0 +1,68 @@ +# Monetarisierung — Kurzfassung (Präsentation) + +*Technische Einordnung: Plattform `frontend_nyla` — Mandat → Feature → **Instanz** → **Views** (Rechte). Billing-Typen aus `billingApi.ts`.* + +--- + +## Folie 1 · Kernthese + +**Wir verkaufen Module (`featureCode`) und deren Ausprägung: wie viele Instanzen, welche Views, wie viel Verbrauch.** + +Preislogik: **Was** × **Wie viel** × **Abrechnungsmodell** (Pauschale, Credits, Nachzahlung, Flat). + +--- + +## Folie 2 · Drei Hebel für das Angebot + +| Hebel | Bedeutung | +|--------|-----------| +| **Modul** | z. B. `chatbot`, `workspace`, `trustee`, `automation`, … | +| **Instanz** | Skalierung pro Mandat (Bots, Organisationen, Teams, …) | +| **View / Rolle** | „Light vs Pro“, Add-ons (fein granular über Berechtigungen) | + +**Self-Service:** Feature Store (`automation`, `teamsbot`, …) → Trial, Freemium, Upsell. + +--- + +## Folie 3 · Abrechnung (Systemkonzept) + +| Modell | Kunde versteht es so | +|--------|----------------------| +| **PREPAY_MANDATE** | Ein Guthaben-Topf für die ganze Organisation | +| **PREPAY_USER** | Kontingent pro Nutzer | +| **UNLIMITED** | Paket / Enterprise-Flat | + +Transparenz: Verbrauch lässt sich nach **Feature**, **Instanz**, **Provider/Modell** auswerten (technische Basis im Billing). + +--- + +## Folie 4 · Produktportfolio (Überblick) + +| Modul | Fokus | +|--------|--------| +| Treuhand (`trustee`) | Dokumente, Positionen, Import/Scan, Buchhaltung | +| Immobilien (`realestate`) | Karte / Mandantenfähigkeit | +| Chatbot (`chatbot`) | Konversationen, Konfiguration | +| Workflow (`chatworkflow`) | Überblicke, Runs, Dateien | +| Automatisierung (`automation`) | Definitionen, Vorlagen, Logs | +| Teams Bot (`teamsbot`) | Dashboard, Sessions, Settings | +| Neutralisierung (`neutralization`) | Playground, Config, Attribute | +| CommCoach (`commcoach`) | Dashboard, Coaching, Dossier | +| AI Workspace (`workspace`) | Dashboard, Editor, Settings | + +*Details & Workshop-Checklisten: siehe `MONETARISIERUNG_FEATURES_INTERAKTIV.md`.* + +--- + +## Folie 5 · Entscheidungen (noch zu füllen) + +1. **Segment:** SMB-Paket vs. Enterprise — Standard-Billingmodell? +2. **Messgröße:** Seats, Instanzen, CHF-Verbrauch, hybride Limits? +3. **Transparenz:** getrennte Kosten pro Feature oder ein Gesamtpool? +4. **Store:** welche Module dürfen selbst aktiviert werden — mit welchem Trial? + +--- + +## Folie 6 · Nächster Schritt + +Paketraster **Starter / Business / Enterprise** mit festen Inklusiv-Features + klaren **Überlaufregeln** (Warnung, Sperre, Nachkauf). diff --git a/docs/PR_REPORT_20260126pm.md b/docs/PR_REPORT_20260126pm.md new file mode 100644 index 0000000..e3bbf72 --- /dev/null +++ b/docs/PR_REPORT_20260126pm.md @@ -0,0 +1,246 @@ +# PR-Bericht: frontend_nyla (feat/saas-multi-tenant-mandates) + +**Ziel-Branch:** `int` +**Feature-Branch:** `feat/saas-multi-tenant-mandates` +**Stand:** Januar 2026 + +--- + +## Übersicht + +| Metrik | Wert | +|--------|------| +| **Anzahl Commits** | 73 | +| **Geänderte Dateien** | 455 | +| **Zeilen hinzugefügt** | ~78'604 | +| **Zeilen gelöscht** | ~15'070 | + +--- + +## Wichtigste inhaltliche Änderungen + +### 1. SaaS Multi-Mandate & Mandatsverwaltung +- Mandaten-Navigation und Mandatenwechsel im UI +- Mandats-Einladungen und Benachrichtigungssystem +- Mandats-Rollen und -Berechtigungen (RBAC) +- Zugriff auf Seiten und Features mandatenbasiert +- UID-/ID-Mapping und Referenzen für Multi-Mandate angepasst + +### 2. Admin-Bereich +- Admin-Seiten: Mandate, RBAC-Rollen, RBAC-Regeln, Team-Mitglieder +- Feature-Zugriff, Benutzer-Zugriff, Mandats-Rollen-Berechtigungen +- Einladungsverwaltung, Benutzer-Mandate, Benutzerübersicht +- RBAC-Export/Import + +### 3. Trustee (Treuhand)-Feature +- Trustee-Views: Dashboard, Positionen, Dokumente, Verträge, Rollen, Organisationen, Access +- Expense-Import-View, Positions-Dokumente +- Trustee-API und Hooks (`useTrustee`, `useTrusteeOptions`) + +### 4. Workflows & Automation +- Workflow-Playground mit zentralem State, Log-Polling, Lifecycle-Hooks +- Automations-Seite und Workflows-Seite +- Workflow-Statistiken, verbesserte Log-Darstellung +- Chatbot-Integration (Messages, Dateien, Lifecycle) + +### 5. PEK (Projekte & Stammdaten) +- Isoliert in Folder + +### 6. Authentifizierung & Nutzerverwaltung +- Magic-Link-Login +- Passwort-Reset (Request & Reset-Seiten) +- Registrierung und Login überarbeitet +- Erweiterter Auth-Hook und CSRF-Utilities + +### 7. GDPR & Rechtliches +- GDPR-konforme Seite/Flows +- PowerOn Home, Datenschutz, AGB als statische HTML-Seiten + +### 8. UI/UX & Architektur +- Neues Page-Management (`core/PageManager`) mit datengetriebenen Seiten +- FormGenerator: Aufteilung in Form, List, Table, Controls, Action-Buttons +- Server-seitige Filter/Sort für generische Tabellen, Scroll-Lock für Header +- Sidebar überarbeitet, Mandaten-Navigation, Tree-Navigation, UserSection +- Notification-Bell, Access-Rules-Editor +- Layouts: `MainLayout`, `FeatureLayout`; Seiten: `FeatureView`, `Dashboard`, `Settings` +- Diverse UI-Komponenten (Log, Messages, MapView, Tabs, Toast, ViewForm, WorkflowStatus, etc.) + +### 9. Konfiguration & Deployment +- Konfiguration in `config/` (env, serverConfig, universalConfig) +- Scripts nach `scripts/` (server, deploy-server) +- GitHub-Workflows angepasst, Node-Version 20 + +### 10. Weitere Features & Fixes +- Speech-Integration (Prototyp), Speech-Seiten & -Transkripte +- Real-Estate/Privilege-Checker isoliert in Folder +- Althaus-Seite, PEK-Tabs umbenannt (Projects, Data Management) +- Einstellungen-Seite, Basedata-Seiten (Connections, Files, Prompts) +- Privilege-Caching und -Checker konsolidiert +- Diverse Build- und TypeScript-Fixes, Hotfixes + +--- + +## Geänderte Dateien (nach Bereichen) + +### Konfiguration & Projekt +- `.cursorignore`, `.gitignore`, `.github/workflows/*.yml` +- `README.md`, `index.html`, `package.json`, `package-lock.json` +- `vite.config.ts` +- `config/*` (neu), `.env.*` → `config/.env.*` +- `scripts/server.js`, `scripts/deploy-server.js` +- `public/`: Favicon, Logos, `poweron-home.html`, `poweron-privacy.html`, `poweron-terms.html` + +### API-Schicht +- `src/api.ts` (erweitert) +- Neu: `src/api/attributesApi.ts`, `authApi.ts`, `automationApi.ts`, `chatbotApi.ts`, `connectionApi.ts`, `featuresApi.ts`, `fileApi.ts`, `mandateApi.ts`, `permissionApi.ts`, `promptApi.ts`, `rbacRulesApi.ts`, `roleApi.ts`, `trusteeApi.ts`, `userApi.ts`, `workflowApi.ts` + +### Auth & Provider +- `src/providers/auth/AuthProvider.tsx`, `ProtectedRoute.tsx`, `authConfig.ts` +- `src/providers/language/LanguageContext.tsx` +- `src/auth/ProtectedRoute.tsx` (entfernt/ersetzt) + +### Core: PageManager +- `src/core/PageManager/PageManager.tsx`, `PageRenderer.tsx`, `SidebarProvider.tsx`, `pageInterface.ts` +- `src/core/PageManager/data/pages/*`: admin (mandates, rbac-role, rbac-rules, team-members), automations, chatbot, connections, dashboard, files, pek, pek-tables, prompts, settings, speech, speech-transcripts, trustee (access, contracts, documents, organisations, positions, roles), workflows +- `src/config/pageRegistry.tsx` + +### Komponenten (Auswahl) +- **AccessRules:** AccessLevelSelect, AccessRulesEditor, AccessRulesTable + Styles +- **FormGenerator:** FormGeneratorControls, FormGeneratorForm, FormGeneratorList, FormGeneratorTable, ActionButtons (Copy, Custom, Delete, Download, Edit, Remove, View) +- **Navigation:** MandateNavigation, TreeNavigation, UserSection + Styles +- **NotificationBell**, **ContentPreview** (inkl. Renderer) +- **Sidebar:** Sidebar, SidebarItem, SidebarSubmenu, SidebarUser, Styles, Logic, Types +- **Dashboard/DashboardChat:** teils entfernt/umgebaut (Playground-basiert) +- **Connections, Dateien, Mitglieder, PageManager, Popup, Prompts:** entfernt oder nach core/Pages migriert +- **Speech:** SpeechConfirmation, SpeechInfo, SpeechSettings, SpeechSignUp +- **TestSharepoint:** Tabelle, Logic, Interfaces +- **Workflows:** WorkflowsTable, workflowsLogic, workflowsTypes +- **UiComponents:** AutoScroll, Button, ConnectedFilesList, CopyableTruncatedValue, DragDropOverlay, DropdownSelect, InfoMessageOverlay, LocationInput, Log/LogMessage, MapView, Messages/ChatMessages, ParcelInfoPanel, Popup, Tabs, TextField, Toast, ViewForm, VoiceLanguageSelect, WorkflowStatus +- **settings:** settingsUser + +### Hooks +- Neu/erweitert: `useAccessRules`, `useAdminMandates`, `useAdminRbacRoles`, `useAdminRbacRules`, `useAuthentication`, `useAutomations`, `useChatbot`, `useConnections`, `useCurrentInstance`, `useFeatureAccess`, `useFiles`, `useInstancePermissions`, `useInvitations`, `useMandateRoles`, `useMandates`, `useNavigation`, `useNotifications`, `usePek`, `usePekTables`, `usePermissions`, `usePlayground`, `usePrompts`, `useRbacExportImport`, `useResizablePanels`, `useRoles`, `useSettings`, `useTrustee`, `useTrusteeOptions`, `useUserMandates`, `useUsers`, `useWorkflows` +- Playground: `useDashboardInputForm`, `useDashboardLogTree`, `useWorkflowLifecycle`, `useWorkflowPolling`, `useWorkflows`, `playgroundUtils` +- Entfernt: `useSharePointTest` + +### Seiten +- **Neu:** `Dashboard.tsx`, `FeatureView.tsx`, `GDPR.tsx`, `InvitePage.tsx`, `PasswordResetRequest.tsx`, `Reset.tsx`, `Settings.tsx` +- **Login, Register:** überarbeitet +- **Home:** Connections, Dashboard, Dateien, Einstellungen, Prompts, TeamBereich, TestSharepoint, Workflows entfernt/ausgelagert; `Home.tsx` angepasst +- **admin/:** AdminFeatureAccessPage, AdminFeatureInstanceUsersPage, AdminFeatureRolesPage, AdminInvitationsPage, AdminMandateRolePermissionsPage, AdminMandateRolesPage, AdminMandatesPage, AdminUserAccessOverviewPage, AdminUserMandatesPage, AdminUsersPage +- **basedata/:** ConnectionsPage, FilesPage, PromptsPage +- **migrate/:** ChatbotPage, PekPage, SpeechPage +- **views/trustee/:** TrusteeDashboardView, TrusteeDocumentsView, TrusteeExpenseImportView, TrusteeInstanceRolesView, TrusteePositionDocumentsView, TrusteePositionsView +- **workflows/:** AutomationsPage, PlaygroundPage, WorkflowsPage + +### Contexts, Stores, Utils, Locales +- **Contexts:** FileContext, PekContext, PekTablesContext, ToastContext, WorkflowSelectionContext +- **Stores:** featureStore +- **Utils:** attributeTypeMapper, csrfUtils, privilegeCheckers, time, userCache +- **Types:** mandate.ts +- **Locales:** de.ts, en.ts, fr.ts (erweitert) + +### Styles & Assets +- `src/styles/`: buttons.css, pages.module.css, themes (dark, light), assets/bg.jpg +- `src/assets/styles/light.css` entfernt +- `src/index.css`, `src/main.tsx` + +### Dokumentation +- `docs/DASHBOARD_LOG_POLLING_DOCUMENTATION.md` (neu) +- `documentation/sidebar.md` (entfernt) +- `.cursor/plans/implement_rbac_roles_page_*.plan.md` (Cursor-Plan) + +--- + +## Commit-Historie (chronologisch) + +| Datum | Commit | Nachricht | +|-------|--------|-----------| +| 2025-09-10 | 0bd6091 | updated cofig logic | +| 2025-09-15 | 9fc33c7 | feat: added speech integration prototype | +| 2025-09-16 | 9e7c3b2 | implemented feedback | +| 2025-09-18 | 41aa0fd | minor bugfixing | +| 2025-10-01 | 05f51c4 | working on action button | +| 2025-10-08 | b238ab8 | fixed action buttons | +| 2025-10-12 | 6988984 | finished files page | +| 2025-10-12 | 9519fed | pushing to int | +| 2025-10-12 | 8a0e5f8 | fix: ready for build | +| 2025-12-01 | 101b306 | added PEK pages | +| 2025-12-01 | aa34508 | updated the table view | +| 2025-12-15 | aaf64b8 | resumed backend integration, RBAC focus | +| 2025-12-15 | f8d5c0a | fix: geolinien outline | +| 2025-12-15 | 78889bf | fix: collapsed sidebar | +| 2025-12-22 | bfbe3f8 | PEK updates | +| 2025-12-30 | cf76e89 | pek update | +| 2025-12-30 | 94e8681 | fix: centralized workflow state management on dashboard page | +| 2025-12-30 | 14273c2 | Merge PR #2 feat/real-estate | +| 2025-12-30 | d3c950d | fix: consolidated privilegechecker and usepermissions hook | +| 2026-01-02 | 641930b | updated log rendering | +| 2026-01-02 | 401c088 | fix: fixed styling of log messages | +| 2026-01-02 | ae6a634 | feature: show workflow stats | +| 2026-01-05 | c76e7ef | feat: completely build up althaus page | +| 2026-01-05 | 079d398 | fix: build errors removed | +| 2026-01-05 | 6315c9a | fix: constant reload | +| 2026-01-05 | 6c90a00 | fix: another build error | +| 2026-01-05 | 05508cc | fix: privilege caching led to no pages showing | +| 2026-01-05 | 826eead | fix: added more rolelabel logging | +| 2026-01-05 | 48754d6 | fix: typescript build errors | +| 2026-01-05 | fc55a25 | fix: added more rolelabel logging | +| 2026-01-05 | 5f22c7b | fix: added more rolelabel logging | +| 2026-01-05 | eb280db | feat: completely build up althaus page | +| 2026-01-05 | c80ad96 | Rename PEK tabs: Projects and Data Management | +| 2026-01-05 | dd79895 | Merge int | +| 2026-01-05 | b0826a3 | feat: weiter chatbot implementiert | +| 2026-01-05 | 23508ea | fix: merge conflicts | +| 2026-01-05 | 350cc7b | fix: geolinien outline | +| 2026-01-05 | 407a3c4 | PEK updates | +| 2026-01-05 | c5a82dd | feat: multiselect parcels and create projects | +| 2026-01-09 | 836b803 | fix: fixed and finished chatbot integration | +| 2026-01-09 | 3df83f0 | fix: button fix | +| 2026-01-12 | 7d794ef | Merge feat/chatbot into int | +| 2026-01-12 | 5808bd4 | fixed merge conflicts | +| 2026-01-12 | 239fd32 | fix: readded deleted code, fixed build | +| 2026-01-12 | be3844f | feat: privilege checker into real estate pages | +| 2026-01-12 | eaf69f4 | feat/fix: added admin pages, fixed sidebar width | +| 2026-01-12 | 64d14af | feat: finished admin pages | +| 2026-01-12 | acdcf2c | fix: moved team-members file to correct place | +| 2026-01-12 | 06ffce8 | fix: fixed build | +| 2026-01-13 | 9fc0c9b | user magic link implemented | +| 2026-01-13 | 7d2808d | hotfix | +| 2026-01-13 | b2c38e7 | Fixed UI issues | +| 2026-01-13 | 71666d2 | hotfixes | +| 2026-01-13 | de98b86 | hotfixes | +| 2026-01-13 | c5d60c4 | node-version 20 | +| 2026-01-13 | 2b96ab7 | fixed trustee access | +| 2026-01-14 | 54ba020 | fix: fixed formgenerator layout and design | +| 2026-01-17 | 8033ca9 | prepared multimandate | +| 2026-01-20 | 70c84dd | revised ui components | +| 2026-01-21 | 7f07a55 | saas mandates core done | +| 2026-01-21 | 537b624 | fixed uid mapping to id | +| 2026-01-21 | d387322 | serverside filter and sort for form generic | +| 2026-01-21 | 34d4646 | generic form table scroll lock for headers | +| 2026-01-21 | f99b6b7 | saas multi mandate tested | +| 2026-01-22 | b207c0c | dyn options in api | +| 2026-01-23 | dc4b475 | refactored pages ui access with saas mandates | +| 2026-01-24 | cc8770d | reference fixes | +| 2026-01-24 | 41e02b5 | fixed automation and trustee | +| 2026-01-24 | 5952074 | access rules editor enhanced | +| 2026-01-24 | 6a406d8 | fixes | +| 2026-01-25 | bf4ddc6 | rbac rules tested and fixed | +| 2026-01-25 | 2b220fe | gpdr compliancy implemented | +| 2026-01-26 | 28af4cb | mandate invitation and notification system | +| 2026-01-26 | f41e6d0 | fixed ai call end to end with saas multimandate | + +--- + +## Hinweise für das PR-Review + +1. **Breite Änderung:** Viele Dateien und neue Strukturen; Fokus auf PageManager, Admin, Trustee und Workflow/Playground empfohlen. +2. **Auth & Mandate:** Magic Link, Reset-Flow und Mandatenwechsel sollten manuell geprüft werden. +3. **RBAC:** Admin RBAC-Seiten und Access Rules Editor sind kritisch für Berechtigungen. +4. **Build & Lint:** `npm run build` und Linter im CI prüfen. +5. **Doku:** `docs/DASHBOARD_LOG_POLLING_DOCUMENTATION.md` für Playground/Logging konsultieren. + +--- + +*Bericht erstellt aus der Git-Historie `main..HEAD` im Repository `frontend_nyla` (Branch `feat/saas-multi-tenant-mandates`).* diff --git a/docs/i18n-remaining-items.md b/docs/i18n-remaining-items.md new file mode 100644 index 0000000..c853c42 --- /dev/null +++ b/docs/i18n-remaining-items.md @@ -0,0 +1,182 @@ +# i18n — Verbleibende statische Texte + +> Stand: 2026-04-08 +> Diese Stellen verwenden noch hardcoded Strings in Object-Literalen, Arrays oder Hook-Defaults. +> Sie können nicht einfach mit `t()` gewrapped werden, da sie ausserhalb des React-Render-Kontexts definiert sind. +> **Lösung:** Array/Object in die Komponente verschieben oder eine Factory-Funktion `(t) => [...]` nutzen. + +--- + +## 1. Hook-Defaults (`useConfirm`, `usePrompt`) + +Diese Defaults propagieren in die gesamte App. Ein Fix hier wirkt global. + +| Datei | Zeile | Property | Text | +|-------|-------|----------|------| +| `hooks/useConfirm.tsx` | 26 | `title` | `'Bestätigung'` | +| `hooks/useConfirm.tsx` | 27 | `confirmLabel` | `'Bestätigen'` | +| `hooks/useConfirm.tsx` | 28 | `cancelLabel` | `'Abbrechen'` | +| `hooks/usePrompt.tsx` | 29 | `title` | `'Eingabe'` | +| `hooks/usePrompt.tsx` | 30 | `confirmLabel` | `'OK'` | +| `hooks/usePrompt.tsx` | 31 | `cancelLabel` | `'Abbrechen'` | + +--- + +## 2. Monatsnamen + +| Datei | Zeilen | Kontext | +|-------|--------|---------| +| `pages/billing/BillingDashboard.tsx` | 182–193 | Monats-Select: `'Januar'` bis `'Dezember'` (12 Einträge) | +| `components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx` | 536–541 | Monats-Select: `'Januar'` bis `'Dezember'` (12 Einträge) | + +--- + +## 3. Tab-Labels (statische Arrays ausserhalb Komponente) + +| Datei | Zeilen | Labels | +|-------|--------|--------| +| `pages/Settings.tsx` | 23–27 | `'Profil'`, `'Darstellung'`, `'Stimme & Sprache'`, `'Neutralisierung (lokal)'`, `'Datenschutz'` | +| `pages/views/workspace/WorkspaceSettingsPage.tsx` | 16–17 | `'Generelle Einstellungen'`, `'Neutralisierung (Workspace)'` | +| `pages/views/neutralization/NeutralizationView.tsx` | 744–745 | `'Configuration'`, `'Playground'` | + +--- + +## 4. Spalten-Definitionen (Column-Arrays) + +| Datei | Zeilen | Labels | +|-------|--------|--------| +| `pages/admin/AdminLanguagesPage.tsx` | 29–32 | `'Code'`, `'Bezeichnung'`, `'Status'`, `'Einträge'` | +| `pages/admin/AdminSubscriptionsPage.tsx` | 13–23 | `'Mandant'`, `'Plan'`, `'Status'`, `'Wiederkehrend'`, `'User'`, `'Instanzen'`, `'Revenue/Mt (CHF)'`, `'Gestartet'`, `'Periodenende'`, `'Preis/User'`, `'Preis/Instanz'` | +| `pages/admin/AdminUserMandatesPage.tsx` | 104–144 | `'Benutzername'`, `'E-Mail'`, `'Vollständiger Name'`, `'Rollen'`, `'Aktiv'` | +| `pages/admin/AdminMandateRolesPage.tsx` | 106–124 | `'Bezeichnung'`, `'Beschreibung'`, `'Geltungsbereich'` | +| `pages/admin/AdminInvitationsPage.tsx` | 90–155 | `'Benutzername'`, `'E-Mail'`, `'Rollen'`, `'Gültig bis'`, `'Verwendet'`, `'Erstellt'` | +| `pages/admin/AdminFeatureRolesPage.tsx` | 138–155 | `'Rollen-Label'`, `'Beschreibung'`, `'Feature'` | +| `pages/admin/AdminFeatureInstanceUsersPage.tsx` | 205–245 | `'Benutzername'`, `'E-Mail'`, `'Vollständiger Name'`, `'Rollen'`, `'Aktiv'` | +| `pages/admin/AdminFeatureAccessPage.tsx` | 91–104 | `'Name'`, `'Feature'`, `'Aktiv'` | +| `pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx` | 184–235 | `'Workflow'`, `'Aktiv'`, `'Läuft'`, `'Steht bei'`, `'Erstellt'`, `'Zuletzt gestartet'`, `'Läufe'` | +| `pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx` | 174–202 | `'Vorlage'`, `'Scope'`, `'Freigegeben'`, `'Erstellt von'`, `'Erstellt'` | + +--- + +## 5. Formular-Feld-Definitionen (AttributeDefinition-Arrays) + +| Datei | Zeilen | Labels | +|-------|--------|--------| +| `pages/Settings.tsx` | 56–58 | `'Vollstaendiger Name'`, `'E-Mail-Adresse'`, `'Sprache'` + descriptions + placeholders | +| `pages/admin/wizards/FeatureInstanceWizard.tsx` | 75–78 | `'Mandant'`, `'Feature'`, `'Bezeichnung'`, `'Aktiv'` | +| `pages/admin/InstanceDetailModal.tsx` | 186–279 | `'Benutzer'`, `'Rollen'`, `'Aktiv'`, `'Einstellungen'`, `'Bezeichnung'`, `'Aktiviert'` | +| `pages/admin/AdminMandateRolesPage.tsx` | 165–171 | `'Geltungsbereich'`, `'Nur dieser Mandant'`, `'Template (wird bei neuen Mandanten kopiert)'` | +| `pages/admin/AdminMandateRolePermissionsPage.tsx` | 219–221 | `'Mandanten-Rollen'`, `'Alle (inkl. Templates)'`, `'Nur Templates'` | +| `pages/admin/AdminFeatureRolesPage.tsx` | 173–205 | `'Rollen-Label'`, `'Beschreibung'` + descriptions | +| `pages/admin/AdminFeatureInstanceUsersPage.tsx` | 272–299 | `'Benutzer'`, `'Rollen'`, `'Aktiv'` | +| `pages/admin/AdminInvitationsPage.tsx` | 181 | `'Gültigkeitsdauer (Stunden)'` | +| `pages/admin/AdminFeatureAccessPage.tsx` | 629–636 | `'Bezeichnung'`, `'Aktiviert'` | + +--- + +## 6. Status-/Option-Maps (Object-Literale) + +| Datei | Zeilen | Kontext | +|-------|--------|---------| +| `pages/billing/SubscriptionTab.tsx` | 48–53 | Status-Map: `'Zahlung ausstehend'`, `'Geplant'`, `'Aktiv'`, `'Testphase'`, `'Abgelaufen'` | +| `components/FlowEditor/editor/CanvasHeader.tsx` | 40–42 | Status-Map: `'Entwurf'`, `'Veröffentlicht'`, `'Archiviert'` | +| `components/FlowEditor/editor/WorkflowConfigurationModal.tsx` | 17–20 | Trigger-Typen: `'Manueller Trigger'`, `'Formular'`, `'Zeitplan'`, `'Immer aktiv'` | +| `components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx` | 22–49 | Schedule-Optionen: `'Täglich'`, `'Werktage'`, `'Bestimmte Tage'`, `'Intervall'`, `'Sekunden'`, `'Minuten'`, `'Stunden'`, `'Tage'`, `'Jahre'` | +| `components/RbacExportImport/RbacExportImport.tsx` | 49–62 | Import-Modi: `'Zusammenführen'`, `'Nur hinzufügen'`, `'Ersetzen'` + descriptions | +| `components/AccessRules/AccessRulesEditor.tsx` | 633–636 | Tab-Labels: `'Daten'`, `'Ressourcen'` | +| `hooks/useAccessRules.tsx` | 23–26 | Scope-Labels: `'Keine'`, `'Eigene'`, `'Gruppe'`, `'Alle'` | + +--- + +## 7. Action-Button `title:`-Props (in Object-Literalen) + +| Datei | Zeilen | Titles | +|-------|--------|--------| +| `pages/admin/AdminUsersPage.tsx` | 200–212 | `'Bearbeiten'`, `'Löschen'`, `'Passwort-Link senden'` | +| `pages/admin/AdminUserMandatesPage.tsx` | 352–356 | `'Rollen bearbeiten'`, `'Aus Mandant entfernen'` | +| `pages/admin/AdminMandatesPage.tsx` | 127–234 | `'Mandant deaktivieren'`, `'Deaktivieren'`, `'Hard Delete (irreversibel)'`, `'Endgültig löschen'`, `'Bearbeiten'`, `'Deaktivieren (Soft-Delete)'` | +| `pages/admin/AdminMandateRolesPage.tsx` | 430–435 | `'Rolle bearbeiten'`, `'Rolle löschen'` | +| `pages/admin/AdminInvitationsPage.tsx` | 354–362 | `'Einladung widerrufen'`, `'Einladungs-Link anzeigen'` | +| `pages/admin/AdminFeatureRolesPage.tsx` | 372–384 | `'Rolle bearbeiten'`, `'Rolle löschen'`, `'Berechtigungen verwalten'` | +| `pages/admin/AdminFeatureInstanceUsersPage.tsx` | 535–539 | `'Rollen bearbeiten'`, `'Aus Instanz entfernen'` | +| `pages/admin/AdminFeatureAccessPage.tsx` | 457–471 | `'Instanz löschen'`, `'Instanz bearbeiten'`, `'Rollen synchronisieren'` | +| `pages/admin/PermissionMatrix.tsx` | 39 | `'Benutzer entfernen'` | +| `pages/basedata/ConnectionsPage.tsx` | 324–347 | `'Bearbeiten'`, `'Löschen'`, `'Verbinden'`, `'Token erneuern'` | +| `pages/basedata/FilesPage.tsx` | 232–458 | `'Neuer Ordner'`, `'Bearbeiten'`, `'Löschen'`, `'Herunterladen'`, `'Vorschau'` | +| `pages/basedata/PromptsPage.tsx` | 215–225 | `'Duplizieren'`, `'Bearbeiten'`, `'Löschen'` | +| `pages/billing/AdminSubscriptionsPage.tsx` | 67 | `'Sofort kündigen'` | +| `pages/views/trustee/TrusteePositionsView.tsx` | 455–467 | `'Bearbeiten'`, `'Löschen'`, `'In Buchhaltung synchronisieren'` | +| `pages/views/trustee/TrusteePositionDocumentsView.tsx` | 192–198 | `'Verknüpfung bearbeiten'`, `'Verknüpfung entfernen'` | +| `pages/views/trustee/TrusteeDocumentsView.tsx` | 225–238 | `'Bearbeiten'`, `'Löschen'`, `'Herunterladen'` | +| `pages/views/realestate/RealEstateProjectsView.tsx` | 167–168 | `'Bearbeiten'`, `'Löschen'` | +| `pages/views/realestate/RealEstateParcelsView.tsx` | 186–194 | `'Bearbeiten'`, `'Löschen'` | +| `pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx` | 136–336 | `'Workflow umbenennen'`, `'Bearbeiten'`, `'Löschen'`, `'Umbenennen'`, `'Aktivieren'`, `'Deaktivieren'`, `'Ausführen'` | +| `pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx` | 149–289 | `'Vorlage umbenennen'`, `'Im Editor öffnen'`, `'Löschen'`, `'Umbenennen'`, `'Als Workflow kopieren'`, `'Scope ändern'` | +| `pages/views/chatbot/ChatbotConversationsView.tsx` | 88 | `'Konversation löschen'` | +| `components/FlowEditor/editor/Automation2FlowEditor.tsx` | 239 | `'Workflow speichern'` | +| `components/FolderTree/FolderTree.tsx` | 384, 768 | `'Neuer Ordner'` (prompt title) | + +--- + +## 8. Onboarding-Texte (Object-Literale) + +| Datei | Zeilen | Labels | +|-------|--------|--------| +| `components/OnboardingAssistant.tsx` | 99–149 | `'Mandant einrichten'`, `'Erstes Feature aktivieren'`, `'Erste Datenquelle einbinden'`, `'Ersten AI-Chat starten'` | + +--- + +## 9. ClickUp Node Config (Feld-Optionen) + +| Datei | Zeilen | Labels | +|-------|--------|--------| +| `components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx` | 786–794 | `'Titel (name)'`, `'Beschreibung'`, `'Status'`, `'Priorität (1–4)'`, `'Fälligkeit (Datum oder ms)'`, `'Zeitschätzung (Stunden)'`, `'Zeitschätzung (ms)'`, `'Zugewiesene'`, `'Benutzerdefiniertes Feld'` | + +--- + +## 10. Sonstige Einzel-Stellen + +| Datei | Zeile | Property | Text | +|-------|-------|----------|------| +| `pages/admin/ChatbotConfigSection.tsx` | 58 | `label` | `'Althaus Preprocessor'` | +| `pages/views/trustee/TrusteePositionsView.tsx` | 167 | `label` | `'Belege'` | +| `pages/views/trustee/TrusteePositionsView.tsx` | 232 | `label` | `'Sync-Status'` | +| `pages/views/trustee/TrusteePositionsView.tsx` | 445 | `label` | `'Buchhaltung synchronisieren'` | +| `pages/views/trustee/TrusteeExpenseImportView.tsx` | 361 | `label` | `'Daily at 22:00'` | +| `pages/basedata/PromptsPage.tsx` | 81 | `label` | `'Created By'` | +| `pages/basedata/FilesPage.tsx` | 152 | `label` | `'Created By'` | +| `components/FlowEditor/nodes/start/FormStartNodeConfig.tsx` | 22 | `label` | `'Feld 1'` | +| `components/FlowEditor/nodes/start/FormStartNodeConfig.tsx` | 116 | `label` | `'Neues Feld'` | + +--- + +## 11. Sprach-/Locale-Listen (Eigenname-Labels — evtl. NICHT übersetzen) + +> Diese Listen enthalten Sprachnamen in der jeweiligen Sprache (Endonym). Sie werden typischerweise **nicht** übersetzt, da der User die Sprache in ihrer Originalbezeichnung erkennen soll. + +| Datei | Zeilen | Kontext | +|-------|--------|---------| +| `pages/Settings.tsx` | 50–52, 563–565 | Fallback-Sprachoptionen: `'Deutsch'`, `'English'`, `'Français'` | +| `pages/views/workspace/WorkspaceInput.tsx` | 16–27 | STT-Sprachliste (12 Sprachen) | +| `pages/admin/AdminLanguagesPage.tsx` | 38–65 | Alle verfügbaren Sprach-Codes mit Endonymen | +| `components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx` | 23–32 | Voice-Sprachliste mit Endonymen | +| `components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx` | 672–675 | Fallback-Sprachoptionen | + +--- + +## Zusammenfassung + +| Kategorie | Anzahl Stellen | Dateien | +|-----------|---------------|---------| +| Hook-Defaults | 6 | 2 | +| Monatsnamen | 24 | 2 | +| Tab-Labels | 9 | 3 | +| Spalten-Definitionen | ~55 | 10 | +| Formular-Felder | ~30 | 9 | +| Status-/Option-Maps | ~30 | 7 | +| Action-Button titles | ~65 | 23 | +| Onboarding-Texte | 4 | 1 | +| ClickUp-Felder | 9 | 1 | +| Sonstige | 9 | 5 | +| Sprach-Listen (evtl. nicht übersetzen) | ~60 | 5 | +| **Total (ohne Sprach-Listen)** | **~241** | **~45 Dateien** | diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..0533123 --- /dev/null +++ b/env.d.ts @@ -0,0 +1,6 @@ +/// + +interface ImportMetaEnv { + readonly VITE_API_BASE_URL?: string + readonly VITE_APP_NAME?: string +} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..ab679c5 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,34 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + 'no-restricted-imports': [ + 'warn', + { + patterns: [], + }, + ], + }, + }, +) diff --git a/index.html b/index.html new file mode 100644 index 0000000..8ca96ed --- /dev/null +++ b/index.html @@ -0,0 +1,17 @@ + + + + + + + <%- VITE_APP_NAME %> + + + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d1fd27b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,9200 @@ +{ + "name": "frontend_nyla_new", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend_nyla_new", + "version": "0.0.0", + "dependencies": { + "@monaco-editor/react": "^4.7.0", + "@types/leaflet": "^1.9.21", + "@xstate/react": "^5.0.0", + "axios": "^1.8.3", + "docx-preview": "^0.3.7", + "dotenv": "^16.0.3", + "express": "^4.18.2", + "framer-motion": "^12.7.3", + "fs": "^0.0.1-security", + "js-cookie": "^3.0.5", + "jsonwebtoken": "^9.0.2", + "jwt-decode": "^4.0.0", + "leaflet": "^1.9.4", + "mammoth": "^1.12.0", + "motion": "^12.7.3", + "pg": "^8.8.0", + "proj4": "^2.20.2", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-dropzone": "^14.3.8", + "react-icons": "^5.5.0", + "react-leaflet": "^5.0.0", + "react-markdown": "^9.1.0", + "react-router-dom": "^7.7.1", + "recharts": "^3.7.0", + "remark-gfm": "^4.0.1", + "xlsx": "^0.18.5", + "xstate": "^5.20.1" + }, + "devDependencies": { + "@eslint/js": "^9.30.1", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@testing-library/user-event": "^14.6.1", + "@types/node": "^24.7.2", + "@types/proj4": "^2.5.6", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.6.0", + "@vitest/coverage-v8": "^2.1.9", + "eslint": "^9.30.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "jsdom": "^25.0.1", + "typescript": "~5.8.3", + "typescript-eslint": "^8.35.1", + "vite": "^5.4.10", + "vite-plugin-html": "^3.2.2", + "vitest": "^2.1.9" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", + "dev": true + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", + "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "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", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", + "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@monaco-editor/loader": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.7.0.tgz", + "integrity": "sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==", + "dependencies": { + "state-local": "^1.0.6" + } + }, + "node_modules/@monaco-editor/react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.7.0.tgz", + "integrity": "sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==", + "dependencies": { + "@monaco-editor/loader": "^1.5.0" + }, + "peerDependencies": { + "monaco-editor": ">= 0.25.0 < 1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@react-leaflet/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-3.0.0.tgz", + "integrity": "sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ==", + "license": "Hippocratic-2.1", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.2.tgz", + "integrity": "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@standard-schema/utils": "^0.3.0", + "immer": "^11.0.0", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@reduxjs/toolkit/node_modules/immer": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.3.tgz", + "integrity": "sha512-6jQTc5z0KJFtr1UgFpIL3N9XSC3saRaI9PwWtzM2pSqkNGtiNkYY2OSwkOGDK2XcTRcLb1pi/aNkKZz0nxVH4Q==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==" + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true + }, + "node_modules/@testing-library/react": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", + "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "peer": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/leaflet": { + "version": "1.9.21", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.21.tgz", + "integrity": "sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz", + "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.14.0" + } + }, + "node_modules/@types/proj4": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@types/proj4/-/proj4-2.5.6.tgz", + "integrity": "sha512-zfMrPy9fx+8DchqM0kIUGeu2tTVB5ApO1KGAYcSGFS8GoqRIkyL41xq2yCx/iV3sOLzo7v4hEgViSLTiPI1L0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.1.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", + "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", + "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "optional": true, + "peer": true + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.38.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.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" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.9.tgz", + "integrity": "sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.7", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", + "std-env": "^3.8.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "2.1.9", + "vitest": "2.1.9" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", + "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", + "dev": true, + "dependencies": { + "@vitest/spy": "2.1.9", + "@vitest/utils": "2.1.9", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", + "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", + "dev": true, + "dependencies": { + "@vitest/spy": "2.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", + "dev": true, + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", + "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", + "dev": true, + "dependencies": { + "@vitest/utils": "2.1.9", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/@vitest/snapshot": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", + "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "2.1.9", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/@vitest/spy": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", + "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", + "dev": true, + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", + "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "2.1.9", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz", + "integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@xstate/react": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@xstate/react/-/react-5.0.5.tgz", + "integrity": "sha512-MfF/cPHa3lNKJmGFpUycMbNP25qBXyZXrxc8VYNroAu0Nnk0DV5WzAkTcQXma0xEC4dSwsoA+YQuKbZATtqvgg==", + "license": "MIT", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.2", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "xstate": "^5.19.4" + }, + "peerDependenciesMeta": { + "xstate": { + "optional": true + } + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/attr-accept": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", + "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "engines": { + "node": ">= 16" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dingbat-to-unicode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz", + "integrity": "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==" + }, + "node_modules/docx-preview": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/docx-preview/-/docx-preview-0.3.7.tgz", + "integrity": "sha512-Lav69CTA/IYZPJTsKH7oYeoZjyg96N0wEJMNslGJnZJ+dMUZK85Lt5ASC79yUlD48ecWjuv+rkcmFt6EVPV0Xg==", + "dependencies": { + "jszip": ">=3.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "peer": true + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz", + "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==", + "peer": true, + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz", + "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/duck": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz", + "integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==", + "dependencies": { + "underscore": "^1.13.1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.191", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.191.tgz", + "integrity": "sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-toolkit": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.44.0.tgz", + "integrity": "sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", + "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.31.0", + "@eslint/plugin-kit": "^0.3.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", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==" + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-selector": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", + "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", + "license": "MIT", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/framer-motion": { + "version": "12.23.9", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.9.tgz", + "integrity": "sha512-TqEHXj8LWfQSKqfdr5Y4mYltYLw96deu6/K9kGDd+ysqRJPNwF9nb5mZcrLmybHbU7gcJ+HQar41U3UTGanbbQ==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.9", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==", + "license": "ISC" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "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-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "node_modules/immer": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", + "dev": true, + "dependencies": { + "cssstyle": "^4.1.0", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.12", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/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==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lop": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.2.tgz", + "integrity": "sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==", + "dependencies": { + "duck": "^0.1.12", + "option": "~0.2.1", + "underscore": "^1.13.1" + } + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mammoth": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.12.0.tgz", + "integrity": "sha512-cwnK1RIcRdDMi2HRx2EXGYlxqIEh0Oo3bLhorgnsVJi2UkbX1+jKxuBNR9PC5+JaX7EkmJxFPmo6mjLpqShI2w==", + "dependencies": { + "@xmldom/xmldom": "^0.8.6", + "argparse": "~1.0.3", + "base64-js": "^1.5.1", + "bluebird": "~3.4.0", + "dingbat-to-unicode": "^1.0.1", + "jszip": "^3.7.1", + "lop": "^0.4.2", + "path-is-absolute": "^1.0.0", + "underscore": "^1.13.1", + "xmlbuilder": "^10.0.0" + }, + "bin": { + "mammoth": "bin/mammoth" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/mammoth/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/marked": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", + "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", + "peer": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mgrs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mgrs/-/mgrs-1.0.0.tgz", + "integrity": "sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA==", + "license": "MIT" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/monaco-editor": { + "version": "0.55.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.55.1.tgz", + "integrity": "sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==", + "peer": true, + "dependencies": { + "dompurify": "3.2.7", + "marked": "14.0.0" + } + }, + "node_modules/motion": { + "version": "12.23.9", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.9.tgz", + "integrity": "sha512-5PDgsbNtZ4cpfew3STYL0p06rIiy8vOveQuQBXUAa2+m1WMzjf65DXYn6eo88dM2s+XLxAQq3ZiOjcnKMACEtQ==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.23.9", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "12.23.9", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.9.tgz", + "integrity": "sha512-6Sv++iWS8XMFCgU1qwKj9l4xuC47Hp4+2jvPfyTXkqDg2tTzSgX6nWKD4kNFXk0k7llO59LZTPuJigza4A2K1A==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-html-parser": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz", + "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^4.2.1", + "he": "1.2.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", + "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/option": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz", + "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "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==", + "dev": true + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/pg": { + "version": "8.16.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", + "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.9.1", + "pg-pool": "^3.10.1", + "pg-protocol": "^1.10.3", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.2.7" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "peer": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proj4": { + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.20.2.tgz", + "integrity": "sha512-ipfBRfQly0HhHTO7hnC1GfaX8bvroO7VV4KH889ehmADSE8C/qzp2j+Jj6783S9Tj6c2qX/hhYm7oH0kgXzBAA==", + "license": "MIT", + "dependencies": { + "mgrs": "1.0.0", + "wkt-parser": "^1.5.1" + }, + "funding": { + "url": "https://github.com/sponsors/ahocevar" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-dropzone": { + "version": "14.3.8", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.8.tgz", + "integrity": "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==", + "license": "MIT", + "dependencies": { + "attr-accept": "^2.2.4", + "file-selector": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" + } + }, + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-leaflet": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-5.0.0.tgz", + "integrity": "sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw==", + "license": "Hippocratic-2.1", + "dependencies": { + "@react-leaflet/core": "^3.0.0" + }, + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } + }, + "node_modules/react-markdown": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.1.0.tgz", + "integrity": "sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.7.1.tgz", + "integrity": "sha512-jVKHXoWRIsD/qS6lvGveckwb862EekvapdHJN/cGmzw40KnJH5gg53ujOJ4qX6EKIK9LSBfFed/xiQ5yeXNrUA==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.7.1.tgz", + "integrity": "sha512-bavdk2BA5r3MYalGKZ01u8PGuDBloQmzpBZVhDLrOOv1N943Wq6dcM9GhB3x8b7AbqPMEezauv4PeGkAJfy7FQ==", + "license": "MIT", + "dependencies": { + "react-router": "7.7.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-router/node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/recharts": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.7.0.tgz", + "integrity": "sha512-l2VCsy3XXeraxIID9fx23eCb6iCBsxUQDnE8tWm6DFdszVAO7WVY/ChAD9wVit01y6B2PMupYiMmQwhgPHc9Ew==", + "dependencies": { + "@reduxjs/toolkit": "1.x.x || 2.x.x", + "clsx": "^2.1.1", + "decimal.js-light": "^2.5.1", + "es-toolkit": "^1.39.3", + "eventemitter3": "^5.0.1", + "immer": "^10.1.1", + "react-redux": "8.x.x || 9.x.x", + "reselect": "5.1.1", + "tiny-invariant": "^1.3.3", + "use-sync-external-store": "^1.2.2", + "victory-vendor": "^37.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/state-local": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", + "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/terser": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", + "integrity": "sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^10.2.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", + "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.38.0", + "@typescript-eslint/parser": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/underscore": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", + "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==" + }, + "node_modules/undici-types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/victory-vendor": { + "version": "37.3.6", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz", + "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", + "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-node/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/vite-plugin-html": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz", + "integrity": "sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^4.2.0", + "colorette": "^2.0.16", + "connect-history-api-fallback": "^1.6.0", + "consola": "^2.15.3", + "dotenv": "^16.0.0", + "dotenv-expand": "^8.0.2", + "ejs": "^3.1.6", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.1", + "html-minifier-terser": "^6.1.0", + "node-html-parser": "^5.3.3", + "pathe": "^0.2.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vitest": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", + "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", + "dev": true, + "dependencies": { + "@vitest/expect": "2.1.9", + "@vitest/mocker": "2.1.9", + "@vitest/pretty-format": "^2.1.9", + "@vitest/runner": "2.1.9", + "@vitest/snapshot": "2.1.9", + "@vitest/spy": "2.1.9", + "@vitest/utils": "2.1.9", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.9", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.9", + "@vitest/ui": "2.1.9", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wkt-parser": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/wkt-parser/-/wkt-parser-1.5.2.tgz", + "integrity": "sha512-1ZUiV1FTwSiSrgWzV9KXJuOF2BVW91KY/mau04BhnmgOdroRQea7Q0s5TVqwGLm0D2tZwObd/tBYXW49sSxp3Q==", + "license": "MIT" + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlbuilder": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", + "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xstate": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/xstate/-/xstate-5.20.1.tgz", + "integrity": "sha512-i9ZpNnm/XhCOMUxae1suT8PjYNTStZWbhmuKt4xeTPaYG5TS0Fz0i+Ka5yxoNPpaHW3VW6JIowrwFgSTZONxig==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/xstate" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..cd3e78e --- /dev/null +++ b/package.json @@ -0,0 +1,72 @@ +{ + "name": "frontend_nyla_new", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --port 5176 --mode dev", + "dev:prod": "vite --port 5176 --mode prod", + "dev:int": "vite --port 5176 --mode int", + "build": "tsc -b && vite build", + "build:prod": "tsc -b && vite build --mode prod", + "build:int": "tsc -b && vite build --mode int", + "lint": "eslint .", + "preview": "vite preview", + "test": "vitest run", + "test:watch": "vitest", + "test:ui": "vitest --ui", + "test:coverage": "vitest run --coverage" + }, + "dependencies": { + "@monaco-editor/react": "^4.7.0", + "@types/leaflet": "^1.9.21", + "@xstate/react": "^5.0.0", + "axios": "^1.8.3", + "docx-preview": "^0.3.7", + "dotenv": "^16.0.3", + "express": "^4.18.2", + "framer-motion": "^12.7.3", + "fs": "^0.0.1-security", + "js-cookie": "^3.0.5", + "jsonwebtoken": "^9.0.2", + "jwt-decode": "^4.0.0", + "leaflet": "^1.9.4", + "mammoth": "^1.12.0", + "motion": "^12.7.3", + "pg": "^8.8.0", + "proj4": "^2.20.2", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-dropzone": "^14.3.8", + "react-icons": "^5.5.0", + "react-leaflet": "^5.0.0", + "react-markdown": "^9.1.0", + "react-router-dom": "^7.7.1", + "recharts": "^3.7.0", + "remark-gfm": "^4.0.1", + "xlsx": "^0.18.5", + "xstate": "^5.20.1" + }, + "devDependencies": { + "@eslint/js": "^9.30.1", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@testing-library/user-event": "^14.6.1", + "@types/node": "^24.7.2", + "@types/proj4": "^2.5.6", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.6.0", + "@vitest/coverage-v8": "^2.1.9", + "eslint": "^9.30.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "jsdom": "^25.0.1", + "typescript": "~5.8.3", + "typescript-eslint": "^8.35.1", + "vite": "^5.4.10", + "vite-plugin-html": "^3.2.2", + "vitest": "^2.1.9" + } +} diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000..9d36f52 Binary files /dev/null and b/public/favicon.png differ diff --git a/public/logos/poweron-logo.png b/public/logos/poweron-logo.png new file mode 100644 index 0000000..2a7aea3 Binary files /dev/null and b/public/logos/poweron-logo.png differ diff --git a/public/poweron-home.html b/public/poweron-home.html new file mode 100644 index 0000000..2fb440a --- /dev/null +++ b/public/poweron-home.html @@ -0,0 +1,195 @@ + + + + + + + PowerOn AI Platform - Home + + + + +
+
+

PowerOn AI Platform

+

Intelligent Workflow Automation & Multi-Agent Collaboration

+
+ +
+

What is PowerOn?

+

+ PowerOn is an advanced AI-powered platform that revolutionizes how businesses manage workflows, + collaborate with AI agents, and automate complex processes. Our platform combines cutting-edge + artificial intelligence with intuitive workflow design tools to help organizations work smarter, + not harder. +

+
+ +
+

Core Capabilities

+
+
+

AI Agent Management

+

Create, configure, and manage multiple AI agents for different business tasks and workflows.

+
+
+

Workflow Automation

+

Design and execute complex business processes with drag-and-drop workflow builder.

+
+
+

Document Processing

+

Intelligent document extraction, analysis, and generation powered by AI.

+
+
+

Multi-Platform Integration

+

Seamlessly connect with Microsoft 365, SharePoint, Outlook, and web services.

+
+
+
+ +
+

Who Benefits from PowerOn?

+

+ PowerOn is designed for businesses of all sizes that want to leverage AI to streamline operations, + improve productivity, and reduce manual workload. Whether you're managing customer relationships, + processing documents, or coordinating team workflows, PowerOn provides the tools you need to succeed + in the AI-powered future. +

+
+ +
+

Key Benefits

+
    +
  • Reduce manual work by up to 80% through intelligent automation
  • +
  • Improve accuracy and consistency in business processes
  • +
  • Enable 24/7 operation with AI agents that never sleep
  • +
  • Scale operations without proportional increase in human resources
  • +
  • Gain insights from AI-powered analytics and reporting
  • +
+
+ + + + +
+ + diff --git a/public/poweron-privacy.html b/public/poweron-privacy.html new file mode 100644 index 0000000..76ef25c --- /dev/null +++ b/public/poweron-privacy.html @@ -0,0 +1,295 @@ + + + + + + PowerOn AI Platform - Privacy Policy + + + + +
+
+

Privacy Policy

+

PowerOn AI Platform - Data Protection & Privacy

+
+ +
+ Last Updated: May 2026 +
+ +
+

Introduction

+

+ PowerOn AI Platform ("we," "our," or "us") is committed to protecting your privacy and ensuring + the security of your personal information. This Privacy Policy explains how we collect, use, + disclose, and safeguard your information when you use our AI-powered workflow automation platform. +

+
+ +
+

Information We Collect

+ +

Personal Information

+

We may collect the following types of personal information:

+
    +
  • Name and contact information (email address, phone number)
  • +
  • Company and job title information
  • +
  • Authentication credentials and account settings
  • +
  • Payment and billing information
  • +
+ +

Usage Information

+

We automatically collect information about how you use our platform:

+
    +
  • Workflow creation and execution data
  • +
  • AI agent interactions and configurations
  • +
  • Document processing activities
  • +
  • Platform access logs and performance metrics
  • +
+ +

Technical Information

+

We collect technical information to ensure platform functionality:

+
    +
  • Device and browser information
  • +
  • IP address and location data
  • +
  • Cookies and similar tracking technologies
  • +
  • System performance and error logs
  • +
+
+ +
+

How We Use Your Information

+

We use the collected information for the following purposes:

+
    +
  • Provide and maintain our AI platform services
  • +
  • Process and execute your workflow automations
  • +
  • Improve platform performance and user experience
  • +
  • Send important service updates and notifications
  • +
  • Provide customer support and technical assistance
  • +
  • Ensure platform security and prevent fraud
  • +
  • Comply with legal obligations and regulations
  • +
+
+ +
+

Data Sharing and Disclosure

+

We do not sell, trade, or rent your personal information to third parties. We may share your information only in the following circumstances:

+ +
+

Service Providers

+

We work with trusted third-party service providers who assist us in operating our platform, such as cloud hosting services, payment processors, and AI model providers. These providers are contractually obligated to protect your information.

+
+ +
+

Legal Requirements

+

We may disclose your information if required by law, court order, or government regulation, or to protect our rights, property, or safety.

+
+ +
+

Business Transfers

+

In the event of a merger, acquisition, or sale of assets, your information may be transferred as part of the business transaction.

+
+
+ +
+

Data Security

+

We implement comprehensive security measures to protect your information:

+
    +
  • Encryption of data in transit and at rest
  • +
  • Regular security audits and vulnerability assessments
  • +
  • Access controls and authentication mechanisms
  • +
  • Secure data centers and infrastructure
  • +
  • Employee training on data protection practices
  • +
+
+ +
+

Your Rights and Choices

+

You have the following rights regarding your personal information:

+
    +
  • Access: Request a copy of your personal information
  • +
  • Correction: Update or correct inaccurate information
  • +
  • Deletion: Request deletion of your personal information
  • +
  • Portability: Receive your data in a portable format
  • +
  • Opt-out: Unsubscribe from marketing communications
  • +
+
+ +
+

Data Retention

+

We retain your personal information only as long as necessary to:

+
    +
  • Provide our services to you
  • +
  • Comply with legal obligations
  • +
  • Resolve disputes and enforce agreements
  • +
  • Improve our platform and services
  • +
+

When we no longer need your information, we securely delete or anonymize it.

+
+ +
+

International Data Transfers

+

Your information may be transferred to and processed in countries other than your own. We ensure that such transfers comply with applicable data protection laws and implement appropriate safeguards to protect your information.

+
+ +
+

Children's Privacy

+

Our platform is not intended for use by children under the age of 13. We do not knowingly collect personal information from children under 13. If you believe we have collected such information, please contact us immediately.

+
+ +
+

Changes to This Policy

+

We may update this Privacy Policy from time to time. We will notify you of any material changes by posting the new policy on our platform and updating the "Last Updated" date. Your continued use of our platform after such changes constitutes acceptance of the updated policy.

+
+ +
+

Contact Us

+

If you have any questions about this Privacy Policy or our data practices, please contact us:

+
+

Email: p.motsch@poweron.swiss

+

Address:
+ PowerOn AG
+ Birmensdorferstrasse 94
+ CH-8003 Zürich
+ Switzerland +

+
+
+ + + + +
+ + diff --git a/public/poweron-terms.html b/public/poweron-terms.html new file mode 100644 index 0000000..c049dbe --- /dev/null +++ b/public/poweron-terms.html @@ -0,0 +1,338 @@ + + + + + + PowerOn AI Platform - Terms of Service + + + + +
+
+

Terms of Service

+

PowerOn AI Platform - Service Agreement & User Terms

+
+ +
+ Last Updated: May 2026 +
+ +
+

Acceptance of Terms

+

+ By accessing or using the PowerOn AI Platform ("Platform"), you agree to be bound by these Terms of Service + ("Terms"). If you do not agree to these Terms, you must not use our Platform. These Terms constitute a + legally binding agreement between you and PowerOn AI Platform ("we," "our," or "us"). +

+
+ +
+

Description of Service

+

+ PowerOn AI Platform is an AI-powered workflow automation and multi-agent collaboration platform that enables + users to create, manage, and execute automated business processes using artificial intelligence agents. +

+

Our Platform includes the following services:

+
    +
  • AI agent creation and management
  • +
  • Workflow design and automation tools
  • +
  • Document processing and analysis capabilities
  • +
  • Integration with third-party services and platforms
  • +
  • Analytics and reporting features
  • +
+
+ +
+

User Accounts and Registration

+ +

Account Creation

+

To use our Platform, you must create an account by providing accurate, current, and complete information. You are responsible for maintaining the confidentiality of your account credentials.

+ +

Account Security

+

You are responsible for all activities that occur under your account. You must immediately notify us of any unauthorized use of your account or any other security breach.

+ +

Account Termination

+

We reserve the right to terminate or suspend your account at any time for violation of these Terms or for any other reason at our sole discretion.

+
+ +
+

Acceptable Use Policy

+

You agree to use our Platform only for lawful purposes and in accordance with these Terms. You agree not to:

+ +
+

Prohibited Activities

+
    +
  • Use the Platform for any illegal or unauthorized purpose
  • +
  • Violate any applicable laws or regulations
  • +
  • Infringe upon the intellectual property rights of others
  • +
  • Attempt to gain unauthorized access to our systems
  • +
  • Interfere with or disrupt the Platform's operation
  • +
  • Use the Platform to transmit harmful or malicious code
  • +
  • Harass, abuse, or harm other users
  • +
+
+
+ +
+

User Content and Data

+ +

Content Ownership

+

You retain ownership of any content, data, or information you upload, create, or process through our Platform ("User Content").

+ +

Content License

+

By using our Platform, you grant us a limited, non-exclusive license to use your User Content solely for the purpose of providing our services to you.

+ +

Content Responsibility

+

You are solely responsible for the accuracy, legality, and appropriateness of your User Content. We do not review or monitor User Content and are not responsible for its content.

+
+ +
+

Service Availability and Limitations

+ +
+

Service Availability

+

We strive to maintain high service availability but do not guarantee uninterrupted access to our Platform. We may perform maintenance, updates, or modifications that may temporarily affect service availability.

+
+ +
+

Service Limitations

+

Our Platform is subject to reasonable usage limits and technical constraints. We reserve the right to implement usage limits, rate limiting, or other restrictions to ensure fair usage and system stability.

+
+
+ +
+

Intellectual Property Rights

+

+ The Platform, including its software, design, content, and functionality, is owned by PowerOn AI Platform + and is protected by intellectual property laws. You may not copy, modify, distribute, or create derivative + works based on our Platform without our express written consent. +

+
+ +
+

Third-Party Services and Integrations

+

+ Our Platform may integrate with third-party services, applications, or platforms. We are not responsible + for the availability, accuracy, or content of these third-party services. Your use of third-party services + is subject to their respective terms of service and privacy policies. +

+
+ +
+

Payment Terms

+ +

Pricing and Billing

+

Service pricing is available on our Platform and may be subject to change. We will provide reasonable notice of any price changes.

+ +

Payment Obligations

+

You agree to pay all fees associated with your use of our Platform. Failure to pay may result in service suspension or termination.

+ +

Refunds

+

Refund policies are determined by your subscription plan and are subject to our discretion and applicable laws.

+
+ +
+

Disclaimers and Limitations of Liability

+ +
+

Service Disclaimers

+

Our Platform is provided "as is" and "as available" without warranties of any kind. We disclaim all warranties, express or implied, including but not limited to warranties of merchantability, fitness for a particular purpose, and non-infringement.

+
+ +
+

Limitation of Liability

+

In no event shall PowerOn AI Platform be liable for any indirect, incidental, special, consequential, or punitive damages, including but not limited to loss of profits, data, or use, arising out of or relating to your use of our Platform.

+
+
+ +
+

Indemnification

+

+ You agree to indemnify, defend, and hold harmless PowerOn AI Platform and its officers, directors, + employees, and agents from and against any claims, damages, losses, liabilities, costs, and expenses + arising out of or relating to your use of our Platform or violation of these Terms. +

+
+ +
+

Governing Law and Dispute Resolution

+

+ These Terms are governed by and construed in accordance with the laws of the jurisdiction where + PowerOn AI Platform is incorporated. Any disputes arising from these Terms or your use of our Platform + shall be resolved through binding arbitration in accordance with applicable arbitration rules. +

+
+ +
+

Changes to Terms

+

+ We reserve the right to modify these Terms at any time. We will notify you of any material changes + by posting the updated Terms on our Platform. Your continued use of our Platform after such changes + constitutes acceptance of the updated Terms. +

+
+ +
+

Contact Information

+

If you have any questions about these Terms of Service, please contact us:

+
+

Email: p.motsch@poweron.swiss

+

Address:
+ PowerOn AG
+ Birmensdorferstrasse 94
+ CH-8003 Zürich
+ Switzerland +

+
+
+ + + + +
+ + diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/scripts/deploy-server.js b/scripts/deploy-server.js new file mode 100644 index 0000000..375c1dd --- /dev/null +++ b/scripts/deploy-server.js @@ -0,0 +1,30 @@ +import express from 'express'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { getAppName, getAppVersion, getAppEnvironment, isDebugMode } from '../config/serverConfig.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const app = express(); + +// Serve static files from current directory +app.use(express.static(path.join(__dirname))); + +// Handle React Router - send all requests to index.html +app.get('/*', function(req, res) { + res.sendFile(path.join(__dirname, 'index.html')); +}); + +// Use Azure's PORT environment variable or fallback to 8080 +const port = process.env.PORT || 8080; + +// Listen on all interfaces (important for Azure) +app.listen(port, '0.0.0.0', () => { + console.log(`🚀 ${getAppName()} Deploy Server running on port ${port}`); + console.log(`📦 Version: ${getAppVersion()}`); + console.log(`🌍 Environment: ${getAppEnvironment()}`); + console.log(`🐛 Debug Mode: ${isDebugMode() ? 'Enabled' : 'Disabled'}`); + console.log(`📁 Serving from: ${__dirname}`); + console.log(`🔧 Node Environment: ${process.env.NODE_ENV || 'development'}`); +}); \ No newline at end of file diff --git a/scripts/i18n_missing_report.json b/scripts/i18n_missing_report.json new file mode 100644 index 0000000..4ae0f16 --- /dev/null +++ b/scripts/i18n_missing_report.json @@ -0,0 +1,19322 @@ +{ + "version": 1, + "root": "frontend_nyla", + "generatedBy": "scan_i18n_missing.py", + "count": 2146, + "findings": [ + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 86, + "column": 21, + "kind": "string_literal", + "text": "Regel löschen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Regel löschen\"" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 140, + "column": 56, + "kind": "jsx_text", + "text": "Delete", + "context": "between tags, user-visible text node", + "line_content": " Delete" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 204, + "column": 16, + "kind": "string_literal", + "text": "z.B. data.feature.trustee.TrusteePosition", + "context": "string literal", + "line_content": " return 'z.B. data.feature.trustee.TrusteePosition';" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 206, + "column": 16, + "kind": "string_literal", + "text": "z.B. ui.feature.trustee.dashboard", + "context": "string literal", + "line_content": " return 'z.B. ui.feature.trustee.dashboard';" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 208, + "column": 16, + "kind": "string_literal", + "text": "z.B. resource.feature.trustee.documents.create", + "context": "string literal", + "line_content": " return 'z.B. resource.feature.trustee.documents.create';" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 220, + "column": 47, + "kind": "jsx_text", + "text": "Objekt auswählen", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 226, + "column": 26, + "kind": "string_literal", + "text": "← Aus Katalog wählen", + "context": "string literal", + "line_content": " {useCustom ? '← Aus Katalog wählen' : 'Freie Eingabe →'}" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 226, + "column": 51, + "kind": "string_literal", + "text": "Freie Eingabe →", + "context": "string literal", + "line_content": " {useCustom ? '← Aus Katalog wählen' : 'Freie Eingabe →'}" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 245, + "column": 30, + "kind": "jsx_text", + "text": "-- Global (alle Objekte) --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 280, + "column": 49, + "kind": "jsx_text", + "text": "Eigene (m)", + "context": "between tags, user-visible text node", + "line_content": "
Eigene (m)
" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 281, + "column": 49, + "kind": "jsx_text", + "text": "Gruppe (g)", + "context": "between tags, user-visible text node", + "line_content": "
Gruppe (g)
" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 282, + "column": 49, + "kind": "jsx_text", + "text": "Alle (a)", + "context": "between tags, user-visible text node", + "line_content": "
Alle (a)
" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 289, + "column": 88, + "kind": "string_literal", + "text": "Delete", + "context": "string literal", + "line_content": " const labels = { create: 'Create', read: 'Read', update: 'Update', delete: 'Delete' };" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 372, + "column": 27, + "kind": "string_literal", + "text": "Keine Daten-Regeln definiert", + "context": "string literal", + "line_content": " case 'DATA': return 'Keine Daten-Regeln definiert';" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 373, + "column": 25, + "kind": "string_literal", + "text": "Keine UI-Regeln definiert", + "context": "string literal", + "line_content": " case 'UI': return 'Keine UI-Regeln definiert';" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 374, + "column": 31, + "kind": "string_literal", + "text": "Keine Ressourcen-Regeln definiert", + "context": "string literal", + "line_content": " case 'RESOURCE': return 'Keine Ressourcen-Regeln definiert';" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 392, + "column": 25, + "kind": "string_literal", + "text": "Tabellenansicht", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Tabellenansicht\"" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 399, + "column": 25, + "kind": "string_literal", + "text": "Kartenansicht", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Kartenansicht\"" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 430, + "column": 31, + "kind": "string_literal", + "text": "Neue Regel", + "context": "string literal", + "line_content": " Klicken Sie auf \"Neue Regel\" um eine Berechtigung hinzuzufügen." + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 480, + "column": 25, + "kind": "string_literal", + "text": "JSON muss ein Array sein", + "context": "string literal", + "line_content": " throw new Error('JSON muss ein Array sein');" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 605, + "column": 43, + "kind": "string_literal", + "text": "Fehler beim Speichern", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Speichern');" + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 631, + "column": 26, + "kind": "string_literal", + "text": "Daten", + "context": "object property label: (e.g. table column)", + "line_content": " { id: 'DATA', label: 'Daten', icon: , count: groupedRules.DATA.length }," + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 632, + "column": 24, + "kind": "string_literal", + "text": "UI", + "context": "object property label: (e.g. table column)", + "line_content": " { id: 'UI', label: 'UI', icon: , count: groupedRules.UI.length }," + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 633, + "column": 30, + "kind": "string_literal", + "text": "Ressourcen", + "context": "object property label: (e.g. table column)", + "line_content": " { id: 'RESOURCE', label: 'Ressourcen', icon: , count: groupedRules.RESOURCE.length }," + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 634, + "column": 26, + "kind": "string_literal", + "text": "JSON", + "context": "object property label: (e.g. table column)", + "line_content": " { id: 'JSON', label: 'JSON', icon: , count: rules.length }," + }, + { + "file": "src/components/AccessRules/AccessRulesEditor.tsx", + "line": 642, + "column": 17, + "kind": "jsx_text", + "text": "Lade Berechtigungen...", + "context": "between tags, user-visible text node", + "line_content": " Lade Berechtigungen..." + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 112, + "column": 17, + "kind": "string_literal", + "text": "Sichtbar", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Sichtbar\"" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 166, + "column": 19, + "kind": "string_literal", + "text": "Regel löschen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Regel löschen\"" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 198, + "column": 46, + "kind": "jsx_text", + "text": "Objekt (Dot-Notation)", + "context": "between tags, user-visible text node", + "line_content": " Objekt (Dot-Notation)" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 202, + "column": 67, + "kind": "jsx_text", + "text": "Eigene (m)", + "context": "between tags, user-visible text node", + "line_content": " Eigene (m)" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 203, + "column": 67, + "kind": "jsx_text", + "text": "Gruppe (g)", + "context": "between tags, user-visible text node", + "line_content": " Gruppe (g)" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 204, + "column": 67, + "kind": "jsx_text", + "text": "Alle (a)", + "context": "between tags, user-visible text node", + "line_content": " Alle (a)" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 213, + "column": 25, + "kind": "string_literal", + "text": "Create", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " C" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 214, + "column": 25, + "kind": "string_literal", + "text": "Read", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " R" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 215, + "column": 25, + "kind": "string_literal", + "text": "Update", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " U" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 216, + "column": 25, + "kind": "string_literal", + "text": "Delete", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " D" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 217, + "column": 25, + "kind": "string_literal", + "text": "Create", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " C" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 218, + "column": 25, + "kind": "string_literal", + "text": "Read", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " R" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 219, + "column": 25, + "kind": "string_literal", + "text": "Update", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " U" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 220, + "column": 25, + "kind": "string_literal", + "text": "Delete", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " D" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 221, + "column": 25, + "kind": "string_literal", + "text": "Create", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " C" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 222, + "column": 25, + "kind": "string_literal", + "text": "Read", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " R" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 223, + "column": 25, + "kind": "string_literal", + "text": "Update", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " U" + }, + { + "file": "src/components/AccessRules/AccessRulesTable.tsx", + "line": 224, + "column": 25, + "kind": "string_literal", + "text": "Delete", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " D" + }, + { + "file": "src/components/Chat/ChatInput.tsx", + "line": 20, + "column": 17, + "kind": "string_literal", + "text": "Type a message...", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder = 'Type a message...'," + }, + { + "file": "src/components/Chat/ChatInput.tsx", + "line": 55, + "column": 20, + "kind": "string_literal", + "text": "1px solid var(--border-color, #e0e0e0)", + "context": "string literal", + "line_content": " borderTop: '1px solid var(--border-color, #e0e0e0)'," + }, + { + "file": "src/components/Chat/ChatInput.tsx", + "line": 71, + "column": 19, + "kind": "string_literal", + "text": "1px solid var(--border-color, #ddd)", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, #ddd)'," + }, + { + "file": "src/components/Chat/ChatMessageList.tsx", + "line": 34, + "column": 18, + "kind": "string_literal", + "text": "No messages yet.", + "context": "string literal", + "line_content": " emptyMessage = 'No messages yet.'," + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 64, + "column": 18, + "kind": "string_literal", + "text": "Invalid file ID", + "context": "string literal", + "line_content": " setError('Invalid file ID');" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 67, + "column": 37, + "kind": "string_literal", + "text": "Unknown Item", + "context": "string literal", + "line_content": " if (!fileName || fileName === 'Unknown Item') {" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 68, + "column": 18, + "kind": "string_literal", + "text": "File name not available", + "context": "string literal", + "line_content": " setError('File name not available');" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 96, + "column": 17, + "kind": "string_literal", + "text": "s text content but MIME type says PDF, we", + "context": "string literal", + "line_content": " // If it's text content but MIME type says PDF, we'll handle it in renderPreview" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 98, + "column": 34, + "kind": "string_literal", + "text": "Failed to load preview", + "context": "string literal", + "line_content": " setError(result.error || 'Failed to load preview');" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 101, + "column": 16, + "kind": "string_literal", + "text": "An unexpected error occurred while loading the preview", + "context": "string literal", + "line_content": " setError('An unexpected error occurred while loading the preview');" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 171, + "column": 35, + "kind": "string_literal", + "text": "Failed to load PDF preview", + "context": "string literal", + "line_content": " onError={() => setError('Failed to load PDF preview')}" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 197, + "column": 48, + "kind": "jsx_text", + "text": "JSON Preview (Fallback)", + "context": "between tags, user-visible text node", + "line_content": " JSON Preview (Fallback)" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 199, + "column": 49, + "kind": "jsx_text", + "text": "Raw content", + "context": "between tags, user-visible text node", + "line_content": " Raw content" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 204, + "column": 34, + "kind": "string_literal", + "text": "No content available", + "context": "string literal", + "line_content": " {previewContent || 'No content available'}" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 222, + "column": 37, + "kind": "string_literal", + "text": "Failed to load image preview", + "context": "string literal", + "line_content": " onError={() => setError('Failed to load image preview')}" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 233, + "column": 39, + "kind": "string_literal", + "text": "Failed to load HTML preview", + "context": "string literal", + "line_content": " onError={() => setError('Failed to load HTML preview')}" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 243, + "column": 37, + "kind": "string_literal", + "text": "Failed to load text preview", + "context": "string literal", + "line_content": " onError={() => setError('Failed to load text preview')}" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 260, + "column": 39, + "kind": "string_literal", + "text": "Failed to load PDF preview", + "context": "string literal", + "line_content": " onError={() => setError('Failed to load PDF preview')}" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 270, + "column": 39, + "kind": "string_literal", + "text": "Failed to load HTML preview", + "context": "string literal", + "line_content": " onError={() => setError('Failed to load HTML preview')}" + }, + { + "file": "src/components/ContentPreview/ContentPreview.tsx", + "line": 282, + "column": 37, + "kind": "string_literal", + "text": "Preview not supported for this file type", + "context": "string literal", + "line_content": " onError={() => setError('Preview not supported for this file type')}" + }, + { + "file": "src/components/ContentPreview/UrlContentPreview.tsx", + "line": 56, + "column": 18, + "kind": "string_literal", + "text": "noopener noreferrer", + "context": "string literal", + "line_content": " link.rel = 'noopener noreferrer';" + }, + { + "file": "src/components/ContentPreview/UrlContentPreview.tsx", + "line": 82, + "column": 14, + "kind": "string_literal", + "text": "Failed to load PDF. This might be due to CORS restrictions. You can try downloading the file or opening it in a new tab.", + "context": "string literal", + "line_content": " setError('Failed to load PDF. This might be due to CORS restrictions. You can try downloading the file or opening it in a new tab.');" + }, + { + "file": "src/components/ContentPreview/UrlContentPreview.tsx", + "line": 99, + "column": 22, + "kind": "string_literal", + "text": "PDF lädt langsam. Sie können es auch direkt herunterladen oder in einem neuen Tab öffnen.", + "context": "string literal", + "line_content": " setWarning('PDF lädt langsam. Sie können es auch direkt herunterladen oder in einem neuen Tab öffnen.');" + }, + { + "file": "src/components/ContentPreview/UrlContentPreview.tsx", + "line": 110, + "column": 22, + "kind": "string_literal", + "text": "PDF lädt langsam. Versuche alternative Anzeigemethode...", + "context": "string literal", + "line_content": " setWarning('PDF lädt langsam. Versuche alternative Anzeigemethode...');" + }, + { + "file": "src/components/ContentPreview/UrlContentPreview.tsx", + "line": 114, + "column": 20, + "kind": "string_literal", + "text": "PDF lädt langsam. Bitte verwenden Sie den Download-Button oder öffnen Sie es in einem neuen Tab.", + "context": "string literal", + "line_content": " setError('PDF lädt langsam. Bitte verwenden Sie den Download-Button oder öffnen Sie es in einem neuen Tab.');" + }, + { + "file": "src/components/ContentPreview/UrlContentPreview.tsx", + "line": 132, + "column": 18, + "kind": "string_literal", + "text": "Invalid URL", + "context": "string literal", + "line_content": " setError('Invalid URL');" + }, + { + "file": "src/components/ContentPreview/UrlContentPreview.tsx", + "line": 161, + "column": 29, + "kind": "string_literal", + "text": "1px solid var(--color-border, #e5e7eb)", + "context": "string literal", + "line_content": " borderBottom: '1px solid var(--color-border, #e5e7eb)'," + }, + { + "file": "src/components/ContentPreview/UrlContentPreview.tsx", + "line": 172, + "column": 29, + "kind": "string_literal", + "text": "1px solid var(--color-border, #e5e7eb)", + "context": "string literal", + "line_content": " borderBottom: '1px solid var(--color-border, #e5e7eb)'," + }, + { + "file": "src/components/ContentPreview/UrlContentPreview.tsx", + "line": 270, + "column": 29, + "kind": "string_literal", + "text": "1px solid var(--color-border, #e5e7eb)", + "context": "string literal", + "line_content": " borderBottom: '1px solid var(--color-border, #e5e7eb)'," + }, + { + "file": "src/components/ContentPreview/UrlContentPreview.tsx", + "line": 317, + "column": 14, + "kind": "jsx_text", + "text": "Preview not supported for this file type. Please download the file to view it.", + "context": "between tags, user-visible text node", + "line_content": "

Preview not supported for this file type. Please download the file to view it.

" + }, + { + "file": "src/components/ContentPreview/renderers/JsonRenderer.tsx", + "line": 342, + "column": 64, + "kind": "jsx_text", + "text": "Error: Invalid nested data", + "context": "between tags, user-visible text node", + "line_content": " Error: Invalid nested data" + }, + { + "file": "src/components/ContentPreview/renderers/JsonRenderer.tsx", + "line": 482, + "column": 14, + "kind": "string_literal", + "text": "Raw Content", + "context": "string literal", + "line_content": " keys: ['Raw Content']," + }, + { + "file": "src/components/ContentPreview/renderers/PdfJsRenderer.tsx", + "line": 65, + "column": 57, + "kind": "string_literal", + "text": "Failed to load PDF", + "context": "string literal", + "line_content": " setError(err instanceof Error ? err.message : 'Failed to load PDF');" + }, + { + "file": "src/components/ContentPreview/renderers/PdfJsRenderer.tsx", + "line": 115, + "column": 57, + "kind": "string_literal", + "text": "Failed to render PDF page", + "context": "string literal", + "line_content": " setError(err instanceof Error ? err.message : 'Failed to render PDF page');" + }, + { + "file": "src/components/ContentPreview/renderers/PdfJsRenderer.tsx", + "line": 131, + "column": 12, + "kind": "jsx_text", + "text": "Fehler beim Laden der PDF: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler beim Laden der PDF: {error}

" + }, + { + "file": "src/components/ContentPreview/renderers/PdfJsRenderer.tsx", + "line": 140, + "column": 12, + "kind": "jsx_text", + "text": "PDF wird geladen...", + "context": "between tags, user-visible text node", + "line_content": "

PDF wird geladen...

" + }, + { + "file": "src/components/ContentPreview/renderers/PdfJsRenderer.tsx", + "line": 152, + "column": 25, + "kind": "string_literal", + "text": "1px solid var(--color-border, #e5e7eb)", + "context": "string literal", + "line_content": " borderBottom: '1px solid var(--color-border, #e5e7eb)'," + }, + { + "file": "src/components/ContentPreview/renderers/PdfJsRenderer.tsx", + "line": 197, + "column": 25, + "kind": "string_literal", + "text": "1px solid var(--color-border, #e5e7eb)", + "context": "string literal", + "line_content": " border: '1px solid var(--color-border, #e5e7eb)'," + }, + { + "file": "src/components/ContentPreview/renderers/PdfJsRenderer.tsx", + "line": 213, + "column": 25, + "kind": "string_literal", + "text": "1px solid var(--color-border, #e5e7eb)", + "context": "string literal", + "line_content": " border: '1px solid var(--color-border, #e5e7eb)'," + }, + { + "file": "src/components/ContentPreview/renderers/PdfJsRenderer.tsx", + "line": 232, + "column": 24, + "kind": "string_literal", + "text": "0 2px 8px rgba(0,0,0,0.1)", + "context": "string literal", + "line_content": " boxShadow: '0 2px 8px rgba(0,0,0,0.1)'," + }, + { + "file": "src/components/ContentPreview/renderers/TextRenderer.tsx", + "line": 19, + "column": 46, + "kind": "jsx_text", + "text": "Text Preview", + "context": "between tags, user-visible text node", + "line_content": " Text Preview" + }, + { + "file": "src/components/FlowEditor/editor/Automation2FlowEditor.tsx", + "line": 59, + "column": 48, + "kind": "string_literal", + "text": "Jetzt ausführen", + "context": "string literal", + "line_content": " buildInvocationsForPrimaryKind('manual', [], 'Jetzt ausführen');" + }, + { + "file": "src/components/FlowEditor/editor/Automation2FlowEditor.tsx", + "line": 203, + "column": 49, + "kind": "string_literal", + "text": "Keine Nodes im Workflow.", + "context": "string literal", + "line_content": " setExecuteResult({ success: false, error: 'Keine Nodes im Workflow.' });" + }, + { + "file": "src/components/FlowEditor/editor/Automation2FlowEditor.tsx", + "line": 228, + "column": 49, + "kind": "string_literal", + "text": "Keine Nodes zum Speichern.", + "context": "string literal", + "line_content": " setExecuteResult({ success: false, error: 'Keine Nodes zum Speichern.' });" + }, + { + "file": "src/components/FlowEditor/editor/Automation2FlowEditor.tsx", + "line": 238, + "column": 18, + "kind": "string_literal", + "text": "Workflow speichern", + "context": "string literal", + "line_content": " title: 'Workflow speichern'," + }, + { + "file": "src/components/FlowEditor/editor/Automation2FlowEditor.tsx", + "line": 239, + "column": 25, + "kind": "string_literal", + "text": "Neuer Workflow", + "context": "string literal", + "line_content": " defaultValue: 'Neuer Workflow'," + }, + { + "file": "src/components/FlowEditor/editor/Automation2FlowEditor.tsx", + "line": 240, + "column": 24, + "kind": "string_literal", + "text": "Name des Workflows", + "context": "string literal", + "line_content": " placeholder: 'Name des Workflows'," + }, + { + "file": "src/components/FlowEditor/editor/Automation2FlowEditor.tsx", + "line": 247, + "column": 34, + "kind": "string_literal", + "text": "Neuer Workflow", + "context": "string literal", + "line_content": " label: label.trim() || 'Neuer Workflow'," + }, + { + "file": "src/components/FlowEditor/editor/Automation2FlowEditor.tsx", + "line": 596, + "column": 16, + "kind": "jsx_text", + "text": "Lade Node-Typen...", + "context": "between tags, user-visible text node", + "line_content": "

Lade Node-Typen...

" + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 38, + "column": 19, + "kind": "string_literal", + "text": "Entwurf", + "context": "object property label: (e.g. table column)", + "line_content": " draft: { label: 'Entwurf', color: 'var(--warning-color, #ffc107)' }," + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 39, + "column": 23, + "kind": "string_literal", + "text": "Veröffentlicht", + "context": "object property label: (e.g. table column)", + "line_content": " published: { label: 'Veröffentlicht', color: 'var(--success-color, #28a745)' }," + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 40, + "column": 22, + "kind": "string_literal", + "text": "Archiviert", + "context": "object property label: (e.g. table column)", + "line_content": " archived: { label: 'Archiviert', color: 'var(--text-secondary, #666)' }," + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 116, + "column": 56, + "kind": "string_literal", + "text": "Meine Vorlagen", + "context": "string literal", + "line_content": " const SCOPE_LABELS: Record = { user: 'Meine Vorlagen', instance: 'Instanz', mandate: 'Mandant' };" + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 137, + "column": 41, + "kind": "string_literal", + "text": "Klicken zum Umbenennen", + "context": "string literal", + "line_content": " title={onWorkflowRename ? 'Klicken zum Umbenennen' : undefined}" + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 151, + "column": 19, + "kind": "string_literal", + "text": "Workflow-Konfiguration (Einstieg / Starts)", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Workflow-Konfiguration (Einstieg / Starts)\"" + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 152, + "column": 24, + "kind": "string_literal", + "text": "Workflow-Konfiguration", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " aria-label=\"Workflow-Konfiguration\"" + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 170, + "column": 21, + "kind": "string_literal", + "text": "Neu aus Vorlage", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Neu aus Vorlage\"" + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 214, + "column": 21, + "kind": "string_literal", + "text": "Als Vorlage speichern", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Als Vorlage speichern\"" + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 242, + "column": 28, + "kind": "jsx_text", + "text": "— Workflow laden —", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/components/FlowEditor/editor/CanvasHeader.tsx", + "line": 268, + "column": 93, + "kind": "string_literal", + "text": "Workspace-Panel (Chats, Dateien, Quellen)", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " " + }, + { + "file": "src/hooks/usePrompt.tsx", + "line": 6, + "column": 33, + "kind": "string_literal", + "text": "Bitte Namen eingeben:", + "context": "string literal", + "line_content": " * const value = await prompt('Bitte Namen eingeben:', { title: 'Umbenennen' });" + }, + { + "file": "src/hooks/usePrompt.tsx", + "line": 85, + "column": 21, + "kind": "string_literal", + "text": "1px solid var(--border-color, var(--color-border, #333))", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, var(--color-border, #333))'," + }, + { + "file": "src/hooks/usePrompt.tsx", + "line": 89, + "column": 24, + "kind": "string_literal", + "text": "0 8px 32px rgba(0,0,0,0.4)", + "context": "string literal", + "line_content": " boxShadow: '0 8px 32px rgba(0,0,0,0.4)'," + }, + { + "file": "src/hooks/usePrompt.tsx", + "line": 119, + "column": 23, + "kind": "string_literal", + "text": "1px solid var(--border-color, var(--color-border, #ccc))", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, var(--color-border, #ccc))'," + }, + { + "file": "src/hooks/usePrompt.tsx", + "line": 134, + "column": 25, + "kind": "string_literal", + "text": "1px solid var(--color-border, #444)", + "context": "string literal", + "line_content": " border: '1px solid var(--color-border, #444)'," + }, + { + "file": "src/layouts/FeatureLayout.tsx", + "line": 21, + "column": 8, + "kind": "jsx_text", + "text": "Lade Feature-Daten...", + "context": "between tags, user-visible text node", + "line_content": "

Lade Feature-Daten...

" + }, + { + "file": "src/layouts/FeatureLayout.tsx", + "line": 37, + "column": 9, + "kind": "jsx_text", + "text": "Zugriff nicht möglich", + "context": "between tags, user-visible text node", + "line_content": "

Zugriff nicht möglich

" + }, + { + "file": "src/layouts/FeatureLayout.tsx", + "line": 81, + "column": 17, + "kind": "string_literal", + "text": "Die angeforderte Feature-Instanz existiert nicht oder Sie haben keinen Zugriff.", + "context": "string literal", + "line_content": " message=\"Die angeforderte Feature-Instanz existiert nicht oder Sie haben keinen Zugriff.\"" + }, + { + "file": "src/layouts/MainLayout.tsx", + "line": 63, + "column": 22, + "kind": "string_literal", + "text": "Navigation schliessen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " aria-label=\"Navigation schliessen\"" + }, + { + "file": "src/layouts/MainLayout.tsx", + "line": 72, + "column": 17, + "kind": "string_literal", + "text": "PowerOn", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " alt=\"PowerOn\"" + }, + { + "file": "src/layouts/MainLayout.tsx", + "line": 105, + "column": 24, + "kind": "string_literal", + "text": "Navigation oeffnen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " aria-label=\"Navigation oeffnen\"" + }, + { + "file": "src/layouts/MainLayout.tsx", + "line": 111, + "column": 17, + "kind": "string_literal", + "text": "PowerOn", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " alt=\"PowerOn\"" + }, + { + "file": "src/pages/AutomationsDashboardPage.tsx", + "line": 71, + "column": 15, + "kind": "string_literal", + "text": "1px solid var(--border-color, #e0e0e0)", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, #e0e0e0)'," + }, + { + "file": "src/pages/AutomationsDashboardPage.tsx", + "line": 78, + "column": 13, + "kind": "string_literal", + "text": "1 1 180px", + "context": "string literal", + "line_content": " flex: '1 1 180px'," + }, + { + "file": "src/pages/AutomationsDashboardPage.tsx", + "line": 195, + "column": 14, + "kind": "string_literal", + "text": "", + "context": "object property label: (e.g. table column)", + "line_content": " label: ''," + }, + { + "file": "src/pages/Dashboard.tsx", + "line": 72, + "column": 15, + "kind": "jsx_text", + "text": "Übersicht", + "context": "between tags, user-visible text node", + "line_content": "

Übersicht

" + }, + { + "file": "src/pages/Dashboard.tsx", + "line": 82, + "column": 13, + "kind": "jsx_text", + "text": "Übersicht", + "context": "between tags, user-visible text node", + "line_content": "

Übersicht

" + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 67, + "column": 26, + "kind": "string_literal", + "text": "Workflow Dashboard", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " " + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 67, + "column": 59, + "kind": "string_literal", + "text": "Übersicht der Workflows", + "context": "string literal", + "line_content": " " + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 71, + "column": 26, + "kind": "string_literal", + "text": "Runs", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " " + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 71, + "column": 45, + "kind": "string_literal", + "text": "Workflow-Ausführungen", + "context": "string literal", + "line_content": " " + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 75, + "column": 26, + "kind": "string_literal", + "text": "Dateien", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " " + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 82, + "column": 26, + "kind": "string_literal", + "text": "Chatbot Einstellungen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " " + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 82, + "column": 62, + "kind": "string_literal", + "text": "Konfiguration des Chatbots", + "context": "string literal", + "line_content": " " + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 88, + "column": 9, + "kind": "jsx_text", + "text": "Seite nicht gefunden", + "context": "between tags, user-visible text node", + "line_content": "

Seite nicht gefunden

" + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 89, + "column": 8, + "kind": "jsx_text", + "text": "Diese View existiert nicht oder wurde noch nicht implementiert.", + "context": "between tags, user-visible text node", + "line_content": "

Diese View existiert nicht oder wurde noch nicht implementiert.

" + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 95, + "column": 9, + "kind": "jsx_text", + "text": "Zugriff verweigert", + "context": "between tags, user-visible text node", + "line_content": "

Zugriff verweigert

" + }, + { + "file": "src/pages/FeatureView.tsx", + "line": 96, + "column": 8, + "kind": "jsx_text", + "text": "Du hast keine Berechtigung für diese Ansicht.", + "context": "between tags, user-visible text node", + "line_content": "

Du hast keine Berechtigung für diese Ansicht.

" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 68, + "column": 27, + "kind": "string_literal", + "text": "Consent information could not be loaded.", + "context": "string literal", + "line_content": " setConsentError('Consent information could not be loaded.');" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 91, + "column": 49, + "kind": "string_literal", + "text": "Data export downloaded.", + "context": "string literal", + "line_content": " setActionMessage({ type: 'success', text: 'Data export downloaded.' });" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 94, + "column": 47, + "kind": "string_literal", + "text": "Data export failed. Please try again.", + "context": "string literal", + "line_content": " setActionMessage({ type: 'error', text: 'Data export failed. Please try again.' });" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 109, + "column": 49, + "kind": "string_literal", + "text": "Portable export downloaded.", + "context": "string literal", + "line_content": " setActionMessage({ type: 'success', text: 'Portable export downloaded.' });" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 112, + "column": 47, + "kind": "string_literal", + "text": "Portable export failed. Please try again.", + "context": "string literal", + "line_content": " setActionMessage({ type: 'error', text: 'Portable export failed. Please try again.' });" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 121, + "column": 47, + "kind": "string_literal", + "text": "Please type LOESCHEN to confirm deletion.", + "context": "string literal", + "line_content": " setActionMessage({ type: 'error', text: 'Please type LOESCHEN to confirm deletion.' });" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 132, + "column": 49, + "kind": "string_literal", + "text": "Account deleted. Redirecting to login...", + "context": "string literal", + "line_content": " setActionMessage({ type: 'success', text: 'Account deleted. Redirecting to login...' });" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 136, + "column": 47, + "kind": "string_literal", + "text": "Account deletion failed. Please try again.", + "context": "string literal", + "line_content": " setActionMessage({ type: 'error', text: 'Account deletion failed. Please try again.' });" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 161, + "column": 47, + "kind": "jsx_text", + "text": "Your data rights", + "context": "between tags, user-visible text node", + "line_content": "

Your data rights

" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 164, + "column": 19, + "kind": "jsx_text", + "text": "Access (Article 15)", + "context": "between tags, user-visible text node", + "line_content": "

Access (Article 15)

" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 165, + "column": 18, + "kind": "jsx_text", + "text": "Download a full export of your account data.", + "context": "between tags, user-visible text node", + "line_content": "

Download a full export of your account data.

" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 186, + "column": 19, + "kind": "jsx_text", + "text": "Portability (Article 20)", + "context": "between tags, user-visible text node", + "line_content": "

Portability (Article 20)

" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 187, + "column": 18, + "kind": "jsx_text", + "text": "Download a machine-readable JSON-LD export.", + "context": "between tags, user-visible text node", + "line_content": "

Download a machine-readable JSON-LD export.

" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 208, + "column": 19, + "kind": "jsx_text", + "text": "Erasure (Article 17)", + "context": "between tags, user-visible text node", + "line_content": "

Erasure (Article 17)

" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 209, + "column": 18, + "kind": "jsx_text", + "text": "Permanently delete your account and all associated data.", + "context": "between tags, user-visible text node", + "line_content": "

Permanently delete your account and all associated data.

" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 229, + "column": 33, + "kind": "string_literal", + "text": "LOESCHEN", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\"LOESCHEN\"" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 278, + "column": 47, + "kind": "jsx_text", + "text": "Processing information", + "context": "between tags, user-visible text node", + "line_content": "

Processing information

" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 279, + "column": 64, + "kind": "jsx_text", + "text": "Loading consent info...", + "context": "between tags, user-visible text node", + "line_content": " {isLoadingConsent &&

Loading consent info...

}" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 284, + "column": 21, + "kind": "jsx_text", + "text": "Data collected", + "context": "between tags, user-visible text node", + "line_content": "

Data collected

" + }, + { + "file": "src/pages/GDPR.tsx", + "line": 304, + "column": 21, + "kind": "jsx_text", + "text": "Your rights", + "context": "between tags, user-visible text node", + "line_content": "

Your rights

" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 16, + "column": 19, + "kind": "string_literal", + "text": "Einladung annehmen", + "context": "string literal", + "line_content": " * 6. User clicks \"Einladung annehmen\"" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 56, + "column": 18, + "kind": "string_literal", + "text": "Kein Einladungs-Token angegeben", + "context": "string literal", + "line_content": " setError('Kein Einladungs-Token angegeben');" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 71, + "column": 78, + "kind": "string_literal", + "text": "Neues Konto erstellen", + "context": "string literal", + "line_content": " // No targetUsername = new-user invitation (email only) -> only show \"Neues Konto erstellen\"" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 120, + "column": 72, + "kind": "string_literal", + "text": "Not authenticated", + "context": "string literal", + "line_content": " } else if (result.error?.includes('401') || result.error?.includes('Not authenticated')) {" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 125, + "column": 32, + "kind": "string_literal", + "text": "Fehler beim Annehmen der Einladung", + "context": "string literal", + "line_content": " setError(result.error || 'Fehler beim Annehmen der Einladung');" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 162, + "column": 16, + "kind": "jsx_text", + "text": "Einladung wird überprüft...", + "context": "between tags, user-visible text node", + "line_content": "

Einladung wird überprüft...

" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 176, + "column": 17, + "kind": "jsx_text", + "text": "Ungültige Einladung", + "context": "between tags, user-visible text node", + "line_content": "

Ungültige Einladung

" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 177, + "column": 39, + "kind": "string_literal", + "text": "Diese Einladung ist nicht gültig.", + "context": "string literal", + "line_content": "

{validation?.reason || 'Diese Einladung ist nicht gültig.'}

" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 195, + "column": 16, + "kind": "jsx_text", + "text": "Sie wurden erfolgreich zum Mandanten hinzugefügt.", + "context": "between tags, user-visible text node", + "line_content": "

Sie wurden erfolgreich zum Mandanten hinzugefügt.

" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 196, + "column": 51, + "kind": "jsx_text", + "text": "Sie werden weitergeleitet...", + "context": "between tags, user-visible text node", + "line_content": "

Sie werden weitergeleitet...

" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 211, + "column": 17, + "kind": "jsx_text", + "text": "Falsche Anmeldung", + "context": "between tags, user-visible text node", + "line_content": "

Falsche Anmeldung

" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 214, + "column": 61, + "kind": "string_literal", + "text": "anderer Benutzer", + "context": "string literal", + "line_content": " Sie sind als {cachedUser?.username || 'anderer Benutzer'} angemeldet." + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 216, + "column": 16, + "kind": "jsx_text", + "text": "Bitte melden Sie sich ab und mit dem richtigen Konto wieder an.", + "context": "between tags, user-visible text node", + "line_content": "

Bitte melden Sie sich ab und mit dem richtigen Konto wieder an.

" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 229, + "column": 7, + "kind": "string_literal", + "text": "Sie wurden eingeladen, einem Mandanten und einem Feature beizutreten.", + "context": "string literal", + "line_content": " ? 'Sie wurden eingeladen, einem Mandanten und einem Feature beizutreten.'" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 230, + "column": 7, + "kind": "string_literal", + "text": "Sie wurden eingeladen, einem Mandanten beizutreten.", + "context": "string literal", + "line_content": " : 'Sie wurden eingeladen, einem Mandanten beizutreten.';" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 231, + "column": 40, + "kind": "string_literal", + "text": "Features mit zugewiesenen Rollen", + "context": "string literal", + "line_content": " const rolesLabel = isFeatureInvite ? 'Features mit zugewiesenen Rollen' : 'Zugewiesene Rollen';" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 231, + "column": 77, + "kind": "string_literal", + "text": "Zugewiesene Rollen", + "context": "string literal", + "line_content": " const rolesLabel = isFeatureInvite ? 'Features mit zugewiesenen Rollen' : 'Zugewiesene Rollen';" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 241, + "column": 17, + "kind": "jsx_text", + "text": "Einladung annehmen", + "context": "between tags, user-visible text node", + "line_content": "

Einladung annehmen

" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 287, + "column": 17, + "kind": "string_literal", + "text": "Einladung annehmen", + "context": "string literal", + "line_content": " 'Einladung annehmen'" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 304, + "column": 15, + "kind": "jsx_text", + "text": "Einladung annehmen", + "context": "between tags, user-visible text node", + "line_content": "

Einladung annehmen

" + }, + { + "file": "src/pages/InvitePage.tsx", + "line": 333, + "column": 17, + "kind": "string_literal", + "text": "Erstellen Sie ein neues Konto mit Ihrem Benutzernamen oder verlinken Sie die Einladung mit Ihrem bestehenden Account.", + "context": "string literal", + "line_content": " : 'Erstellen Sie ein neues Konto mit Ihrem Benutzernamen oder verlinken Sie die Einladung mit Ihrem bestehenden Account.'}" + }, + { + "file": "src/pages/Login.tsx", + "line": 36, + "column": 22, + "kind": "string_literal", + "text": "PowerOn AI Platform - Login", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " document.title = \"PowerOn AI Platform - Login\";" + }, + { + "file": "src/pages/Login.tsx", + "line": 134, + "column": 17, + "kind": "string_literal", + "text": "PowerOn", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " alt=\"PowerOn\"" + }, + { + "file": "src/pages/Login.tsx", + "line": 145, + "column": 25, + "kind": "jsx_text", + "text": "Sie haben eine ausstehende Einladung. Bitte melden Sie sich an, um diese anzunehmen.", + "context": "between tags, user-visible text node", + "line_content": " Sie haben eine ausstehende Einladung. Bitte melden Sie sich an, um diese anzunehmen." + }, + { + "file": "src/pages/Login.tsx", + "line": 155, + "column": 31, + "kind": "string_literal", + "text": " ", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\" \"" + }, + { + "file": "src/pages/Login.tsx", + "line": 173, + "column": 31, + "kind": "string_literal", + "text": " ", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\" \"" + }, + { + "file": "src/pages/Login.tsx", + "line": 198, + "column": 35, + "kind": "string_literal", + "text": "wird geladen...", + "context": "string literal", + "line_content": " {isLoginLoading ? \"wird geladen...\" : \"Anmelden\"}" + }, + { + "file": "src/pages/Login.tsx", + "line": 221, + "column": 36, + "kind": "string_literal", + "text": "Signing in...", + "context": "string literal", + "line_content": " {isMsalLoading ? \"Signing in...\" : \"Mit Microsoft anmelden\"}" + }, + { + "file": "src/pages/Login.tsx", + "line": 221, + "column": 54, + "kind": "string_literal", + "text": "Mit Microsoft anmelden", + "context": "string literal", + "line_content": " {isMsalLoading ? \"Signing in...\" : \"Mit Microsoft anmelden\"}" + }, + { + "file": "src/pages/Login.tsx", + "line": 232, + "column": 38, + "kind": "string_literal", + "text": "Signing in...", + "context": "string literal", + "line_content": " {isGoogleLoading ? \"Signing in...\" : \"Mit Google anmelden\"}" + }, + { + "file": "src/pages/Login.tsx", + "line": 232, + "column": 56, + "kind": "string_literal", + "text": "Mit Google anmelden", + "context": "string literal", + "line_content": " {isGoogleLoading ? \"Signing in...\" : \"Mit Google anmelden\"}" + }, + { + "file": "src/pages/Login.tsx", + "line": 237, + "column": 23, + "kind": "jsx_text", + "text": "Du hast noch kein Konto?", + "context": "between tags, user-visible text node", + "line_content": " Du hast noch kein Konto?" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 18, + "column": 22, + "kind": "string_literal", + "text": "PowerOn AI Platform - Passwort zurücksetzen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " document.title = \"PowerOn AI Platform - Passwort zurücksetzen\";" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 27, + "column": 26, + "kind": "string_literal", + "text": "Bitte geben Sie Ihren Benutzernamen ein.", + "context": "string literal", + "line_content": " setValidationError('Bitte geben Sie Ihren Benutzernamen ein.');" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 33, + "column": 25, + "kind": "string_literal", + "text": "Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.", + "context": "string literal", + "line_content": " setSuccessMessage('Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.');" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 40, + "column": 22, + "kind": "string_literal", + "text": "Bitte prüfen Sie Ihre E-Mail für den Passwort-Reset-Link.", + "context": "string literal", + "line_content": " message: 'Bitte prüfen Sie Ihre E-Mail für den Passwort-Reset-Link.'" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 46, + "column": 25, + "kind": "string_literal", + "text": "Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.", + "context": "string literal", + "line_content": " setSuccessMessage('Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.');" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 59, + "column": 17, + "kind": "string_literal", + "text": "PowerOn", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " alt=\"PowerOn\"" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 65, + "column": 42, + "kind": "jsx_text", + "text": "Passwort zurücksetzen", + "context": "between tags, user-visible text node", + "line_content": "

Passwort zurücksetzen

" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 80, + "column": 35, + "kind": "string_literal", + "text": " ", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\" \"" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 100, + "column": 24, + "kind": "jsx_text", + "text": "Geben Sie Ihren Benutzernamen ein. Falls ein Konto existiert, erhalten Sie einen Link zum Zurücksetzen des Passworts an Ihre hinterlegte E-Mail-Adresse.", + "context": "between tags, user-visible text node", + "line_content": "

Geben Sie Ihren Benutzernamen ein. Falls ein Konto existiert, erhalten Sie einen Link zum Zurücksetzen des Passworts an Ihre hinterlegte E-Mail-Adresse.

" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 108, + "column": 34, + "kind": "string_literal", + "text": "Wird gesendet...", + "context": "string literal", + "line_content": " {isLoading ? \"Wird gesendet...\" : \"Reset-Link anfordern\"}" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 108, + "column": 55, + "kind": "string_literal", + "text": "Reset-Link anfordern", + "context": "string literal", + "line_content": " {isLoading ? \"Wird gesendet...\" : \"Reset-Link anfordern\"}" + }, + { + "file": "src/pages/PasswordResetRequest.tsx", + "line": 114, + "column": 23, + "kind": "jsx_text", + "text": "Zurück zum", + "context": "between tags, user-visible text node", + "line_content": " Zurück zum" + }, + { + "file": "src/pages/Register.tsx", + "line": 40, + "column": 22, + "kind": "string_literal", + "text": "PowerOn AI Platform - Registrieren", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " document.title = \"PowerOn AI Platform - Registrieren\";" + }, + { + "file": "src/pages/Register.tsx", + "line": 58, + "column": 26, + "kind": "string_literal", + "text": "Bitte füllen Sie alle Pflichtfelder aus.", + "context": "string literal", + "line_content": " setValidationError('Bitte füllen Sie alle Pflichtfelder aus.');" + }, + { + "file": "src/pages/Register.tsx", + "line": 63, + "column": 26, + "kind": "string_literal", + "text": "Bitte geben Sie eine gültige E-Mail-Adresse ein.", + "context": "string literal", + "line_content": " setValidationError('Bitte geben Sie eine gültige E-Mail-Adresse ein.');" + }, + { + "file": "src/pages/Register.tsx", + "line": 81, + "column": 60, + "kind": "string_literal", + "text": "Username is not available", + "context": "string literal", + "line_content": " const errorMessage = availabilityResult.message || 'Username is not available';" + }, + { + "file": "src/pages/Register.tsx", + "line": 82, + "column": 30, + "kind": "string_literal", + "text": "Username is already taken", + "context": "string literal", + "line_content": " if (errorMessage === 'Username is already taken') {" + }, + { + "file": "src/pages/Register.tsx", + "line": 83, + "column": 30, + "kind": "string_literal", + "text": "Benutzername ist bereits vergeben", + "context": "string literal", + "line_content": " setValidationError('Benutzername ist bereits vergeben');" + }, + { + "file": "src/pages/Register.tsx", + "line": 86, + "column": 30, + "kind": "string_literal", + "text": "Benutzername ist nicht verfügbar", + "context": "string literal", + "line_content": " setValidationError('Benutzername ist nicht verfügbar');" + }, + { + "file": "src/pages/Register.tsx", + "line": 93, + "column": 21, + "kind": "string_literal", + "text": "Registrierung erfolgreich! Bitte prüfen Sie Ihre E-Mail (auch den Spam-Ordner) für den Link zum Setzen Ihres Passworts.", + "context": "string literal", + "line_content": " let message = 'Registrierung erfolgreich! Bitte prüfen Sie Ihre E-Mail (auch den Spam-Ordner) für den Link zum Setzen Ihres Passworts.';" + }, + { + "file": "src/pages/Register.tsx", + "line": 95, + "column": 20, + "kind": "string_literal", + "text": " Nach dem Setzen Ihres Passworts können Sie sich anmelden und Ihre Einladung annehmen.", + "context": "string literal", + "line_content": " message += ' Nach dem Setzen Ihres Passworts können Sie sich anmelden und Ihre Einladung annehmen.';" + }, + { + "file": "src/pages/Register.tsx", + "line": 104, + "column": 22, + "kind": "string_literal", + "text": "Registrierung erfolgreich. Bitte prüfen Sie Ihre E-Mail für den Passwort-Link.", + "context": "string literal", + "line_content": " message: 'Registrierung erfolgreich. Bitte prüfen Sie Ihre E-Mail für den Passwort-Link.'," + }, + { + "file": "src/pages/Register.tsx", + "line": 116, + "column": 83, + "kind": "string_literal", + "text": "Registration failed", + "context": "string literal", + "line_content": " if (registerError) return typeof registerError === 'string' ? registerError : 'Registration failed';" + }, + { + "file": "src/pages/Register.tsx", + "line": 117, + "column": 71, + "kind": "string_literal", + "text": "Microsoft registration failed", + "context": "string literal", + "line_content": " if (msalError) return typeof msalError === 'string' ? msalError : 'Microsoft registration failed';" + }, + { + "file": "src/pages/Register.tsx", + "line": 118, + "column": 95, + "kind": "string_literal", + "text": "Username availability check failed", + "context": "string literal", + "line_content": " if (availabilityError) return typeof availabilityError === 'string' ? availabilityError : 'Username availability check failed';" + }, + { + "file": "src/pages/Register.tsx", + "line": 128, + "column": 17, + "kind": "string_literal", + "text": "PowerOn", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " alt=\"PowerOn\"" + }, + { + "file": "src/pages/Register.tsx", + "line": 138, + "column": 25, + "kind": "jsx_text", + "text": "Sie haben eine ausstehende Einladung. Nach der Registrierung und Anmeldung können Sie diese annehmen.", + "context": "between tags, user-visible text node", + "line_content": " Sie haben eine ausstehende Einladung. Nach der Registrierung und Anmeldung können Sie diese annehmen." + }, + { + "file": "src/pages/Register.tsx", + "line": 156, + "column": 35, + "kind": "string_literal", + "text": " ", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\" \"" + }, + { + "file": "src/pages/Register.tsx", + "line": 170, + "column": 35, + "kind": "string_literal", + "text": " ", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\" \"" + }, + { + "file": "src/pages/Register.tsx", + "line": 184, + "column": 35, + "kind": "string_literal", + "text": " ", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\" \"" + }, + { + "file": "src/pages/Register.tsx", + "line": 191, + "column": 114, + "kind": "jsx_text", + "text": "Vollständiger Name", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/Register.tsx", + "line": 195, + "column": 24, + "kind": "jsx_text", + "text": "Nach der Registrierung erhalten Sie eine E-Mail mit einem Link zum Setzen Ihres Passworts.", + "context": "between tags, user-visible text node", + "line_content": "

Nach der Registrierung erhalten Sie eine E-Mail mit einem Link zum Setzen Ihres Passworts.

" + }, + { + "file": "src/pages/Register.tsx", + "line": 209, + "column": 34, + "kind": "string_literal", + "text": "Registrierung läuft...", + "context": "string literal", + "line_content": " {isLoading ? \"Registrierung läuft...\" : isChecking ? \"Benutzername wird geprüft...\" : 'Kostenlos registrieren'}" + }, + { + "file": "src/pages/Register.tsx", + "line": 209, + "column": 74, + "kind": "string_literal", + "text": "Benutzername wird geprüft...", + "context": "string literal", + "line_content": " {isLoading ? \"Registrierung läuft...\" : isChecking ? \"Benutzername wird geprüft...\" : 'Kostenlos registrieren'}" + }, + { + "file": "src/pages/Register.tsx", + "line": 209, + "column": 107, + "kind": "string_literal", + "text": "Kostenlos registrieren", + "context": "string literal", + "line_content": " {isLoading ? \"Registrierung läuft...\" : isChecking ? \"Benutzername wird geprüft...\" : 'Kostenlos registrieren'}" + }, + { + "file": "src/pages/Register.tsx", + "line": 215, + "column": 23, + "kind": "jsx_text", + "text": "Bereits registriert?", + "context": "between tags, user-visible text node", + "line_content": " Bereits registriert?" + }, + { + "file": "src/pages/Reset.tsx", + "line": 26, + "column": 22, + "kind": "string_literal", + "text": "PowerOn AI Platform - Neues Passwort setzen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " document.title = \"PowerOn AI Platform - Neues Passwort setzen\";" + }, + { + "file": "src/pages/Reset.tsx", + "line": 31, + "column": 21, + "kind": "string_literal", + "text": "Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.", + "context": "string literal", + "line_content": " setTokenError('Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.');" + }, + { + "file": "src/pages/Reset.tsx", + "line": 33, + "column": 21, + "kind": "string_literal", + "text": "Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.", + "context": "string literal", + "line_content": " setTokenError('Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.');" + }, + { + "file": "src/pages/Reset.tsx", + "line": 44, + "column": 26, + "kind": "string_literal", + "text": "Passwort muss mindestens 8 Zeichen lang sein.", + "context": "string literal", + "line_content": " setValidationError('Passwort muss mindestens 8 Zeichen lang sein.');" + }, + { + "file": "src/pages/Reset.tsx", + "line": 49, + "column": 26, + "kind": "string_literal", + "text": "Die Passwörter stimmen nicht überein.", + "context": "string literal", + "line_content": " setValidationError('Die Passwörter stimmen nicht überein.');" + }, + { + "file": "src/pages/Reset.tsx", + "line": 65, + "column": 26, + "kind": "string_literal", + "text": "Token fehlt. Bitte fordern Sie einen neuen Reset-Link an.", + "context": "string literal", + "line_content": " setValidationError('Token fehlt. Bitte fordern Sie einen neuen Reset-Link an.');" + }, + { + "file": "src/pages/Reset.tsx", + "line": 71, + "column": 25, + "kind": "string_literal", + "text": "Passwort erfolgreich gesetzt! Sie werden zum Login weitergeleitet...", + "context": "string literal", + "line_content": " setSuccessMessage('Passwort erfolgreich gesetzt! Sie werden zum Login weitergeleitet...');" + }, + { + "file": "src/pages/Reset.tsx", + "line": 78, + "column": 22, + "kind": "string_literal", + "text": "Passwort erfolgreich geändert. Bitte melden Sie sich an.", + "context": "string literal", + "line_content": " message: 'Passwort erfolgreich geändert. Bitte melden Sie sich an.'" + }, + { + "file": "src/pages/Reset.tsx", + "line": 84, + "column": 75, + "kind": "string_literal", + "text": "Passwort-Zurücksetzung fehlgeschlagen.", + "context": "string literal", + "line_content": " const errorMessage = err?.response?.data?.detail || err?.message || 'Passwort-Zurücksetzung fehlgeschlagen.';" + }, + { + "file": "src/pages/Reset.tsx", + "line": 85, + "column": 108, + "kind": "string_literal", + "text": "Ungültig", + "context": "string literal", + "line_content": " if (errorMessage.includes('abgelaufen') || errorMessage.includes('expired') || errorMessage.includes('Ungültig') || errorMessage.includes('invalid')) {" + }, + { + "file": "src/pages/Reset.tsx", + "line": 86, + "column": 28, + "kind": "string_literal", + "text": "Der Reset-Link ist ungültig oder abgelaufen. Bitte fordern Sie einen neuen Link an.", + "context": "string literal", + "line_content": " setValidationError('Der Reset-Link ist ungültig oder abgelaufen. Bitte fordern Sie einen neuen Link an.');" + }, + { + "file": "src/pages/Reset.tsx", + "line": 101, + "column": 19, + "kind": "string_literal", + "text": "PowerOn", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " alt=\"PowerOn\"" + }, + { + "file": "src/pages/Reset.tsx", + "line": 107, + "column": 44, + "kind": "jsx_text", + "text": "Neues Passwort setzen", + "context": "between tags, user-visible text node", + "line_content": "

Neues Passwort setzen

" + }, + { + "file": "src/pages/Reset.tsx", + "line": 119, + "column": 25, + "kind": "jsx_text", + "text": "oder zurück zum", + "context": "between tags, user-visible text node", + "line_content": " oder zurück zum" + }, + { + "file": "src/pages/Reset.tsx", + "line": 141, + "column": 17, + "kind": "string_literal", + "text": "PowerOn", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " alt=\"PowerOn\"" + }, + { + "file": "src/pages/Reset.tsx", + "line": 147, + "column": 42, + "kind": "jsx_text", + "text": "Neues Passwort setzen", + "context": "between tags, user-visible text node", + "line_content": "

Neues Passwort setzen

" + }, + { + "file": "src/pages/Reset.tsx", + "line": 159, + "column": 56, + "kind": "jsx_text", + "text": "Mindestens 8 Zeichen", + "context": "between tags, user-visible text node", + "line_content": "
Mindestens 8 Zeichen
" + }, + { + "file": "src/pages/Reset.tsx", + "line": 163, + "column": 35, + "kind": "string_literal", + "text": " ", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\" \"" + }, + { + "file": "src/pages/Reset.tsx", + "line": 174, + "column": 105, + "kind": "jsx_text", + "text": "Neues Passwort", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/Reset.tsx", + "line": 181, + "column": 35, + "kind": "string_literal", + "text": " ", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\" \"" + }, + { + "file": "src/pages/Reset.tsx", + "line": 192, + "column": 119, + "kind": "jsx_text", + "text": "Passwort bestätigen", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/Reset.tsx", + "line": 200, + "column": 34, + "kind": "string_literal", + "text": "Wird gespeichert...", + "context": "string literal", + "line_content": " {isLoading ? \"Wird gespeichert...\" : \"Passwort setzen\"}" + }, + { + "file": "src/pages/Reset.tsx", + "line": 200, + "column": 58, + "kind": "string_literal", + "text": "Passwort setzen", + "context": "string literal", + "line_content": " {isLoading ? \"Wird gespeichert...\" : \"Passwort setzen\"}" + }, + { + "file": "src/pages/Reset.tsx", + "line": 206, + "column": 23, + "kind": "jsx_text", + "text": "Zurück zum", + "context": "between tags, user-visible text node", + "line_content": " Zurück zum" + }, + { + "file": "src/pages/Settings.tsx", + "line": 23, + "column": 28, + "kind": "string_literal", + "text": "Profil", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'profile', label: 'Profil' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 24, + "column": 31, + "kind": "string_literal", + "text": "Darstellung", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'appearance', label: 'Darstellung' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 25, + "column": 26, + "kind": "string_literal", + "text": "Stimme & Sprache", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'voice', label: 'Stimme & Sprache' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 26, + "column": 35, + "kind": "string_literal", + "text": "Neutralisierung (lokal)", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'neutralization', label: 'Neutralisierung (lokal)' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 27, + "column": 28, + "kind": "string_literal", + "text": "Datenschutz", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'privacy', label: 'Datenschutz' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 50, + "column": 33, + "kind": "string_literal", + "text": "Deutsch", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'de', label: 'Deutsch' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 51, + "column": 33, + "kind": "string_literal", + "text": "English", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'en', label: 'English' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 52, + "column": 33, + "kind": "string_literal", + "text": "Français", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'fr', label: 'Français' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 56, + "column": 48, + "kind": "string_literal", + "text": "Vollstaendiger Name", + "context": "object property label: (e.g. table column)", + "line_content": " { name: 'fullName', type: 'string', label: 'Vollstaendiger Name', description: 'Ihr vollstaendiger Name', required: false, placeholder: 'Max Mustermann' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 56, + "column": 84, + "kind": "string_literal", + "text": "Ihr vollstaendiger Name", + "context": "string literal", + "line_content": " { name: 'fullName', type: 'string', label: 'Vollstaendiger Name', description: 'Ihr vollstaendiger Name', required: false, placeholder: 'Max Mustermann' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 56, + "column": 141, + "kind": "string_literal", + "text": "Max Mustermann", + "context": "string literal", + "line_content": " { name: 'fullName', type: 'string', label: 'Vollstaendiger Name', description: 'Ihr vollstaendiger Name', required: false, placeholder: 'Max Mustermann' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 57, + "column": 44, + "kind": "string_literal", + "text": "E-Mail-Adresse", + "context": "object property label: (e.g. table column)", + "line_content": " { name: 'email', type: 'email', label: 'E-Mail-Adresse', description: 'Ihre E-Mail-Adresse fuer Benachrichtigungen', required: true, placeholder: 'name@example.com' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 57, + "column": 75, + "kind": "string_literal", + "text": "Ihre E-Mail-Adresse fuer Benachrichtigungen", + "context": "string literal", + "line_content": " { name: 'email', type: 'email', label: 'E-Mail-Adresse', description: 'Ihre E-Mail-Adresse fuer Benachrichtigungen', required: true, placeholder: 'name@example.com' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 58, + "column": 48, + "kind": "string_literal", + "text": "Sprache", + "context": "object property label: (e.g. table column)", + "line_content": " { name: 'language', type: 'select', label: 'Sprache', description: 'Anzeigesprache der Anwendung', required: true, options: languageOptions }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 58, + "column": 72, + "kind": "string_literal", + "text": "Anzeigesprache der Anwendung", + "context": "string literal", + "line_content": " { name: 'language', type: 'select', label: 'Sprache', description: 'Anzeigesprache der Anwendung', required: true, options: languageOptions }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 68, + "column": 31, + "kind": "string_literal", + "text": "Fehler beim Speichern des Profils", + "context": "string literal", + "line_content": " setError(err.message || 'Fehler beim Speichern des Profils');" + }, + { + "file": "src/pages/Settings.tsx", + "line": 80, + "column": 15, + "kind": "jsx_text", + "text": "Profil bearbeiten", + "context": "between tags, user-visible text node", + "line_content": "

Profil bearbeiten

" + }, + { + "file": "src/pages/Settings.tsx", + "line": 137, + "column": 31, + "kind": "string_literal", + "text": "Fehler beim Laden der Voice-Einstellungen", + "context": "string literal", + "line_content": " setError(err.message || 'Fehler beim Laden der Voice-Einstellungen');" + }, + { + "file": "src/pages/Settings.tsx", + "line": 184, + "column": 18, + "kind": "string_literal", + "text": "Einstellungen gespeichert", + "context": "string literal", + "line_content": " setSuccess('Einstellungen gespeichert');" + }, + { + "file": "src/pages/Settings.tsx", + "line": 188, + "column": 31, + "kind": "string_literal", + "text": "Fehler beim Speichern", + "context": "string literal", + "line_content": " setError(err.message || 'Fehler beim Speichern');" + }, + { + "file": "src/pages/Settings.tsx", + "line": 206, + "column": 24, + "kind": "string_literal", + "text": "Stimmtest fehlgeschlagen", + "context": "string literal", + "line_content": " } catch { setError('Stimmtest fehlgeschlagen'); }" + }, + { + "file": "src/pages/Settings.tsx", + "line": 216, + "column": 64, + "kind": "string_literal", + "text": "English (US)", + "context": "string literal", + "line_content": " { code: 'de-DE', name: 'Deutsch' }, { code: 'en-US', name: 'English (US)' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 230, + "column": 45, + "kind": "jsx_text", + "text": "STT-Sprache (Spracheingabe)", + "context": "between tags, user-visible text node", + "line_content": "

STT-Sprache (Spracheingabe)

" + }, + { + "file": "src/pages/Settings.tsx", + "line": 233, + "column": 52, + "kind": "jsx_text", + "text": "Sprache fuer Spracherkennung", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/Settings.tsx", + "line": 234, + "column": 54, + "kind": "jsx_text", + "text": "Wird fuer die Sprache-zu-Text-Erkennung verwendet.", + "context": "between tags, user-visible text node", + "line_content": "

Wird fuer die Sprache-zu-Text-Erkennung verwendet.

" + }, + { + "file": "src/pages/Settings.tsx", + "line": 247, + "column": 45, + "kind": "jsx_text", + "text": "TTS-Stimmen (Sprachausgabe)", + "context": "between tags, user-visible text node", + "line_content": "

TTS-Stimmen (Sprachausgabe)

" + }, + { + "file": "src/pages/Settings.tsx", + "line": 304, + "column": 36, + "kind": "string_literal", + "text": "Einstellungen speichern", + "context": "string literal", + "line_content": " {saving ? 'Speichern...' : 'Einstellungen speichern'}" + }, + { + "file": "src/pages/Settings.tsx", + "line": 342, + "column": 31, + "kind": "string_literal", + "text": "Fehler beim Laden", + "context": "string literal", + "line_content": " setError(err.message || 'Fehler beim Laden');" + }, + { + "file": "src/pages/Settings.tsx", + "line": 355, + "column": 31, + "kind": "string_literal", + "text": "Fehler beim Loeschen", + "context": "string literal", + "line_content": " setError(err.message || 'Fehler beim Loeschen');" + }, + { + "file": "src/pages/Settings.tsx", + "line": 371, + "column": 45, + "kind": "jsx_text", + "text": "Platzhalter-Mappings (lokal)", + "context": "between tags, user-visible text node", + "line_content": "

Platzhalter-Mappings (lokal)

" + }, + { + "file": "src/pages/Settings.tsx", + "line": 377, + "column": 21, + "kind": "string_literal", + "text": "1px solid var(--border-color, #bfdbfe)", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, #bfdbfe)'," + }, + { + "file": "src/pages/Settings.tsx", + "line": 385, + "column": 19, + "kind": "jsx_text", + "text": "Mandant → AI-Workspace-Instanz → Einstellungen → Tab „Neutralisierung“", + "context": "between tags, user-visible text node", + "line_content": " Mandant → AI-Workspace-Instanz → Einstellungen → Tab „Neutralisierung“ (nicht auf dieser" + }, + { + "file": "src/pages/Settings.tsx", + "line": 470, + "column": 32, + "kind": "string_literal", + "text": "Sprache konnte nicht gespeichert werden", + "context": "string literal", + "line_content": " } catch { setLanguageError('Sprache konnte nicht gespeichert werden'); }" + }, + { + "file": "src/pages/Settings.tsx", + "line": 475, + "column": 69, + "kind": "string_literal", + "text": "Nicht angemeldet", + "context": "string literal", + "line_content": " if (!currentUser?.id || !currentUser?.username) throw new Error('Nicht angemeldet');" + }, + { + "file": "src/pages/Settings.tsx", + "line": 489, + "column": 40, + "kind": "jsx_text", + "text": "Persoenliche Einstellungen und Praeferenzen", + "context": "between tags, user-visible text node", + "line_content": "

Persoenliche Einstellungen und Praeferenzen

" + }, + { + "file": "src/pages/Settings.tsx", + "line": 511, + "column": 58, + "kind": "jsx_text", + "text": "Profil bearbeiten", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/Settings.tsx", + "line": 512, + "column": 60, + "kind": "jsx_text", + "text": "Aendern Sie Ihren Namen und Ihre E-Mail-Adresse.", + "context": "between tags, user-visible text node", + "line_content": "

Aendern Sie Ihren Namen und Ihre E-Mail-Adresse.

" + }, + { + "file": "src/pages/Settings.tsx", + "line": 540, + "column": 144, + "kind": "jsx_text", + "text": "Waehlen Sie zwischen hellem und dunklem Design.", + "context": "between tags, user-visible text node", + "line_content": "

Waehlen Sie zwischen hellem und dunklem Design.

" + }, + { + "file": "src/pages/Settings.tsx", + "line": 555, + "column": 46, + "kind": "string_literal", + "text": "Deutsch", + "context": "object property label: (e.g. table column)", + "line_content": " { code: 'de', label: 'Deutsch' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 556, + "column": 46, + "kind": "string_literal", + "text": "English", + "context": "object property label: (e.g. table column)", + "line_content": " { code: 'en', label: 'English' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 557, + "column": 46, + "kind": "string_literal", + "text": "Français", + "context": "object property label: (e.g. table column)", + "line_content": " { code: 'fr', label: 'Français' }," + }, + { + "file": "src/pages/Settings.tsx", + "line": 584, + "column": 90, + "kind": "jsx_text", + "text": "GDPR / Privacy", + "context": "between tags, user-visible text node", + "line_content": "

Datenexport, Portabilität und Kontolöschung.

" + }, + { + "file": "src/pages/Settings.tsx", + "line": 584, + "column": 153, + "kind": "jsx_text", + "text": "Datenexport, Portabilität und Kontolöschung.", + "context": "between tags, user-visible text node", + "line_content": "

Datenexport, Portabilität und Kontolöschung.

" + }, + { + "file": "src/pages/Settings.tsx", + "line": 585, + "column": 123, + "kind": "jsx_text", + "text": "GDPR öffnen", + "context": "between tags, user-visible text node", + "line_content": "
GDPR öffnen
" + }, + { + "file": "src/pages/Store.tsx", + "line": 25, + "column": 9, + "kind": "string_literal", + "text": "Erstelle und verwalte Automatisierungen, um wiederkehrende Aufgaben effizient zu erledigen.", + "context": "string literal", + "line_content": " de: 'Erstelle und verwalte Automatisierungen, um wiederkehrende Aufgaben effizient zu erledigen.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 26, + "column": 9, + "kind": "string_literal", + "text": "Create and manage automations to handle recurring tasks efficiently.", + "context": "string literal", + "line_content": " en: 'Create and manage automations to handle recurring tasks efficiently.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 27, + "column": 9, + "kind": "string_literal", + "text": "Creer et gerer des automatisations pour traiter efficacement les taches recurrentes.", + "context": "string literal", + "line_content": " fr: 'Creer et gerer des automatisations pour traiter efficacement les taches recurrentes.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 30, + "column": 9, + "kind": "string_literal", + "text": "n8n-style Flow-Automatisierung mit grafischem Editor, RAG und Tools.", + "context": "string literal", + "line_content": " de: 'n8n-style Flow-Automatisierung mit grafischem Editor, RAG und Tools.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 31, + "column": 9, + "kind": "string_literal", + "text": "n8n-style flow automation with visual editor, RAG and tools.", + "context": "string literal", + "line_content": " en: 'n8n-style flow automation with visual editor, RAG and tools.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 32, + "column": 9, + "kind": "string_literal", + "text": "Automatisation de flux style n8n avec editeur visuel, RAG et outils.", + "context": "string literal", + "line_content": " fr: 'Automatisation de flux style n8n avec editeur visuel, RAG et outils.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 35, + "column": 9, + "kind": "string_literal", + "text": "Integriere einen AI-Bot in deine Microsoft Teams Meetings und Channels.", + "context": "string literal", + "line_content": " de: 'Integriere einen AI-Bot in deine Microsoft Teams Meetings und Channels.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 36, + "column": 9, + "kind": "string_literal", + "text": "Integrate an AI bot into your Microsoft Teams meetings and channels.", + "context": "string literal", + "line_content": " en: 'Integrate an AI bot into your Microsoft Teams meetings and channels.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 37, + "column": 9, + "kind": "string_literal", + "text": "Integrez un bot IA dans vos reunions et canaux Microsoft Teams.", + "context": "string literal", + "line_content": " fr: 'Integrez un bot IA dans vos reunions et canaux Microsoft Teams.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 40, + "column": 9, + "kind": "string_literal", + "text": "Nutze den gemeinsamen AI Workspace: Chats, Tools und Kontext pro Instanz.", + "context": "string literal", + "line_content": " de: 'Nutze den gemeinsamen AI Workspace: Chats, Tools und Kontext pro Instanz.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 41, + "column": 9, + "kind": "string_literal", + "text": "Use the shared AI workspace: chats, tools, and context per instance.", + "context": "string literal", + "line_content": " en: 'Use the shared AI workspace: chats, tools, and context per instance.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 42, + "column": 9, + "kind": "string_literal", + "text": "Utilisez l'espace de travail IA partage: chats, outils et contexte par instance.", + "context": "string literal", + "line_content": " fr: 'Utilisez l\\'espace de travail IA partage: chats, outils et contexte par instance.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 45, + "column": 9, + "kind": "string_literal", + "text": "CommCoach: Kommunikation trainieren mit KI-gestütztem Coaching und Feedback.", + "context": "string literal", + "line_content": " de: 'CommCoach: Kommunikation trainieren mit KI-gestütztem Coaching und Feedback.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 46, + "column": 9, + "kind": "string_literal", + "text": "CommCoach: practice communication with AI-assisted coaching and feedback.", + "context": "string literal", + "line_content": " en: 'CommCoach: practice communication with AI-assisted coaching and feedback.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 47, + "column": 9, + "kind": "string_literal", + "text": "CommCoach: entrainer la communication avec un coaching assiste par IA.", + "context": "string literal", + "line_content": " fr: 'CommCoach: entrainer la communication avec un coaching assiste par IA.'," + }, + { + "file": "src/pages/Store.tsx", + "line": 140, + "column": 38, + "kind": "string_literal", + "text": "Wird aktiviert...", + "context": "string literal", + "line_content": " ? (language === 'de' ? 'Wird aktiviert...' : 'Activating...')" + }, + { + "file": "src/pages/Store.tsx", + "line": 160, + "column": 41, + "kind": "string_literal", + "text": "Feature Store", + "context": "string literal", + "line_content": "

{currentLanguage === 'de' ? 'Feature Store' : currentLanguage === 'fr' ? 'Feature Store' : 'Feature Store'}

" + }, + { + "file": "src/pages/Store.tsx", + "line": 163, + "column": 15, + "kind": "string_literal", + "text": "Aktiviere Features fuer dein Konto. Deine Daten sind isoliert und nur fuer dich sichtbar.", + "context": "string literal", + "line_content": " ? 'Aktiviere Features fuer dein Konto. Deine Daten sind isoliert und nur fuer dich sichtbar.'" + }, + { + "file": "src/pages/Store.tsx", + "line": 165, + "column": 17, + "kind": "string_literal", + "text": "Activez des fonctionnalites pour votre compte. Vos donnees sont isolees et visibles uniquement par vous.", + "context": "string literal", + "line_content": " ? 'Activez des fonctionnalites pour votre compte. Vos donnees sont isolees et visibles uniquement par vous.'" + }, + { + "file": "src/pages/Store.tsx", + "line": 166, + "column": 17, + "kind": "string_literal", + "text": "Activate features for your account. Your data is isolated and only visible to you.", + "context": "string literal", + "line_content": " : 'Activate features for your account. Your data is isolated and only visible to you.'}" + }, + { + "file": "src/pages/Store.tsx", + "line": 186, + "column": 57, + "kind": "string_literal", + "text": "AI budget", + "context": "string literal", + "line_content": " {currentLanguage === 'de' ? 'AI-Budget' : 'AI budget'}: {subscriptionInfo.budgetAiCHF} CHF" + }, + { + "file": "src/pages/Store.tsx", + "line": 191, + "column": 43, + "kind": "string_literal", + "text": "Trial endet", + "context": "string literal", + "line_content": " {currentLanguage === 'de' ? 'Trial endet' : 'Trial ends'}: {new Date(subscriptionInfo.trialEndsAt).toLocaleDateString()}" + }, + { + "file": "src/pages/Store.tsx", + "line": 191, + "column": 59, + "kind": "string_literal", + "text": "Trial ends", + "context": "string literal", + "line_content": " {currentLanguage === 'de' ? 'Trial endet' : 'Trial ends'}: {new Date(subscriptionInfo.trialEndsAt).toLocaleDateString()}" + }, + { + "file": "src/pages/Store.tsx", + "line": 201, + "column": 39, + "kind": "string_literal", + "text": "Lade Features...", + "context": "string literal", + "line_content": " {currentLanguage === 'de' ? 'Lade Features...' : 'Loading features...'}" + }, + { + "file": "src/pages/Store.tsx", + "line": 201, + "column": 60, + "kind": "string_literal", + "text": "Loading features...", + "context": "string literal", + "line_content": " {currentLanguage === 'de' ? 'Lade Features...' : 'Loading features...'}" + }, + { + "file": "src/pages/Store.tsx", + "line": 206, + "column": 15, + "kind": "string_literal", + "text": "Keine Features im Store verfuegbar.", + "context": "string literal", + "line_content": " ? 'Keine Features im Store verfuegbar.'" + }, + { + "file": "src/pages/Store.tsx", + "line": 207, + "column": 15, + "kind": "string_literal", + "text": "No features available in the store.", + "context": "string literal", + "line_content": " : 'No features available in the store.'}" + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 147, + "column": 11, + "kind": "string_literal", + "text": "Rollen synchronisiert", + "context": "string literal", + "line_content": " 'Rollen synchronisiert'," + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 152, + "column": 19, + "kind": "string_literal", + "text": "Synchronisierung fehlgeschlagen", + "context": "string literal", + "line_content": " showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren');" + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 152, + "column": 70, + "kind": "string_literal", + "text": "Fehler beim Synchronisieren", + "context": "string literal", + "line_content": " showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren');" + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 155, + "column": 27, + "kind": "string_literal", + "text": "Rollen konnten nicht synchronisiert werden", + "context": "string literal", + "line_content": " showError('Fehler', 'Rollen konnten nicht synchronisiert werden');" + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 308, + "column": 46, + "kind": "jsx_text", + "text": "Fehler: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler: {error}

" + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 342, + "column": 34, + "kind": "jsx_text", + "text": "-- Mandant wählen --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 431, + "column": 45, + "kind": "jsx_text", + "text": "Kein Mandant ausgewählt", + "context": "between tags, user-visible text node", + "line_content": "

Kein Mandant ausgewählt

" + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 463, + "column": 56, + "kind": "jsx_text", + "text": "Rollen (max)", + "context": "between tags, user-visible text node", + "line_content": " Rollen (max)" + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 496, + "column": 23, + "kind": "jsx_text", + "text": "Lade Instanzen...", + "context": "between tags, user-visible text node", + "line_content": " Lade Instanzen..." + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 501, + "column": 51, + "kind": "jsx_text", + "text": "Keine Feature-Instanzen", + "context": "between tags, user-visible text node", + "line_content": "

Keine Feature-Instanzen

" + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 526, + "column": 67, + "kind": "jsx_text", + "text": "f.code === inst.featureCode) || { code: inst.featureCode, label: inst.featureCode })}", + "context": "between tags, user-visible text node", + "line_content": " {getFeatureLabel(features.find((f) => f.code === inst.featureCode) || { code: inst.featureCode, label: inst.featureCode })}" + }, + { + "file": "src/pages/admin/AccessManagementHub.tsx", + "line": 543, + "column": 31, + "kind": "string_literal", + "text": "Rollen synchronisieren", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Rollen synchronisieren\"" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 87, + "column": 28, + "kind": "string_literal", + "text": "Name", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'label', label: 'Name', type: 'string' as const, sortable: true, filterable: true, searchable: true, width: 200 }," + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 88, + "column": 34, + "kind": "string_literal", + "text": "Feature", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'featureCode', label: 'Feature', type: 'string' as const, sortable: true, filterable: true, width: 150," + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 100, + "column": 30, + "kind": "string_literal", + "text": "Aktiv", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'enabled', label: 'Aktiv', type: 'boolean' as const, sortable: true, filterable: true, width: 80 }," + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 123, + "column": 29, + "kind": "string_literal", + "text": "Label ist erforderlich.", + "context": "string literal", + "line_content": " showError('Fehler', 'Label ist erforderlich.');" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 133, + "column": 31, + "kind": "string_literal", + "text": "System Prompt ist erforderlich für Chatbot-Instanzen.", + "context": "string literal", + "line_content": " showError('Fehler', 'System Prompt ist erforderlich für Chatbot-Instanzen.');" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 177, + "column": 21, + "kind": "string_literal", + "text": "Feature-Instanz erstellt", + "context": "string literal", + "line_content": " showSuccess('Feature-Instanz erstellt', `Die Instanz \"${createLabel}\" wurde erfolgreich erstellt.`);" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 179, + "column": 45, + "kind": "string_literal", + "text": "Fehler beim Erstellen der Feature-Instanz", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Erstellen der Feature-Instanz');" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 229, + "column": 31, + "kind": "string_literal", + "text": "System Prompt ist erforderlich für Chatbot-Instanzen.", + "context": "string literal", + "line_content": " showError('Fehler', 'System Prompt ist erforderlich für Chatbot-Instanzen.');" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 271, + "column": 21, + "kind": "string_literal", + "text": "Feature-Instanz aktualisiert", + "context": "string literal", + "line_content": " showSuccess('Feature-Instanz aktualisiert', `Die Instanz \"${data.label}\" wurde erfolgreich aktualisiert.`);" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 273, + "column": 45, + "kind": "string_literal", + "text": "Fehler beim Aktualisieren der Feature-Instanz", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Aktualisieren der Feature-Instanz');" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 286, + "column": 19, + "kind": "string_literal", + "text": "Instanz gelöscht", + "context": "string literal", + "line_content": " showSuccess('Instanz gelöscht', 'Die Feature-Instanz wurde gelöscht.');" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 286, + "column": 39, + "kind": "string_literal", + "text": "Die Feature-Instanz wurde gelöscht.", + "context": "string literal", + "line_content": " showSuccess('Instanz gelöscht', 'Die Feature-Instanz wurde gelöscht.');" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 289, + "column": 43, + "kind": "string_literal", + "text": "Fehler beim Löschen der Feature-Instanz", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Löschen der Feature-Instanz');" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 302, + "column": 11, + "kind": "string_literal", + "text": "Rollen synchronisiert", + "context": "string literal", + "line_content": " 'Rollen synchronisiert'," + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 306, + "column": 19, + "kind": "string_literal", + "text": "Synchronisierung fehlgeschlagen", + "context": "string literal", + "line_content": " showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren der Rollen');" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 306, + "column": 70, + "kind": "string_literal", + "text": "Fehler beim Synchronisieren der Rollen", + "context": "string literal", + "line_content": " showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren der Rollen');" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 338, + "column": 46, + "kind": "jsx_text", + "text": "Fehler: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler: {error}

" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 352, + "column": 46, + "kind": "jsx_text", + "text": "Verwalten Sie Feature-Instanzen für jeden Mandanten", + "context": "between tags, user-visible text node", + "line_content": "

Verwalten Sie Feature-Instanzen für jeden Mandanten

" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 368, + "column": 30, + "kind": "jsx_text", + "text": "-- Mandant wählen --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 390, + "column": 46, + "kind": "string_literal", + "text": "Keine Features verfügbar. Bitte laden Sie die Seite neu oder prüfen Sie die Konsole auf Fehler.", + "context": "string literal", + "line_content": " title={features.length === 0 ? 'Keine Features verfügbar. Bitte laden Sie die Seite neu oder prüfen Sie die Konsole auf Fehler.' : undefined}" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 402, + "column": 17, + "kind": "jsx_text", + "text": "Verfügbare Features:", + "context": "between tags, user-visible text node", + "line_content": " Verfügbare Features: " + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 415, + "column": 44, + "kind": "string_literal", + "text": " Die API hat keine Features zurückgegeben.", + "context": "string literal", + "line_content": " {error ? ` Fehler: ${error}` : ' Die API hat keine Features zurückgegeben.'}" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 432, + "column": 45, + "kind": "jsx_text", + "text": "Kein Mandant ausgewählt", + "context": "between tags, user-visible text node", + "line_content": "

Kein Mandant ausgewählt

" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 453, + "column": 24, + "kind": "string_literal", + "text": "Instanz löschen", + "context": "string literal", + "line_content": " title: 'Instanz löschen'," + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 461, + "column": 24, + "kind": "string_literal", + "text": "Instanz bearbeiten", + "context": "string literal", + "line_content": " title: 'Instanz bearbeiten'," + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 467, + "column": 24, + "kind": "string_literal", + "text": "Rollen synchronisieren", + "context": "string literal", + "line_content": " title: 'Rollen synchronisieren'," + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 477, + "column": 26, + "kind": "string_literal", + "text": "Keine Feature-Instanzen gefunden", + "context": "string literal", + "line_content": " emptyMessage=\"Keine Feature-Instanzen gefunden\"" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 487, + "column": 49, + "kind": "jsx_text", + "text": "Neue Feature-Instanz erstellen", + "context": "between tags, user-visible text node", + "line_content": "

Neue Feature-Instanz erstellen

" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 497, + "column": 20, + "kind": "jsx_text", + "text": "Keine Features verfügbar. Bitte wenden Sie sich an den System-Administrator.", + "context": "between tags, user-visible text node", + "line_content": "

Keine Features verfügbar. Bitte wenden Sie sich an den System-Administrator.

" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 501, + "column": 25, + "kind": "jsx_text", + "text": "Lade Formular...", + "context": "between tags, user-visible text node", + "line_content": " Lade Formular..." + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 528, + "column": 35, + "kind": "string_literal", + "text": "Feature auswählen (erforderlich)", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\"Feature auswählen (erforderlich)\"" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 555, + "column": 37, + "kind": "string_literal", + "text": "Instanz-Bezeichnung eingeben...", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\"Instanz-Bezeichnung eingeben...\"" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 611, + "column": 49, + "kind": "jsx_text", + "text": "Feature-Instanz bearbeiten", + "context": "between tags, user-visible text node", + "line_content": "

Feature-Instanz bearbeiten

" + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 625, + "column": 28, + "kind": "string_literal", + "text": "Bezeichnung", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Bezeichnung'," + }, + { + "file": "src/pages/admin/AdminFeatureAccessPage.tsx", + "line": 632, + "column": 28, + "kind": "string_literal", + "text": "Aktiviert", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Aktiviert'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 201, + "column": 14, + "kind": "string_literal", + "text": "Benutzername", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Benutzername'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 210, + "column": 14, + "kind": "string_literal", + "text": "E-Mail", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'E-Mail'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 219, + "column": 14, + "kind": "string_literal", + "text": "Vollständiger Name", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Vollständiger Name'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 228, + "column": 14, + "kind": "string_literal", + "text": "Rollen", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 241, + "column": 14, + "kind": "string_literal", + "text": "Aktiv", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Aktiv'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 268, + "column": 16, + "kind": "string_literal", + "text": "Benutzer", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Benutzer'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 275, + "column": 16, + "kind": "string_literal", + "text": "Rollen", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 288, + "column": 16, + "kind": "string_literal", + "text": "Rollen", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 295, + "column": 16, + "kind": "string_literal", + "text": "Aktiv", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Aktiv'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 312, + "column": 21, + "kind": "string_literal", + "text": "Benutzer hinzugefügt", + "context": "string literal", + "line_content": " showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde erfolgreich zur Feature-Instanz hinzugefügt.');" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 312, + "column": 45, + "kind": "string_literal", + "text": "Der Benutzer wurde erfolgreich zur Feature-Instanz hinzugefügt.", + "context": "string literal", + "line_content": " showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde erfolgreich zur Feature-Instanz hinzugefügt.');" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 314, + "column": 45, + "kind": "string_literal", + "text": "Fehler beim Hinzufügen des Benutzers", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Hinzufügen des Benutzers');" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 336, + "column": 21, + "kind": "string_literal", + "text": "Eintrag aktualisiert", + "context": "string literal", + "line_content": " showSuccess('Eintrag aktualisiert', 'Rollen und Aktiv-Status wurden erfolgreich aktualisiert.');" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 336, + "column": 45, + "kind": "string_literal", + "text": "Rollen und Aktiv-Status wurden erfolgreich aktualisiert.", + "context": "string literal", + "line_content": " showSuccess('Eintrag aktualisiert', 'Rollen und Aktiv-Status wurden erfolgreich aktualisiert.');" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 338, + "column": 45, + "kind": "string_literal", + "text": "Fehler beim Aktualisieren", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Aktualisieren');" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 352, + "column": 19, + "kind": "string_literal", + "text": "Benutzer entfernt", + "context": "string literal", + "line_content": " showSuccess('Benutzer entfernt', `\"${user.username}\" wurde aus der Feature-Instanz entfernt.`);" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 354, + "column": 43, + "kind": "string_literal", + "text": "Fehler beim Entfernen des Benutzers", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Entfernen des Benutzers');" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 396, + "column": 46, + "kind": "jsx_text", + "text": "Fehler: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler: {error}

" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 409, + "column": 44, + "kind": "jsx_text", + "text": "Feature Instanz Benutzer", + "context": "between tags, user-visible text node", + "line_content": "

Feature Instanz Benutzer

" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 410, + "column": 46, + "kind": "jsx_text", + "text": "Verwalten Sie Benutzerzugriffe auf Feature-Instanzen", + "context": "between tags, user-visible text node", + "line_content": "

Verwalten Sie Benutzerzugriffe auf Feature-Instanzen

" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 427, + "column": 30, + "kind": "jsx_text", + "text": "-- Mandant / Feature-Instanz wählen --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 485, + "column": 17, + "kind": "jsx_text", + "text": "Verfügbare Rollen:", + "context": "between tags, user-visible text node", + "line_content": " Verfügbare Rollen: " + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 499, + "column": 17, + "kind": "jsx_text", + "text": "Diese Instanz hat noch keine Rollen. Bitte synchronisieren Sie die Rollen zuerst unter \"Feature-Instanzen\".", + "context": "between tags, user-visible text node", + "line_content": " Diese Instanz hat noch keine Rollen. Bitte synchronisieren Sie die Rollen zuerst unter \"Feature-Instanzen\"." + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 507, + "column": 45, + "kind": "jsx_text", + "text": "Keine Feature-Instanz ausgewählt", + "context": "between tags, user-visible text node", + "line_content": "

Keine Feature-Instanz ausgewählt

" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 510, + "column": 17, + "kind": "string_literal", + "text": "Es gibt noch keine Feature-Instanzen. Erstellen Sie zuerst Feature-Instanzen unter \"Feature-Instanzen\".", + "context": "string literal", + "line_content": " ? 'Es gibt noch keine Feature-Instanzen. Erstellen Sie zuerst Feature-Instanzen unter \"Feature-Instanzen\".'" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 511, + "column": 17, + "kind": "string_literal", + "text": "Wählen Sie eine Feature-Instanz aus, um deren Benutzer zu verwalten.", + "context": "string literal", + "line_content": " : 'Wählen Sie eine Feature-Instanz aus, um deren Benutzer zu verwalten.'}" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 531, + "column": 24, + "kind": "string_literal", + "text": "Rollen bearbeiten", + "context": "string literal", + "line_content": " title: 'Rollen bearbeiten'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 535, + "column": 24, + "kind": "string_literal", + "text": "Aus Instanz entfernen", + "context": "string literal", + "line_content": " title: 'Aus Instanz entfernen'," + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 552, + "column": 26, + "kind": "string_literal", + "text": "Keine Benutzer gefunden", + "context": "string literal", + "line_content": " emptyMessage=\"Keine Benutzer gefunden\"" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 562, + "column": 49, + "kind": "jsx_text", + "text": "Benutzer zur Feature-Instanz hinzufügen", + "context": "between tags, user-visible text node", + "line_content": "

Benutzer zur Feature-Instanz hinzufügen

" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 572, + "column": 20, + "kind": "jsx_text", + "text": "Alle Benutzer haben bereits Zugriff auf diese Feature-Instanz.", + "context": "between tags, user-visible text node", + "line_content": "

Alle Benutzer haben bereits Zugriff auf diese Feature-Instanz.

" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 574, + "column": 20, + "kind": "jsx_text", + "text": "Diese Feature-Instanz hat keine Rollen. Bitte synchronisieren Sie zuerst die Rollen.", + "context": "between tags, user-visible text node", + "line_content": "

Diese Feature-Instanz hat keine Rollen. Bitte synchronisieren Sie zuerst die Rollen.

" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 581, + "column": 36, + "kind": "string_literal", + "text": "Hinzufügen", + "context": "string literal", + "line_content": " submitButtonText=\"Hinzufügen\"" + }, + { + "file": "src/pages/admin/AdminFeatureInstanceUsersPage.tsx", + "line": 595, + "column": 49, + "kind": "jsx_text", + "text": "Rollen bearbeiten: {editingUser.username}", + "context": "between tags, user-visible text node", + "line_content": "

Rollen bearbeiten: {editingUser.username}

" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 69, + "column": 18, + "kind": "string_literal", + "text": "Fehler beim Laden der Features", + "context": "string literal", + "line_content": " setError('Fehler beim Laden der Features');" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 111, + "column": 16, + "kind": "string_literal", + "text": "Fehler beim Laden der Feature-Rollen", + "context": "string literal", + "line_content": " setError('Fehler beim Laden der Feature-Rollen');" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 134, + "column": 14, + "kind": "string_literal", + "text": "Rollen-Label", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen-Label'," + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 143, + "column": 14, + "kind": "string_literal", + "text": "Beschreibung", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Beschreibung'," + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 151, + "column": 14, + "kind": "string_literal", + "text": "Feature", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Feature'," + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 169, + "column": 16, + "kind": "string_literal", + "text": "Rollen-Label", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen-Label'," + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 172, + "column": 22, + "kind": "string_literal", + "text": "Eindeutiger Bezeichner der Rolle (z.B. trustee-admin)", + "context": "string literal", + "line_content": " description: 'Eindeutiger Bezeichner der Rolle (z.B. trustee-admin)'" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 176, + "column": 16, + "kind": "string_literal", + "text": "Beschreibung", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Beschreibung'," + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 179, + "column": 22, + "kind": "string_literal", + "text": "Mehrsprachige Beschreibung der Rolle", + "context": "string literal", + "line_content": " description: 'Mehrsprachige Beschreibung der Rolle'" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 190, + "column": 16, + "kind": "string_literal", + "text": "Rollen-Label", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen-Label'," + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 194, + "column": 22, + "kind": "string_literal", + "text": "Eindeutiger Bezeichner der Rolle", + "context": "string literal", + "line_content": " description: 'Eindeutiger Bezeichner der Rolle'" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 198, + "column": 16, + "kind": "string_literal", + "text": "Beschreibung", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Beschreibung'," + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 201, + "column": 22, + "kind": "string_literal", + "text": "Mehrsprachige Beschreibung der Rolle", + "context": "string literal", + "line_content": " description: 'Mehrsprachige Beschreibung der Rolle'" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 221, + "column": 57, + "kind": "string_literal", + "text": "Fehler beim Erstellen der Rolle", + "context": "string literal", + "line_content": " showError('Fehler', err.response?.data?.detail || 'Fehler beim Erstellen der Rolle');" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 240, + "column": 57, + "kind": "string_literal", + "text": "Fehler beim Aktualisieren der Rolle", + "context": "string literal", + "line_content": " showError('Fehler', err.response?.data?.detail || 'Fehler beim Aktualisieren der Rolle');" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 253, + "column": 57, + "kind": "string_literal", + "text": "Fehler beim Löschen der Rolle", + "context": "string literal", + "line_content": " showError('Fehler', err.response?.data?.detail || 'Fehler beim Löschen der Rolle');" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 283, + "column": 44, + "kind": "jsx_text", + "text": "Feature Rollen & Rechte", + "context": "between tags, user-visible text node", + "line_content": "

Feature Rollen & Rechte

" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 284, + "column": 46, + "kind": "jsx_text", + "text": "Template-Rollen und deren Berechtigungen für Feature-Instanzen verwalten", + "context": "between tags, user-visible text node", + "line_content": "

Template-Rollen und deren Berechtigungen für Feature-Instanzen verwalten

" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 300, + "column": 30, + "kind": "jsx_text", + "text": "-- Feature wählen --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 346, + "column": 45, + "kind": "jsx_text", + "text": "Kein Feature ausgewählt", + "context": "between tags, user-visible text node", + "line_content": "

Kein Feature ausgewählt

" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 368, + "column": 24, + "kind": "string_literal", + "text": "Rolle bearbeiten", + "context": "string literal", + "line_content": " title: 'Rolle bearbeiten'," + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 372, + "column": 24, + "kind": "string_literal", + "text": "Rolle löschen", + "context": "string literal", + "line_content": " title: 'Rolle löschen'," + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 380, + "column": 24, + "kind": "string_literal", + "text": "Berechtigungen verwalten", + "context": "string literal", + "line_content": " title: 'Berechtigungen verwalten'," + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 389, + "column": 26, + "kind": "string_literal", + "text": "Keine Feature-Rollen gefunden", + "context": "string literal", + "line_content": " emptyMessage=\"Keine Feature-Rollen gefunden\"" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 399, + "column": 49, + "kind": "jsx_text", + "text": "Neue Feature-Rolle erstellen", + "context": "between tags, user-visible text node", + "line_content": "

Neue Feature-Rolle erstellen

" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 417, + "column": 66, + "kind": "string_literal", + "text": "Rolle erstellen", + "context": "string literal", + "line_content": " submitButtonText={isSubmitting ? 'Erstelle...' : 'Rolle erstellen'}" + }, + { + "file": "src/pages/admin/AdminFeatureRolesPage.tsx", + "line": 430, + "column": 49, + "kind": "jsx_text", + "text": "Feature-Rolle bearbeiten", + "context": "between tags, user-visible text node", + "line_content": "

Feature-Rolle bearbeiten

" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 86, + "column": 14, + "kind": "string_literal", + "text": "Benutzername", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Benutzername'," + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 95, + "column": 14, + "kind": "string_literal", + "text": "E-Mail", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'E-Mail'," + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 104, + "column": 36, + "kind": "string_literal", + "text": "Email wurde gesendet", + "context": "string literal", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 104, + "column": 61, + "kind": "string_literal", + "text": "Email nicht gesendet", + "context": "string literal", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 112, + "column": 14, + "kind": "string_literal", + "text": "Rollen", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen'," + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 127, + "column": 14, + "kind": "string_literal", + "text": "Gültig bis", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Gültig bis'," + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 143, + "column": 14, + "kind": "string_literal", + "text": "Verwendet", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Verwendet'," + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 151, + "column": 14, + "kind": "string_literal", + "text": "Erstellt", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Erstellt'," + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 177, + "column": 52, + "kind": "string_literal", + "text": "Gültigkeitsdauer (Stunden)", + "context": "object property label: (e.g. table column)", + "line_content": " fields.push({ name: 'expiresInHours', label: 'Gültigkeitsdauer (Stunden)', type: 'number'," + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 200, + "column": 45, + "kind": "string_literal", + "text": "Fehler beim Erstellen der Einladung", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Erstellen der Einladung');" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 213, + "column": 43, + "kind": "string_literal", + "text": "Fehler beim Widerrufen der Einladung", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Widerrufen der Einladung');" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 248, + "column": 46, + "kind": "jsx_text", + "text": "Fehler: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler: {error}

" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 262, + "column": 46, + "kind": "jsx_text", + "text": "Erstellen und verwalten Sie Einladungen für neue Benutzer", + "context": "between tags, user-visible text node", + "line_content": "

Erstellen und verwalten Sie Einladungen für neue Benutzer

" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 278, + "column": 30, + "kind": "jsx_text", + "text": "-- Mandant wählen --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 329, + "column": 45, + "kind": "jsx_text", + "text": "Kein Mandant ausgewählt", + "context": "between tags, user-visible text node", + "line_content": "

Kein Mandant ausgewählt

" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 350, + "column": 24, + "kind": "string_literal", + "text": "Einladung widerrufen", + "context": "string literal", + "line_content": " title: 'Einladung widerrufen'," + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 358, + "column": 24, + "kind": "string_literal", + "text": "Einladungs-Link anzeigen", + "context": "string literal", + "line_content": " title: 'Einladungs-Link anzeigen'," + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 366, + "column": 26, + "kind": "string_literal", + "text": "Keine Einladungen gefunden", + "context": "string literal", + "line_content": " emptyMessage=\"Keine Einladungen gefunden\"" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 376, + "column": 49, + "kind": "jsx_text", + "text": "Neue Einladung erstellen", + "context": "between tags, user-visible text node", + "line_content": "

Neue Einladung erstellen

" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 388, + "column": 25, + "kind": "jsx_text", + "text": "Lade Rollen...", + "context": "between tags, user-visible text node", + "line_content": " Lade Rollen..." + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 393, + "column": 25, + "kind": "jsx_text", + "text": "Lade Formular...", + "context": "between tags, user-visible text node", + "line_content": " Lade Formular..." + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 401, + "column": 36, + "kind": "string_literal", + "text": "Einladung erstellen", + "context": "string literal", + "line_content": " submitButtonText=\"Einladung erstellen\"" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 438, + "column": 25, + "kind": "string_literal", + "text": "In Zwischenablage kopieren", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"In Zwischenablage kopieren\"" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 441, + "column": 34, + "kind": "string_literal", + "text": " Kopiert!", + "context": "string literal", + "line_content": " {copySuccess ? ' Kopiert!' : ' Kopieren'}" + }, + { + "file": "src/pages/admin/AdminInvitationsPage.tsx", + "line": 441, + "column": 48, + "kind": "string_literal", + "text": " Kopieren", + "context": "string literal", + "line_content": " {copySuccess ? ' Kopiert!' : ' Kopieren'}" + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 22, + "column": 23, + "kind": "string_literal", + "text": "Code", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'id', label: 'Code', type: 'text', sortable: true, filterable: true, width: 90 }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 23, + "column": 26, + "kind": "string_literal", + "text": "Bezeichnung", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'label', label: 'Bezeichnung', type: 'text', sortable: true, filterable: true, width: 160 }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 24, + "column": 27, + "kind": "string_literal", + "text": "Status", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'status', label: 'Status', type: 'text', sortable: true, filterable: true, width: 120 }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 25, + "column": 30, + "kind": "string_literal", + "text": "Keys", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'keysCount', label: 'Keys', type: 'number', sortable: true, width: 90 }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 29, + "column": 25, + "kind": "string_literal", + "text": "it — Italiano", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'it', label: 'it — Italiano' }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 30, + "column": 25, + "kind": "string_literal", + "text": "es — Español", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'es', label: 'es — Español' }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 31, + "column": 25, + "kind": "string_literal", + "text": "pt — Português", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'pt', label: 'pt — Português' }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 32, + "column": 25, + "kind": "string_literal", + "text": "nl — Nederlands", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'nl', label: 'nl — Nederlands' }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 33, + "column": 25, + "kind": "string_literal", + "text": "pl — Polski", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'pl', label: 'pl — Polski' }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 34, + "column": 25, + "kind": "string_literal", + "text": "cs — Čeština", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'cs', label: 'cs — Čeština' }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 35, + "column": 25, + "kind": "string_literal", + "text": "sk — Slovenčina", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'sk', label: 'sk — Slovenčina' }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 36, + "column": 25, + "kind": "string_literal", + "text": "sv — Svenska", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'sv', label: 'sv — Svenska' }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 37, + "column": 25, + "kind": "string_literal", + "text": "no — Norsk", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'no', label: 'no — Norsk' }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 38, + "column": 25, + "kind": "string_literal", + "text": "da — Dansk", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'da', label: 'da — Dansk' }," + }, + { + "file": "src/pages/admin/AdminLanguagesPage.tsx", + "line": 65, + "column": 57, + "kind": "string_literal", + "text": "Laden fehlgeschlagen", + "context": "string literal", + "line_content": " setError(e.response?.data?.detail || e.message || 'Laden fehlgeschlagen');" + }, + { + "file": "src/pages/admin/AdminLogsPage.tsx", + "line": 49, + "column": 46, + "kind": "string_literal", + "text": "Fehler beim Laden der Logs", + "context": "string literal", + "line_content": " setError(err.response?.data?.detail || 'Fehler beim Laden der Logs');" + }, + { + "file": "src/pages/admin/AdminLogsPage.tsx", + "line": 81, + "column": 46, + "kind": "string_literal", + "text": "Fehler beim Download", + "context": "string literal", + "line_content": " setError(err.response?.data?.detail || 'Fehler beim Download');" + }, + { + "file": "src/pages/admin/AdminLogsPage.tsx", + "line": 107, + "column": 44, + "kind": "jsx_text", + "text": "Gateway Logs", + "context": "between tags, user-visible text node", + "line_content": "

Gateway Logs

" + }, + { + "file": "src/pages/admin/AdminLogsPage.tsx", + "line": 111, + "column": 17, + "kind": "string_literal", + "text": "Keine Logs geladen", + "context": "string literal", + "line_content": " : 'Keine Logs geladen'}" + }, + { + "file": "src/pages/admin/AdminLogsPage.tsx", + "line": 112, + "column": 64, + "kind": "jsx_text", + "text": "— {logDir}", + "context": "between tags, user-visible text node", + "line_content": " {logDir && — {logDir}}" + }, + { + "file": "src/pages/admin/AdminLogsPage.tsx", + "line": 120, + "column": 19, + "kind": "string_literal", + "text": "Log herunterladen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Log herunterladen\"" + }, + { + "file": "src/pages/admin/AdminLogsPage.tsx", + "line": 139, + "column": 53, + "kind": "jsx_text", + "text": "Einträge", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminLogsPage.tsx", + "line": 182, + "column": 46, + "kind": "jsx_text", + "text": "Keine Logs geladen", + "context": "between tags, user-visible text node", + "line_content": "

Keine Logs geladen

" + }, + { + "file": "src/pages/admin/AdminLogsPage.tsx", + "line": 191, + "column": 19, + "kind": "jsx_text", + "text": "Logs werden geladen...", + "context": "between tags, user-visible text node", + "line_content": " Logs werden geladen..." + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 14, + "column": 15, + "kind": "string_literal", + "text": "Cleanup Duplicates", + "context": "string literal", + "line_content": " * Includes a \"Cleanup Duplicates\" tool to find and remove duplicate AccessRules." + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 180, + "column": 70, + "kind": "string_literal", + "text": "Fehler beim Laden der Duplikate", + "context": "string literal", + "line_content": " setCleanupError(err?.response?.data?.detail || err?.message || 'Fehler beim Laden der Duplikate');" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 200, + "column": 70, + "kind": "string_literal", + "text": "Fehler beim Bereinigen", + "context": "string literal", + "line_content": " setCleanupError(err?.response?.data?.detail || err?.message || 'Fehler beim Bereinigen');" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 215, + "column": 32, + "kind": "string_literal", + "text": "Mandanten-Rollen", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'mandate', label: 'Mandanten-Rollen' }," + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 216, + "column": 28, + "kind": "string_literal", + "text": "Alle (inkl. Templates)", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'all', label: 'Alle (inkl. Templates)' }," + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 217, + "column": 31, + "kind": "string_literal", + "text": "Nur Templates", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'global', label: 'Nur Templates' }," + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 225, + "column": 46, + "kind": "jsx_text", + "text": "Fehler beim Laden: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler beim Laden: {error}

" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 252, + "column": 19, + "kind": "string_literal", + "text": "Doppelte Regeln finden und bereinigen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Doppelte Regeln finden und bereinigen\"" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 313, + "column": 17, + "kind": "jsx_text", + "text": "Lade Rollen...", + "context": "between tags, user-visible text node", + "line_content": " Lade Rollen..." + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 321, + "column": 14, + "kind": "jsx_text", + "text": "Keine Rollen gefunden", + "context": "between tags, user-visible text node", + "line_content": "

Keine Rollen gefunden

" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 324, + "column": 17, + "kind": "string_literal", + "text": "Es gibt noch keine Mandanten-Rollen. System-Rollen werden bei der Mandant-Erstellung automatisch kopiert.", + "context": "string literal", + "line_content": " ? 'Es gibt noch keine Mandanten-Rollen. System-Rollen werden bei der Mandant-Erstellung automatisch kopiert.'" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 326, + "column": 17, + "kind": "string_literal", + "text": "Es gibt noch keine Rollen-Templates.", + "context": "string literal", + "line_content": " ? 'Es gibt noch keine Rollen-Templates.'" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 327, + "column": 17, + "kind": "string_literal", + "text": "Es gibt noch keine Rollen für diesen Mandanten.", + "context": "string literal", + "line_content": " : 'Es gibt noch keine Rollen für diesen Mandanten.'}" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 402, + "column": 52, + "kind": "string_literal", + "text": "Analysiere Duplikate...", + "context": "string literal", + "line_content": " {cleanupPhase === 'idle' ? 'Analysiere Duplikate...' : 'Bereinige Duplikate...'}" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 402, + "column": 80, + "kind": "string_literal", + "text": "Bereinige Duplikate...", + "context": "string literal", + "line_content": " {cleanupPhase === 'idle' ? 'Analysiere Duplikate...' : 'Bereinige Duplikate...'}" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 436, + "column": 66, + "kind": "string_literal", + "text": "Zu loeschen", + "context": "string literal", + "line_content": " {cleanupPhase === 'done' ? 'Geloescht' : 'Zu loeschen'}" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 445, + "column": 75, + "kind": "jsx_text", + "text": "doppelte Regeln wurden erfolgreich entfernt.", + "context": "between tags, user-visible text node", + "line_content": " {cleanupResult.deletedCount} doppelte Regeln wurden erfolgreich entfernt." + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 452, + "column": 29, + "kind": "jsx_text", + "text": "Keine Duplikate gefunden. Alles sauber!", + "context": "between tags, user-visible text node", + "line_content": " Keine Duplikate gefunden. Alles sauber!" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 515, + "column": 70, + "kind": "string_literal", + "text": "Zu reparieren", + "context": "string literal", + "line_content": " {cleanupPhase === 'done' ? 'Repariert' : 'Zu reparieren'}" + }, + { + "file": "src/pages/admin/AdminMandateRolePermissionsPage.tsx", + "line": 566, + "column": 29, + "kind": "jsx_text", + "text": "Keine fehlerhaften Template-Rollen-Zuweisungen.", + "context": "between tags, user-visible text node", + "line_content": " Keine fehlerhaften Template-Rollen-Zuweisungen." + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 102, + "column": 14, + "kind": "string_literal", + "text": "Bezeichnung", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Bezeichnung'," + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 111, + "column": 14, + "kind": "string_literal", + "text": "Beschreibung", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Beschreibung'," + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 120, + "column": 14, + "kind": "string_literal", + "text": "Geltungsbereich", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Geltungsbereich'," + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 161, + "column": 16, + "kind": "string_literal", + "text": "Geltungsbereich", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Geltungsbereich'," + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 166, + "column": 38, + "kind": "string_literal", + "text": "Nur dieser Mandant", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'mandate', label: 'Nur dieser Mandant' }," + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 167, + "column": 37, + "kind": "string_literal", + "text": "Template (wird bei neuen Mandanten kopiert)", + "context": "object property label: (e.g. table column)", + "line_content": " { value: 'global', label: 'Template (wird bei neuen Mandanten kopiert)' }," + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 216, + "column": 45, + "kind": "string_literal", + "text": "Fehler beim Erstellen der Rolle", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Erstellen der Rolle');" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 220, + "column": 42, + "kind": "string_literal", + "text": "Fehler beim Erstellen der Rolle", + "context": "string literal", + "line_content": " showError('Fehler', err.message || 'Fehler beim Erstellen der Rolle');" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 255, + "column": 45, + "kind": "string_literal", + "text": "Fehler beim Aktualisieren der Rolle", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Aktualisieren der Rolle');" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 259, + "column": 42, + "kind": "string_literal", + "text": "Fehler beim Aktualisieren der Rolle", + "context": "string literal", + "line_content": " showError('Fehler', err.message || 'Fehler beim Aktualisieren der Rolle');" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 268, + "column": 19, + "kind": "string_literal", + "text": "Nicht erlaubt", + "context": "string literal", + "line_content": " showWarning('Nicht erlaubt', 'System-Rollen können nicht gelöscht werden.');" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 268, + "column": 36, + "kind": "string_literal", + "text": "System-Rollen können nicht gelöscht werden.", + "context": "string literal", + "line_content": " showWarning('Nicht erlaubt', 'System-Rollen können nicht gelöscht werden.');" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 277, + "column": 43, + "kind": "string_literal", + "text": "Fehler beim Löschen der Rolle", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Löschen der Rolle');" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 300, + "column": 46, + "kind": "jsx_text", + "text": "Fehler: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler: {error}

" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 314, + "column": 46, + "kind": "jsx_text", + "text": "Verwalten Sie System-, globale und mandantenspezifische Rollen", + "context": "between tags, user-visible text node", + "line_content": "

Verwalten Sie System-, globale und mandantenspezifische Rollen

" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 346, + "column": 30, + "kind": "jsx_text", + "text": "-- Mandant wählen --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 364, + "column": 33, + "kind": "jsx_text", + "text": "Alle (inkl. Templates)", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 365, + "column": 36, + "kind": "jsx_text", + "text": "Nur Templates", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 404, + "column": 45, + "kind": "jsx_text", + "text": "Kein Mandant ausgewählt", + "context": "between tags, user-visible text node", + "line_content": "

Kein Mandant ausgewählt

" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 426, + "column": 24, + "kind": "string_literal", + "text": "Rolle bearbeiten", + "context": "string literal", + "line_content": " title: 'Rolle bearbeiten'," + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 427, + "column": 88, + "kind": "string_literal", + "text": "System-Rollen können nicht bearbeitet werden", + "context": "string literal", + "line_content": " disabled: (row: Role) => row.isSystemRole ? { disabled: true, message: 'System-Rollen können nicht bearbeitet werden' } : false" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 431, + "column": 24, + "kind": "string_literal", + "text": "Rolle löschen", + "context": "string literal", + "line_content": " title: 'Rolle löschen'," + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 432, + "column": 88, + "kind": "string_literal", + "text": "System-Rollen können nicht gelöscht werden", + "context": "string literal", + "line_content": " disabled: (row: Role) => row.isSystemRole ? { disabled: true, message: 'System-Rollen können nicht gelöscht werden' } : false" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 441, + "column": 26, + "kind": "string_literal", + "text": "Keine Rollen gefunden", + "context": "string literal", + "line_content": " emptyMessage=\"Keine Rollen gefunden\"" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 451, + "column": 49, + "kind": "jsx_text", + "text": "Neue Rolle erstellen", + "context": "between tags, user-visible text node", + "line_content": "

Neue Rolle erstellen

" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 463, + "column": 25, + "kind": "jsx_text", + "text": "Lade Formular...", + "context": "between tags, user-visible text node", + "line_content": " Lade Formular..." + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 471, + "column": 68, + "kind": "string_literal", + "text": "Rolle erstellen", + "context": "string literal", + "line_content": " submitButtonText={isSubmitting ? 'Erstelle...' : 'Rolle erstellen'}" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 485, + "column": 49, + "kind": "jsx_text", + "text": "Rolle bearbeiten: {editingRole.roleLabel}", + "context": "between tags, user-visible text node", + "line_content": "

Rolle bearbeiten: {editingRole.roleLabel}

" + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 497, + "column": 25, + "kind": "jsx_text", + "text": "Lade Formular...", + "context": "between tags, user-visible text node", + "line_content": " Lade Formular..." + }, + { + "file": "src/pages/admin/AdminMandateRolesPage.tsx", + "line": 504, + "column": 95, + "kind": "string_literal", + "text": "Template (global)", + "context": "string literal", + "line_content": " Geltungsbereich: {editingRole.mandateId ? 'Mandanten-Instanz' : 'Template (global)'}" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 76, + "column": 9, + "kind": "string_literal", + "text": "Abrechnungseinstellungen konnten nicht geladen werden. Nur Mandantendaten sind sicher bearbeitbar.", + "context": "string literal", + "line_content": " 'Abrechnungseinstellungen konnten nicht geladen werden. Nur Mandantendaten sind sicher bearbeitbar.'" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 88, + "column": 31, + "kind": "string_literal", + "text": "Mandant inkl. Abrechnungseinstellungen gespeichert.", + "context": "string literal", + "line_content": " showSuccess('Erstellt', 'Mandant inkl. Abrechnungseinstellungen gespeichert.');" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 92, + "column": 9, + "kind": "string_literal", + "text": "Mandant erstellt", + "context": "string literal", + "line_content": " 'Mandant erstellt'," + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 93, + "column": 9, + "kind": "string_literal", + "text": "Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.", + "context": "string literal", + "line_content": " 'Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.'" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 108, + "column": 34, + "kind": "string_literal", + "text": "Mandant und Abrechnung aktualisiert.", + "context": "string literal", + "line_content": " showSuccess('Gespeichert', 'Mandant und Abrechnung aktualisiert.');" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 111, + "column": 19, + "kind": "string_literal", + "text": "Teilweise gespeichert", + "context": "string literal", + "line_content": " showWarning('Teilweise gespeichert', 'Mandant gespeichert, Abrechnung konnte nicht aktualisiert werden.');" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 111, + "column": 44, + "kind": "string_literal", + "text": "Mandant gespeichert, Abrechnung konnte nicht aktualisiert werden.", + "context": "string literal", + "line_content": " showWarning('Teilweise gespeichert', 'Mandant gespeichert, Abrechnung konnte nicht aktualisiert werden.');" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 123, + "column": 16, + "kind": "string_literal", + "text": "Mandant deaktivieren", + "context": "string literal", + "line_content": " { title: 'Mandant deaktivieren', confirmLabel: 'Deaktivieren', variant: 'danger', placeholder: mandate.name }," + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 127, + "column": 34, + "kind": "string_literal", + "text": "Der eingegebene Name stimmt nicht überein.", + "context": "string literal", + "line_content": " showWarning('Abgebrochen', 'Der eingegebene Name stimmt nicht überein.');" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 135, + "column": 19, + "kind": "string_literal", + "text": "Nicht erlaubt", + "context": "string literal", + "line_content": " showWarning('Nicht erlaubt', 'System-Mandanten können nicht gelöscht werden.');" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 135, + "column": 36, + "kind": "string_literal", + "text": "System-Mandanten können nicht gelöscht werden.", + "context": "string literal", + "line_content": " showWarning('Nicht erlaubt', 'System-Mandanten können nicht gelöscht werden.');" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 140, + "column": 16, + "kind": "string_literal", + "text": "Hard Delete (irreversibel)", + "context": "string literal", + "line_content": " { title: 'Hard Delete (irreversibel)', confirmLabel: 'Endgültig löschen', variant: 'danger', placeholder: mandate.name }," + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 140, + "column": 60, + "kind": "string_literal", + "text": "Endgültig löschen", + "context": "string literal", + "line_content": " { title: 'Hard Delete (irreversibel)', confirmLabel: 'Endgültig löschen', variant: 'danger', placeholder: mandate.name }," + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 144, + "column": 34, + "kind": "string_literal", + "text": "Der eingegebene Name stimmt nicht überein.", + "context": "string literal", + "line_content": " showWarning('Abgebrochen', 'Der eingegebene Name stimmt nicht überein.');" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 149, + "column": 19, + "kind": "string_literal", + "text": "Gelöscht", + "context": "string literal", + "line_content": " showSuccess('Gelöscht', `Mandant \"${mandate.name}\" wurde endgültig gelöscht.`);" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 158, + "column": 46, + "kind": "jsx_text", + "text": "Fehler beim Laden der Mandanten: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler beim Laden der Mandanten: {error}

" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 172, + "column": 46, + "kind": "jsx_text", + "text": "Verwalten Sie alle Mandanten im System", + "context": "between tags, user-visible text node", + "line_content": "

Verwalten Sie alle Mandanten im System

" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 220, + "column": 24, + "kind": "string_literal", + "text": "Deaktivieren (Soft-Delete)", + "context": "string literal", + "line_content": " title: 'Deaktivieren (Soft-Delete)'," + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 222, + "column": 48, + "kind": "string_literal", + "text": "System-Mandanten können nicht gelöscht werden", + "context": "string literal", + "line_content": " ? { disabled: true, message: 'System-Mandanten können nicht gelöscht werden' }" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 230, + "column": 22, + "kind": "string_literal", + "text": "Hard Delete (irreversibel)", + "context": "string literal", + "line_content": " title: 'Hard Delete (irreversibel)'," + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 232, + "column": 46, + "kind": "string_literal", + "text": "System-Mandanten können nicht gelöscht werden", + "context": "string literal", + "line_content": " ? { disabled: true, message: 'System-Mandanten können nicht gelöscht werden' }" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 244, + "column": 26, + "kind": "string_literal", + "text": "Keine Mandanten gefunden", + "context": "string literal", + "line_content": " emptyMessage=\"Keine Mandanten gefunden\"" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 253, + "column": 49, + "kind": "jsx_text", + "text": "Neuer Mandant", + "context": "between tags, user-visible text node", + "line_content": "

Neuer Mandant

" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 269, + "column": 25, + "kind": "jsx_text", + "text": "Lade Formular...", + "context": "between tags, user-visible text node", + "line_content": " Lade Formular..." + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 299, + "column": 49, + "kind": "jsx_text", + "text": "Mandant bearbeiten", + "context": "between tags, user-visible text node", + "line_content": "

Mandant bearbeiten

" + }, + { + "file": "src/pages/admin/AdminMandatesPage.tsx", + "line": 330, + "column": 25, + "kind": "jsx_text", + "text": "Lade Formular...", + "context": "between tags, user-visible text node", + "line_content": " Lade Formular..." + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 105, + "column": 65, + "kind": "string_literal", + "text": "Failed to fetch users", + "context": "string literal", + "line_content": " setError(err?.response?.data?.detail || err?.message || 'Failed to fetch users');" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 133, + "column": 65, + "kind": "string_literal", + "text": "Failed to fetch overview", + "context": "string literal", + "line_content": " setError(err?.response?.data?.detail || err?.message || 'Failed to fetch overview');" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 200, + "column": 45, + "kind": "string_literal", + "text": "Dieser Benutzer ist SysAdmin und hat vollen Systemzugriff.", + "context": "string literal", + "line_content": " {overview.sysAdminNote || 'Dieser Benutzer ist SysAdmin und hat vollen Systemzugriff.'}" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 207, + "column": 43, + "kind": "jsx_text", + "text": "Keine Mandate-Zuordnungen vorhanden.", + "context": "between tags, user-visible text node", + "line_content": "

Keine Mandate-Zuordnungen vorhanden.

" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 231, + "column": 57, + "kind": "jsx_text", + "text": "Keine Rollen direkt am Mandanten.", + "context": "between tags, user-visible text node", + "line_content": "

Keine Rollen direkt am Mandanten.

" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 256, + "column": 57, + "kind": "jsx_text", + "text": "Keine Feature-Instanzen zugewiesen.", + "context": "between tags, user-visible text node", + "line_content": "

Keine Feature-Instanzen zugewiesen.

" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 358, + "column": 17, + "kind": "jsx_text", + "text": "UI-Zugriffsrechte bestimmen, welche Seiten und Views der Benutzer sehen kann.", + "context": "between tags, user-visible text node", + "line_content": " UI-Zugriffsrechte bestimmen, welche Seiten und Views der Benutzer sehen kann." + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 364, + "column": 47, + "kind": "jsx_text", + "text": "Keine UI-Berechtigungen", + "context": "between tags, user-visible text node", + "line_content": "

Keine UI-Berechtigungen

" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 375, + "column": 103, + "kind": "jsx_text", + "text": "Gewährt durch", + "context": "between tags, user-visible text node", + "line_content": " Gewährt durch" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 383, + "column": 35, + "kind": "string_literal", + "text": "1px solid var(--border-color)", + "context": "string literal", + "line_content": " borderBottom: '1px solid var(--border-color)'," + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 425, + "column": 47, + "kind": "jsx_text", + "text": "Keine Daten-Berechtigungen", + "context": "between tags, user-visible text node", + "line_content": "

Keine Daten-Berechtigungen

" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 438, + "column": 120, + "kind": "jsx_text", + "text": "Löschen", + "context": "between tags, user-visible text node", + "line_content": " Löschen" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 439, + "column": 103, + "kind": "jsx_text", + "text": "Gewährt durch", + "context": "between tags, user-visible text node", + "line_content": " Gewährt durch" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 447, + "column": 35, + "kind": "string_literal", + "text": "1px solid var(--border-color)", + "context": "string literal", + "line_content": " borderBottom: '1px solid var(--border-color)'," + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 521, + "column": 17, + "kind": "jsx_text", + "text": "Ressourcen-Zugriffsrechte bestimmen, welche System-Ressourcen (z.B. AI-Modelle) der Benutzer verwenden kann.", + "context": "between tags, user-visible text node", + "line_content": " Ressourcen-Zugriffsrechte bestimmen, welche System-Ressourcen (z.B. AI-Modelle) der Benutzer verwenden kann." + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 527, + "column": 47, + "kind": "jsx_text", + "text": "Keine Ressourcen-Berechtigungen", + "context": "between tags, user-visible text node", + "line_content": "

Keine Ressourcen-Berechtigungen

" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 538, + "column": 103, + "kind": "jsx_text", + "text": "Gewährt durch", + "context": "between tags, user-visible text node", + "line_content": " Gewährt durch" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 546, + "column": 35, + "kind": "string_literal", + "text": "1px solid var(--border-color)", + "context": "string literal", + "line_content": " borderBottom: '1px solid var(--border-color)'," + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 577, + "column": 46, + "kind": "jsx_text", + "text": "Fehler: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler: {error}

" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 593, + "column": 44, + "kind": "jsx_text", + "text": "Benutzer-Zugriffsübersicht", + "context": "between tags, user-visible text node", + "line_content": "

Benutzer-Zugriffsübersicht

" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 594, + "column": 46, + "kind": "jsx_text", + "text": "Zeigt alle Berechtigungen eines Benutzers an", + "context": "between tags, user-visible text node", + "line_content": "

Zeigt alle Berechtigungen eines Benutzers an

" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 612, + "column": 30, + "kind": "jsx_text", + "text": "-- Benutzer wählen --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 616, + "column": 37, + "kind": "string_literal", + "text": " [SysAdmin]", + "context": "string literal", + "line_content": " {user.isSysAdmin && ' [SysAdmin]'}" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 637, + "column": 45, + "kind": "jsx_text", + "text": "Benutzer auswählen", + "context": "between tags, user-visible text node", + "line_content": "

Benutzer auswählen

" + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 645, + "column": 17, + "kind": "jsx_text", + "text": "Lade Zugriffsübersicht...", + "context": "between tags, user-visible text node", + "line_content": " Lade Zugriffsübersicht..." + }, + { + "file": "src/pages/admin/AdminUserAccessOverviewPage.tsx", + "line": 669, + "column": 27, + "kind": "string_literal", + "text": "1px solid var(--border-color)", + "context": "string literal", + "line_content": " borderBottom: '1px solid var(--border-color)'," + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 100, + "column": 16, + "kind": "string_literal", + "text": "Benutzername", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Benutzername'," + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 109, + "column": 16, + "kind": "string_literal", + "text": "E-Mail", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'E-Mail'," + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 118, + "column": 16, + "kind": "string_literal", + "text": "Vollständiger Name", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Vollständiger Name'," + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 127, + "column": 16, + "kind": "string_literal", + "text": "Rollen", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen'," + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 140, + "column": 16, + "kind": "string_literal", + "text": "Aktiv", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Aktiv'," + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 211, + "column": 45, + "kind": "string_literal", + "text": "Fehler beim Hinzufügen des Benutzers", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Hinzufügen des Benutzers');" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 228, + "column": 45, + "kind": "string_literal", + "text": "Fehler beim Aktualisieren der Rollen", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Aktualisieren der Rollen');" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 240, + "column": 43, + "kind": "string_literal", + "text": "Fehler beim Entfernen des Benutzers", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Entfernen des Benutzers');" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 263, + "column": 46, + "kind": "jsx_text", + "text": "Fehler: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler: {error}

" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 277, + "column": 46, + "kind": "jsx_text", + "text": "Verwalten Sie, welche Benutzer Zugriff auf welche Mandanten haben", + "context": "between tags, user-visible text node", + "line_content": "

Verwalten Sie, welche Benutzer Zugriff auf welche Mandanten haben

" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 293, + "column": 30, + "kind": "jsx_text", + "text": "-- Mandant wählen --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 326, + "column": 45, + "kind": "jsx_text", + "text": "Kein Mandant ausgewählt", + "context": "between tags, user-visible text node", + "line_content": "

Kein Mandant ausgewählt

" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 348, + "column": 24, + "kind": "string_literal", + "text": "Rollen bearbeiten", + "context": "string literal", + "line_content": " title: 'Rollen bearbeiten'," + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 352, + "column": 24, + "kind": "string_literal", + "text": "Aus Mandant entfernen", + "context": "string literal", + "line_content": " title: 'Aus Mandant entfernen'," + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 369, + "column": 26, + "kind": "string_literal", + "text": "Keine Mitglieder gefunden", + "context": "string literal", + "line_content": " emptyMessage=\"Keine Mitglieder gefunden\"" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 379, + "column": 49, + "kind": "jsx_text", + "text": "Benutzer zum Mandanten hinzufügen", + "context": "between tags, user-visible text node", + "line_content": "

Benutzer zum Mandanten hinzufügen

" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 389, + "column": 20, + "kind": "jsx_text", + "text": "Alle Benutzer sind bereits diesem Mandanten zugewiesen.", + "context": "between tags, user-visible text node", + "line_content": "

Alle Benutzer sind bereits diesem Mandanten zugewiesen.

" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 393, + "column": 25, + "kind": "jsx_text", + "text": "Lade Rollen...", + "context": "between tags, user-visible text node", + "line_content": " Lade Rollen..." + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 401, + "column": 52, + "kind": "string_literal", + "text": "Hinzufügen...", + "context": "string literal", + "line_content": " submitButtonText={isSubmitting ? 'Hinzufügen...' : 'Hinzufügen'}" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 401, + "column": 70, + "kind": "string_literal", + "text": "Hinzufügen", + "context": "string literal", + "line_content": " submitButtonText={isSubmitting ? 'Hinzufügen...' : 'Hinzufügen'}" + }, + { + "file": "src/pages/admin/AdminUserMandatesPage.tsx", + "line": 415, + "column": 49, + "kind": "jsx_text", + "text": "Rollen bearbeiten: {editingUser.username}", + "context": "between tags, user-visible text node", + "line_content": "

Rollen bearbeiten: {editingUser.username}

" + }, + { + "file": "src/pages/admin/AdminUsersPage.tsx", + "line": 131, + "column": 46, + "kind": "jsx_text", + "text": "Fehler beim Laden der Benutzer: {error}", + "context": "between tags, user-visible text node", + "line_content": "

Fehler beim Laden der Benutzer: {error}

" + }, + { + "file": "src/pages/admin/AdminUsersPage.tsx", + "line": 145, + "column": 46, + "kind": "jsx_text", + "text": "Verwalten Sie alle Benutzer im System", + "context": "between tags, user-visible text node", + "line_content": "

Verwalten Sie alle Benutzer im System

" + }, + { + "file": "src/pages/admin/AdminUsersPage.tsx", + "line": 200, + "column": 24, + "kind": "string_literal", + "text": "Löschen", + "context": "string literal", + "line_content": " title: 'Löschen'," + }, + { + "file": "src/pages/admin/AdminUsersPage.tsx", + "line": 208, + "column": 24, + "kind": "string_literal", + "text": "Passwort-Link senden", + "context": "string literal", + "line_content": " title: 'Passwort-Link senden'," + }, + { + "file": "src/pages/admin/AdminUsersPage.tsx", + "line": 221, + "column": 26, + "kind": "string_literal", + "text": "Keine Benutzer gefunden", + "context": "string literal", + "line_content": " emptyMessage=\"Keine Benutzer gefunden\"" + }, + { + "file": "src/pages/admin/AdminUsersPage.tsx", + "line": 230, + "column": 49, + "kind": "jsx_text", + "text": "Neuer Benutzer", + "context": "between tags, user-visible text node", + "line_content": "

Neuer Benutzer

" + }, + { + "file": "src/pages/admin/AdminUsersPage.tsx", + "line": 242, + "column": 25, + "kind": "jsx_text", + "text": "Lade Formular...", + "context": "between tags, user-visible text node", + "line_content": " Lade Formular..." + }, + { + "file": "src/pages/admin/AdminUsersPage.tsx", + "line": 264, + "column": 49, + "kind": "jsx_text", + "text": "Benutzer bearbeiten", + "context": "between tags, user-visible text node", + "line_content": "

Benutzer bearbeiten

" + }, + { + "file": "src/pages/admin/AdminUsersPage.tsx", + "line": 276, + "column": 25, + "kind": "jsx_text", + "text": "Lade Formular...", + "context": "between tags, user-visible text node", + "line_content": " Lade Formular..." + }, + { + "file": "src/pages/admin/ChatbotConfigSection.tsx", + "line": 14, + "column": 14, + "kind": "string_literal", + "text": "Anthropic (Claude)", + "context": "string literal", + "line_content": " anthropic: 'Anthropic (Claude)'," + }, + { + "file": "src/pages/admin/ChatbotConfigSection.tsx", + "line": 15, + "column": 11, + "kind": "string_literal", + "text": "OpenAI (GPT)", + "context": "string literal", + "line_content": " openai: 'OpenAI (GPT)'," + }, + { + "file": "src/pages/admin/ChatbotConfigSection.tsx", + "line": 17, + "column": 11, + "kind": "string_literal", + "text": "Tavily (Web Search)", + "context": "string literal", + "line_content": " tavily: 'Tavily (Web Search)'," + }, + { + "file": "src/pages/admin/ChatbotConfigSection.tsx", + "line": 18, + "column": 15, + "kind": "string_literal", + "text": "Private LLM", + "context": "string literal", + "line_content": " privatellm: 'Private LLM'," + }, + { + "file": "src/pages/admin/ChatbotConfigSection.tsx", + "line": 57, + "column": 34, + "kind": "string_literal", + "text": "Althaus Preprocessor", + "context": "object property label: (e.g. table column)", + "line_content": " { id: 'preprocessor', label: 'Althaus Preprocessor', value: 'preprocessor' }" + }, + { + "file": "src/pages/admin/ChatbotConfigSection.tsx", + "line": 113, + "column": 17, + "kind": "jsx_text", + "text": "Web Research aktivieren (Tavily)", + "context": "between tags, user-visible text node", + "line_content": " Web Research aktivieren (Tavily)" + }, + { + "file": "src/pages/admin/ChatbotConfigSection.tsx", + "line": 158, + "column": 23, + "kind": "string_literal", + "text": "Benutzerdefinierter System-Prompt für den Chatbot...", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\"Benutzerdefinierter System-Prompt für den Chatbot...\"" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 115, + "column": 19, + "kind": "string_literal", + "text": "Benutzer hinzugefügt", + "context": "string literal", + "line_content": " showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde der Instanz hinzugefügt.');" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 115, + "column": 43, + "kind": "string_literal", + "text": "Der Benutzer wurde der Instanz hinzugefügt.", + "context": "string literal", + "line_content": " showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde der Instanz hinzugefügt.');" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 117, + "column": 43, + "kind": "string_literal", + "text": "Fehler beim Hinzufügen", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Hinzufügen');" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 126, + "column": 19, + "kind": "string_literal", + "text": "Benutzer entfernt", + "context": "string literal", + "line_content": " showSuccess('Benutzer entfernt', `\"${user.username}\" wurde entfernt.`);" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 128, + "column": 43, + "kind": "string_literal", + "text": "Fehler beim Entfernen", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Entfernen');" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 146, + "column": 35, + "kind": "string_literal", + "text": "Rollen und Status wurden gespeichert.", + "context": "string literal", + "line_content": " showSuccess('Aktualisiert', 'Rollen und Status wurden gespeichert.');" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 148, + "column": 43, + "kind": "string_literal", + "text": "Fehler beim Speichern", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Speichern');" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 160, + "column": 11, + "kind": "string_literal", + "text": "Rollen synchronisiert", + "context": "string literal", + "line_content": " 'Rollen synchronisiert'," + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 164, + "column": 45, + "kind": "string_literal", + "text": "Synchronisierung fehlgeschlagen", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Synchronisierung fehlgeschlagen');" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 175, + "column": 19, + "kind": "string_literal", + "text": "Instanz aktualisiert", + "context": "string literal", + "line_content": " showSuccess('Instanz aktualisiert', 'Einstellungen wurden gespeichert.');" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 175, + "column": 43, + "kind": "string_literal", + "text": "Einstellungen wurden gespeichert.", + "context": "string literal", + "line_content": " showSuccess('Instanz aktualisiert', 'Einstellungen wurden gespeichert.');" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 177, + "column": 43, + "kind": "string_literal", + "text": "Fehler beim Speichern", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Fehler beim Speichern');" + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 185, + "column": 16, + "kind": "string_literal", + "text": "Benutzer", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Benutzer'," + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 195, + "column": 16, + "kind": "string_literal", + "text": "Rollen", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen'," + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 208, + "column": 16, + "kind": "string_literal", + "text": "Rollen", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen'," + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 215, + "column": 16, + "kind": "string_literal", + "text": "Aktiv", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Aktiv'," + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 226, + "column": 14, + "kind": "string_literal", + "text": "Benutzer", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Benutzer'," + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 232, + "column": 21, + "kind": "jsx_text", + "text": "Lade Benutzer...", + "context": "between tags, user-visible text node", + "line_content": " Lade Benutzer..." + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 248, + "column": 14, + "kind": "string_literal", + "text": "Rollen", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Rollen'," + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 272, + "column": 14, + "kind": "string_literal", + "text": "Einstellungen", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Einstellungen'," + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 277, + "column": 64, + "kind": "string_literal", + "text": "Bezeichnung", + "context": "object property label: (e.g. table column)", + "line_content": " { name: 'label', type: 'string' as const, label: 'Bezeichnung', required: true, editable: true }," + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 278, + "column": 67, + "kind": "string_literal", + "text": "Aktiviert", + "context": "object property label: (e.g. table column)", + "line_content": " { name: 'enabled', type: 'boolean' as const, label: 'Aktiviert', required: false, editable: true }," + }, + { + "file": "src/pages/admin/InstanceDetailModal.tsx", + "line": 302, + "column": 92, + "kind": "string_literal", + "text": "Schließen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 461, + "column": 67, + "kind": "jsx_text", + "text": "Einladungen hinzufügen", + "context": "between tags, user-visible text node", + "line_content": "

Einladungen hinzufügen

" + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 487, + "column": 55, + "kind": "jsx_text", + "text": "E-Mail (optional)", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 493, + "column": 33, + "kind": "string_literal", + "text": "beispiel@firma.com", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\"beispiel@firma.com\"" + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 497, + "column": 55, + "kind": "jsx_text", + "text": "Benutzername (optional)", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 504, + "column": 33, + "kind": "string_literal", + "text": "z. B. vorname.nachname", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\"z. B. vorname.nachname\"" + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 512, + "column": 57, + "kind": "jsx_text", + "text": "Rolle{inviteType === 'featureInstance' ? ' (pro Instanz)' : ''} *", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 512, + "column": 98, + "kind": "string_literal", + "text": " (pro Instanz)", + "context": "string literal", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 552, + "column": 55, + "kind": "jsx_text", + "text": "Bestehender Benutzer *", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 559, + "column": 38, + "kind": "jsx_text", + "text": "-- Benutzer wählen --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 566, + "column": 141, + "kind": "jsx_text", + "text": "Keine weiteren Benutzer verfügbar.", + "context": "between tags, user-visible text node", + "line_content": " {availableExistingUsers.length === 0 &&

Keine weiteren Benutzer verfügbar.

}" + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 570, + "column": 57, + "kind": "jsx_text", + "text": "Rolle *", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 644, + "column": 101, + "kind": "jsx_text", + "text": "Noch keine Einladungen hinzugefügt.", + "context": "between tags, user-visible text node", + "line_content": "

Noch keine Einladungen hinzugefügt.

" + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 649, + "column": 71, + "kind": "jsx_text", + "text": "setStep(2)}>← Zurück", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 666, + "column": 63, + "kind": "string_literal", + "text": "Einladung zum Mandanten", + "context": "string literal", + "line_content": " Art: {inviteType === 'mandate' ? 'Einladung zum Mandanten' : 'Einladung zur Feature-Instanz'}" + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 666, + "column": 91, + "kind": "string_literal", + "text": "Einladung zur Feature-Instanz", + "context": "string literal", + "line_content": " Art: {inviteType === 'mandate' ? 'Einladung zum Mandanten' : 'Einladung zur Feature-Instanz'}" + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 677, + "column": 21, + "kind": "jsx_text", + "text": "Einladungen ({invitees.length}):", + "context": "between tags, user-visible text node", + "line_content": " Einladungen ({invitees.length}):" + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 689, + "column": 71, + "kind": "jsx_text", + "text": "setStep(3)}>← Zurück", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminInvitationWizardPage.tsx", + "line": 695, + "column": 28, + "kind": "string_literal", + "text": "Wird versendet...", + "context": "string literal", + "line_content": " {isLoading ? 'Wird versendet...' : `${invitees.length} Einladungen versenden`}" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 84, + "column": 61, + "kind": "string_literal", + "text": "", + "context": "object property label: (e.g. table column)", + "line_content": " const [instanceForm, setInstanceForm] = useState({ label: '', enabled: true });" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 136, + "column": 16, + "kind": "string_literal", + "text": "Fehler beim Laden der Mandanten", + "context": "string literal", + "line_content": " setError('Fehler beim Laden der Mandanten');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 230, + "column": 11, + "kind": "string_literal", + "text": "Mandant erstellt", + "context": "string literal", + "line_content": " 'Mandant erstellt'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 231, + "column": 11, + "kind": "string_literal", + "text": "Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.", + "context": "string literal", + "line_content": " 'Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 237, + "column": 33, + "kind": "string_literal", + "text": "Mandant inkl. Abrechnung gespeichert", + "context": "string literal", + "line_content": " showSuccess('Erstellt', 'Mandant inkl. Abrechnung gespeichert');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 243, + "column": 59, + "kind": "string_literal", + "text": "Fehler beim Erstellen", + "context": "string literal", + "line_content": " setError(e?.response?.data?.detail || e?.message || 'Fehler beim Erstellen');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 267, + "column": 21, + "kind": "string_literal", + "text": "Hinzugefügt", + "context": "string literal", + "line_content": " showSuccess('Hinzugefügt', `${ok} Benutzer zum Mandanten hinzugefügt`);" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 272, + "column": 11, + "kind": "string_literal", + "text": "Teilweise fehlgeschlagen", + "context": "string literal", + "line_content": " 'Teilweise fehlgeschlagen'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 287, + "column": 31, + "kind": "string_literal", + "text": "Benutzer aus Mandant entfernt", + "context": "string literal", + "line_content": " showSuccess('Entfernt', 'Benutzer aus Mandant entfernt');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 290, + "column": 32, + "kind": "string_literal", + "text": "Fehler beim Entfernen", + "context": "string literal", + "line_content": " setError(result.error || 'Fehler beim Entfernen');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 306, + "column": 34, + "kind": "string_literal", + "text": "", + "context": "object property label: (e.g. table column)", + "line_content": " setInstanceForm({ label: '', enabled: true });" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 307, + "column": 33, + "kind": "string_literal", + "text": "Instance erstellt", + "context": "string literal", + "line_content": " showSuccess('Erstellt', 'Instance erstellt');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 310, + "column": 34, + "kind": "string_literal", + "text": "Fehler beim Erstellen (Limit erreicht?)", + "context": "string literal", + "line_content": " setError(result.error || 'Fehler beim Erstellen (Limit erreicht?)');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 321, + "column": 19, + "kind": "string_literal", + "text": "Gelöscht", + "context": "string literal", + "line_content": " showSuccess('Gelöscht', 'Instance gelöscht');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 321, + "column": 31, + "kind": "string_literal", + "text": "Instance gelöscht", + "context": "string literal", + "line_content": " showSuccess('Gelöscht', 'Instance gelöscht');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 324, + "column": 32, + "kind": "string_literal", + "text": "Fehler beim Löschen", + "context": "string literal", + "line_content": " setError(result.error || 'Fehler beim Löschen');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 346, + "column": 21, + "kind": "string_literal", + "text": "Hinzugefügt", + "context": "string literal", + "line_content": " showSuccess('Hinzugefügt', `${ok} Benutzer zur Feature-Instanz hinzugefügt`);" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 351, + "column": 11, + "kind": "string_literal", + "text": "Teilweise fehlgeschlagen", + "context": "string literal", + "line_content": " 'Teilweise fehlgeschlagen'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 368, + "column": 34, + "kind": "string_literal", + "text": "Rollen aktualisiert", + "context": "string literal", + "line_content": " showSuccess('Gespeichert', 'Rollen aktualisiert');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 373, + "column": 38, + "kind": "string_literal", + "text": "Rollen konnten nicht gespeichert werden", + "context": "string literal", + "line_content": " showError('Fehler', r.error || 'Rollen konnten nicht gespeichert werden');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 389, + "column": 34, + "kind": "string_literal", + "text": "Rollen aktualisiert", + "context": "string literal", + "line_content": " showSuccess('Gespeichert', 'Rollen aktualisiert');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 394, + "column": 38, + "kind": "string_literal", + "text": "Rollen konnten nicht gespeichert werden", + "context": "string literal", + "line_content": " showError('Fehler', r.error || 'Rollen konnten nicht gespeichert werden');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 403, + "column": 31, + "kind": "string_literal", + "text": "Benutzer aus Feature-Instanz entfernt", + "context": "string literal", + "line_content": " showSuccess('Entfernt', 'Benutzer aus Feature-Instanz entfernt');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 406, + "column": 32, + "kind": "string_literal", + "text": "Fehler beim Entfernen", + "context": "string literal", + "line_content": " setError(result.error || 'Fehler beim Entfernen');" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 483, + "column": 33, + "kind": "string_literal", + "text": "1px solid var(--border-color, #e5e7eb)", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, #e5e7eb)'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 535, + "column": 45, + "kind": "jsx_text", + "text": "Benutzer * (mehrfach möglich)", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 540, + "column": 21, + "kind": "string_literal", + "text": "1px solid var(--border-color, #e5e7eb)", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, #e5e7eb)'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 576, + "column": 47, + "kind": "jsx_text", + "text": "Rollen (für alle ausgewählten Benutzer)", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 604, + "column": 24, + "kind": "string_literal", + "text": "Hinzufügen...", + "context": "string literal", + "line_content": " {isLoading ? 'Hinzufügen...' : 'Hinzufügen'}" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 604, + "column": 42, + "kind": "string_literal", + "text": "Hinzufügen", + "context": "string literal", + "line_content": " {isLoading ? 'Hinzufügen...' : 'Hinzufügen'}" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 633, + "column": 25, + "kind": "string_literal", + "text": "background 0.2s", + "context": "string literal", + "line_content": " transition: 'background 0.2s'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 657, + "column": 13, + "kind": "string_literal", + "text": "1px solid var(--border-color, #e5e7eb)", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, #e5e7eb)'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 671, + "column": 46, + "kind": "jsx_text", + "text": "Schritt-für-Schritt Wizard zur Mandanten-Konfiguration", + "context": "between tags, user-visible text node", + "line_content": "

Schritt-für-Schritt Wizard zur Mandanten-Konfiguration

" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 679, + "column": 19, + "kind": "string_literal", + "text": "1px solid var(--danger-color, #fecaca)", + "context": "string literal", + "line_content": " border: '1px solid var(--danger-color, #fecaca)'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 691, + "column": 97, + "kind": "jsx_text", + "text": "Mandant auswählen oder erstellen", + "context": "between tags, user-visible text node", + "line_content": "

Mandant auswählen oder erstellen

" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 726, + "column": 25, + "kind": "jsx_text", + "text": "Formular wird geladen...", + "context": "between tags, user-visible text node", + "line_content": " Formular wird geladen..." + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 734, + "column": 66, + "kind": "string_literal", + "text": "Mandant erstellen", + "context": "string literal", + "line_content": " submitButtonText={isLoading ? 'Erstellen...' : 'Mandant erstellen'}" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 786, + "column": 23, + "kind": "string_literal", + "text": "1px solid var(--border-color, #e5e7eb)", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, #e5e7eb)'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 836, + "column": 71, + "kind": "jsx_text", + "text": "setStep(1)}>← Zurück", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 858, + "column": 49, + "kind": "jsx_text", + "text": "Feature filtern:", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 864, + "column": 32, + "kind": "jsx_text", + "text": "Alle Features", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 875, + "column": 25, + "kind": "string_literal", + "text": "1px solid var(--border-color, #e5e7eb)", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, #e5e7eb)'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 914, + "column": 53, + "kind": "jsx_text", + "text": "Feature *", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 921, + "column": 36, + "kind": "jsx_text", + "text": "-- Feature wählen --", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 933, + "column": 31, + "kind": "string_literal", + "text": "z.B. Kunde A", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\"z.B. Kunde A\"" + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 954, + "column": 71, + "kind": "jsx_text", + "text": "setStep(2)}>← Zurück", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 1003, + "column": 23, + "kind": "string_literal", + "text": "1px solid var(--border-color, #e5e7eb)", + "context": "string literal", + "line_content": " border: '1px solid var(--border-color, #e5e7eb)'," + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 1058, + "column": 71, + "kind": "jsx_text", + "text": "setStep(3)}>← Zurück", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/admin/wizards/AdminMandateWizardPage.tsx", + "line": 1060, + "column": 37, + "kind": "string_literal", + "text": "Konfiguration abgeschlossen!", + "context": "string literal", + "line_content": " showSuccess('Fertig', 'Konfiguration abgeschlossen!');" + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 36, + "column": 26, + "kind": "string_literal", + "text": "Instanz erstellen", + "context": "string literal", + "line_content": " { id: 'create', title: 'Instanz erstellen' }," + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 38, + "column": 25, + "kind": "string_literal", + "text": "Benutzer (optional)", + "context": "string literal", + "line_content": " { id: 'users', title: 'Benutzer (optional)' }," + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 74, + "column": 35, + "kind": "string_literal", + "text": "Mandant", + "context": "object property label: (e.g. table column)", + "line_content": " { name: 'mandateId', label: 'Mandant', type: 'enum' as const, required: true, options: mandateOptions }," + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 75, + "column": 37, + "kind": "string_literal", + "text": "Feature", + "context": "object property label: (e.g. table column)", + "line_content": " { name: 'featureCode', label: 'Feature', type: 'enum' as const, required: true, options: featureOptions }," + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 76, + "column": 31, + "kind": "string_literal", + "text": "Bezeichnung", + "context": "object property label: (e.g. table column)", + "line_content": " { name: 'label', label: 'Bezeichnung', type: 'string' as const, required: true, editable: true }," + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 77, + "column": 33, + "kind": "string_literal", + "text": "Aktiv", + "context": "object property label: (e.g. table column)", + "line_content": " { name: 'enabled', label: 'Aktiv', type: 'boolean' as const, required: false, editable: true }," + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 104, + "column": 45, + "kind": "string_literal", + "text": "Instanz konnte nicht erstellt werden", + "context": "string literal", + "line_content": " showError('Fehler', result.error || 'Instanz konnte nicht erstellt werden');" + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 152, + "column": 29, + "kind": "string_literal", + "text": "Feature-Instanz wurde erstellt und Benutzer zugewiesen.", + "context": "string literal", + "line_content": " showSuccess('Fertig', 'Feature-Instanz wurde erstellt und Benutzer zugewiesen.');" + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 155, + "column": 27, + "kind": "string_literal", + "text": "Einige Benutzer konnten nicht zugewiesen werden.", + "context": "string literal", + "line_content": " showError('Fehler', 'Einige Benutzer konnten nicht zugewiesen werden.');" + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 175, + "column": 45, + "kind": "jsx_text", + "text": "Neue Feature-Instanz", + "context": "between tags, user-visible text node", + "line_content": "

Neue Feature-Instanz

" + }, + { + "file": "src/pages/admin/wizards/FeatureInstanceWizard.tsx", + "line": 176, + "column": 92, + "kind": "string_literal", + "text": "Schließen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " " + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 362, + "column": 54, + "kind": "string_literal", + "text": "Wird archiviert...", + "context": "string literal", + "line_content": " {coach.actionLoading === 'archiving' ? 'Wird archiviert...' : 'Archivieren'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 387, + "column": 20, + "kind": "jsx_text", + "text": "Starte eine neue Coaching-Session zu diesem Thema.", + "context": "between tags, user-visible text node", + "line_content": "

Starte eine neue Coaching-Session zu diesem Thema.

" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 390, + "column": 60, + "kind": "jsx_text", + "text": "Gesprächspartner wählen:", + "context": "between tags, user-visible text node", + "line_content": " " + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 408, + "column": 23, + "kind": "string_literal", + "text": "Wird gestartet...", + "context": "string literal", + "line_content": " ? 'Wird gestartet...'" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 411, + "column": 25, + "kind": "string_literal", + "text": "Session starten", + "context": "string literal", + "line_content": " : 'Session starten'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 418, + "column": 57, + "kind": "jsx_text", + "text": "Session aktiv", + "context": "between tags, user-visible text node", + "line_content": " Session aktiv" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 432, + "column": 44, + "kind": "string_literal", + "text": "Stummschaltung aufheben", + "context": "string literal", + "line_content": " title={voice.muted ? 'Stummschaltung aufheben' : 'Stummschalten'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 434, + "column": 38, + "kind": "string_literal", + "text": "\\u{1F507} Stumm", + "context": "string literal", + "line_content": " {voice.muted ? '\\u{1F507} Stumm' : '\\u{1F3A4} Ton an'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 434, + "column": 58, + "kind": "string_literal", + "text": "\\u{1F3A4} Ton an", + "context": "string literal", + "line_content": " {voice.muted ? '\\u{1F507} Stumm' : '\\u{1F3A4} Ton an'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 437, + "column": 63, + "kind": "string_literal", + "text": "Wird abgeschlossen...", + "context": "string literal", + "line_content": " {coach.actionLoading === 'completing' ? 'Wird abgeschlossen...' : 'Abschliessen'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 440, + "column": 63, + "kind": "string_literal", + "text": "Wird abgebrochen...", + "context": "string literal", + "line_content": " {coach.actionLoading === 'cancelling' ? 'Wird abgebrochen...' : 'Abbrechen'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 469, + "column": 86, + "kind": "string_literal", + "text": "Coach denkt nach", + "context": "string literal", + "line_content": "
{coach.streamingStatus || 'Coach denkt nach'}...
" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 489, + "column": 86, + "kind": "string_literal", + "text": "Tool-Aufrufe vorhanden", + "context": "string literal", + "line_content": " {coach.streamingStatus || (coach.agentToolCalls.length > 0 ? 'Tool-Aufrufe vorhanden' : 'Warte auf Agent')}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 489, + "column": 113, + "kind": "string_literal", + "text": "Warte auf Agent", + "context": "string literal", + "line_content": " {coach.streamingStatus || (coach.agentToolCalls.length > 0 ? 'Tool-Aufrufe vorhanden' : 'Warte auf Agent')}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 513, + "column": 115, + "kind": "string_literal", + "text": "läuft", + "context": "string literal", + "line_content": " {toolCall.success === true ? 'fertig' : toolCall.success === false ? 'fehler' : 'läuft'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 539, + "column": 27, + "kind": "string_literal", + "text": "Stumm – Mikrofon aus", + "context": "string literal", + "line_content": " ? 'Stumm – Mikrofon aus'" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 541, + "column": 55, + "kind": "string_literal", + "text": "Coach spricht...", + "context": "string literal", + "line_content": " ? (coach.streamingStatus || 'Coach spricht...')" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 543, + "column": 57, + "kind": "string_literal", + "text": "Coach denkt nach...", + "context": "string literal", + "line_content": " ? (coach.streamingStatus || 'Coach denkt nach...')" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 545, + "column": 33, + "kind": "string_literal", + "text": "Unterbrochen – Mikrofon an", + "context": "string literal", + "line_content": " ? 'Unterbrochen – Mikrofon an'" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 547, + "column": 74, + "kind": "string_literal", + "text": "Mikrofon an – bitte sprechen", + "context": "string literal", + "line_content": " ? (voice.liveTranscript ? 'Spricht...' : 'Mikrofon an – bitte sprechen')" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 548, + "column": 35, + "kind": "string_literal", + "text": "Mikrofon wird gestartet...", + "context": "string literal", + "line_content": " : 'Mikrofon wird gestartet...'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 602, + "column": 35, + "kind": "string_literal", + "text": "Nachricht eingeben...", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\"Nachricht eingeben...\"" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 616, + "column": 33, + "kind": "string_literal", + "text": "Datei anhängen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Datei anhängen\"" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 641, + "column": 147, + "kind": "jsx_text", + "text": "Dateien anhängen", + "context": "between tags, user-visible text node", + "line_content": "
Dateien anhängen
" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 671, + "column": 33, + "kind": "string_literal", + "text": "Datenquellen anhängen", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " title=\"Datenquellen anhängen\"" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 698, + "column": 151, + "kind": "jsx_text", + "text": "Persönliche Quellen", + "context": "between tags, user-visible text node", + "line_content": "
Persönliche Quellen
" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 775, + "column": 29, + "kind": "string_literal", + "text": "Neue Aufgabe...", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": " placeholder=\"Neue Aufgabe...\"" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 781, + "column": 57, + "kind": "string_literal", + "text": "Wird hinzugefügt...", + "context": "string literal", + "line_content": " {coach.actionLoading === 'addingTask' ? 'Wird hinzugefügt...' : 'Hinzufügen'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 781, + "column": 81, + "kind": "string_literal", + "text": "Hinzufügen", + "context": "string literal", + "line_content": " {coach.actionLoading === 'addingTask' ? 'Wird hinzugefügt...' : 'Hinzufügen'}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 785, + "column": 48, + "kind": "jsx_text", + "text": "Noch keine Aufgaben. Der Coach schlägt während Sessions Aufgaben vor.", + "context": "between tags, user-visible text node", + "line_content": "
Noch keine Aufgaben. Der Coach schlägt während Sessions Aufgaben vor.
" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 814, + "column": 48, + "kind": "jsx_text", + "text": "Noch keine abgeschlossenen Sessions.", + "context": "between tags, user-visible text node", + "line_content": "
Noch keine abgeschlossenen Sessions.
" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 824, + "column": 91, + "kind": "jsx_text", + "text": "Score: {Math.round(s.competenceScore)}", + "context": "between tags, user-visible text node", + "line_content": " {s.competenceScore != null && Score: {Math.round(s.competenceScore)}}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 831, + "column": 46, + "kind": "jsx_text", + "text": "| Persona", + "context": "between tags, user-visible text node", + "line_content": " {s.personaId && | Persona}" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 849, + "column": 48, + "kind": "jsx_text", + "text": "Noch keine Bewertungen. Schliesse eine Session ab, um Scores zu erhalten.", + "context": "between tags, user-visible text node", + "line_content": "
Noch keine Bewertungen. Schliesse eine Session ab, um Scores zu erhalten.
" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 899, + "column": 45, + "kind": "string_literal", + "text": "Coaching (aktiv)", + "context": "string literal", + "line_content": " case 'coaching': return coach.session ? 'Coaching (aktiv)' : 'Coaching';" + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 925, + "column": 14, + "kind": "string_literal", + "text": "Einfühlungsvermögen", + "context": "string literal", + "line_content": " empathy: 'Einfühlungsvermögen', clarity: 'Klarheit'," + }, + { + "file": "src/pages/views/commcoach/CommcoachDossierView.tsx", + "line": 926, + "column": 47, + "kind": "string_literal", + "text": "Zuhören", + "context": "string literal", + "line_content": " assertiveness: 'Durchsetzung', listening: 'Zuhören'," + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 5, + "column": 69, + "kind": "string_literal", + "text": "Stimme & Sprache", + "context": "string literal", + "line_content": " * Voice/language settings are in user-level settings (/settings -> \"Stimme & Sprache\")." + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 45, + "column": 33, + "kind": "string_literal", + "text": "Fehler beim Laden", + "context": "string literal", + "line_content": " setError(err.message || 'Fehler beim Laden');" + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 65, + "column": 18, + "kind": "string_literal", + "text": "Einstellungen gespeichert", + "context": "string literal", + "line_content": " setSuccess('Einstellungen gespeichert');" + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 68, + "column": 31, + "kind": "string_literal", + "text": "Fehler beim Speichern", + "context": "string literal", + "line_content": " setError(err.message || 'Fehler beim Speichern');" + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 75, + "column": 44, + "kind": "jsx_text", + "text": "Einstellungen werden geladen...", + "context": "between tags, user-visible text node", + "line_content": " return
Einstellungen werden geladen...
;" + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 86, + "column": 45, + "kind": "jsx_text", + "text": "Stimme & Sprache", + "context": "between tags, user-visible text node", + "line_content": "

Stimme & Sprache

" + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 91, + "column": 46, + "kind": "string_literal", + "text": "Stimme & Sprache", + "context": "string literal", + "line_content": " Benutzereinstellungen oeffnen (Tab \"Stimme & Sprache\")" + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 121, + "column": 146, + "kind": "jsx_text", + "text": "Sessions gesamt", + "context": "between tags, user-visible text node", + "line_content": "
{profile.totalSessions}Sessions gesamt
" + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 122, + "column": 145, + "kind": "jsx_text", + "text": "Minuten gesamt", + "context": "between tags, user-visible text node", + "line_content": "
{profile.totalMinutes}Minuten gesamt
" + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 123, + "column": 143, + "kind": "jsx_text", + "text": "Aktueller Streak", + "context": "between tags, user-visible text node", + "line_content": "
{profile.streakDays}Aktueller Streak
" + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 124, + "column": 146, + "kind": "jsx_text", + "text": "Laengster Streak", + "context": "between tags, user-visible text node", + "line_content": "
{profile.longestStreak}Laengster Streak
" + }, + { + "file": "src/pages/views/commcoach/CommcoachSettingsView.tsx", + "line": 130, + "column": 36, + "kind": "string_literal", + "text": "Einstellungen speichern", + "context": "string literal", + "line_content": " {saving ? 'Speichern...' : 'Einstellungen speichern'}" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorPage.tsx", + "line": 105, + "column": 13, + "kind": "jsx_text", + "text": "Graphical Editor", + "context": "between tags, user-visible text node", + "line_content": "

Graphical Editor

" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorPage.tsx", + "line": 106, + "column": 12, + "kind": "jsx_text", + "text": "Keine Feature-Instanz gefunden.", + "context": "between tags, user-visible text node", + "line_content": "

Keine Feature-Instanz gefunden.

" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 80, + "column": 17, + "kind": "string_literal", + "text": "Fehler beim Laden der Vorlagen", + "context": "string literal", + "line_content": " showError('Fehler beim Laden der Vorlagen');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 95, + "column": 21, + "kind": "string_literal", + "text": "Vorlage gelöscht", + "context": "string literal", + "line_content": " showSuccess('Vorlage gelöscht');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 99, + "column": 44, + "kind": "string_literal", + "text": "Löschen fehlgeschlagen", + "context": "string literal", + "line_content": " showError(`Fehler: ${e?.message || 'Löschen fehlgeschlagen'}`);" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 112, + "column": 21, + "kind": "string_literal", + "text": "Vorlage als Workflow kopiert", + "context": "string literal", + "line_content": " showSuccess('Vorlage als Workflow kopiert');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 114, + "column": 44, + "kind": "string_literal", + "text": "Kopieren fehlgeschlagen", + "context": "string literal", + "line_content": " showError(`Fehler: ${e?.message || 'Kopieren fehlgeschlagen'}`);" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 131, + "column": 44, + "kind": "string_literal", + "text": "Scope-Änderung fehlgeschlagen", + "context": "string literal", + "line_content": " showError(`Fehler: ${e?.message || 'Scope-Änderung fehlgeschlagen'}`);" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 144, + "column": 42, + "kind": "string_literal", + "text": "Neuer Name:", + "context": "string literal", + "line_content": " const newLabel = await promptInput('Neuer Name:', {" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 145, + "column": 16, + "kind": "string_literal", + "text": "Vorlage umbenennen", + "context": "string literal", + "line_content": " title: 'Vorlage umbenennen'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 152, + "column": 21, + "kind": "string_literal", + "text": "Vorlage umbenannt", + "context": "string literal", + "line_content": " showSuccess('Vorlage umbenannt');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 155, + "column": 44, + "kind": "string_literal", + "text": "Umbenennen fehlgeschlagen", + "context": "string literal", + "line_content": " showError(`Fehler: ${e?.message || 'Umbenennen fehlgeschlagen'}`);" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 170, + "column": 28, + "kind": "string_literal", + "text": "Vorlage", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'label', label: 'Vorlage', type: 'string', width: 220, sortable: true }," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 173, + "column": 14, + "kind": "string_literal", + "text": "Scope", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Scope'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 180, + "column": 14, + "kind": "string_literal", + "text": "Freigegeben", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Freigegeben'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 192, + "column": 14, + "kind": "string_literal", + "text": "Erstellt von", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Erstellt von'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 198, + "column": 14, + "kind": "string_literal", + "text": "Erstellt", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Erstellt'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 208, + "column": 12, + "kind": "jsx_text", + "text": "Keine Feature-Instanz gefunden.", + "context": "between tags, user-visible text node", + "line_content": "

Keine Feature-Instanz gefunden.

" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 259, + "column": 22, + "kind": "string_literal", + "text": "Im Editor öffnen", + "context": "string literal", + "line_content": " title: 'Im Editor öffnen'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 264, + "column": 22, + "kind": "string_literal", + "text": "Löschen", + "context": "string literal", + "line_content": " title: 'Löschen'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 278, + "column": 22, + "kind": "string_literal", + "text": "Als Workflow kopieren", + "context": "string literal", + "line_content": " title: 'Als Workflow kopieren'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 285, + "column": 22, + "kind": "string_literal", + "text": "Scope ändern", + "context": "string literal", + "line_content": " title: 'Scope ändern'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 293, + "column": 24, + "kind": "string_literal", + "text": "Keine Vorlagen gefunden. Erstelle eine Vorlage aus einem bestehenden Workflow.", + "context": "string literal", + "line_content": " emptyMessage=\"Keine Vorlagen gefunden. Erstelle eine Vorlage aus einem bestehenden Workflow.\"" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 310, + "column": 72, + "kind": "string_literal", + "text": "translate(-50%, -50%)", + "context": "string literal", + "line_content": " position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx", + "line": 316, + "column": 69, + "kind": "jsx_text", + "text": "Scope ändern", + "context": "between tags, user-visible text node", + "line_content": "

Scope ändern

" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 71, + "column": 17, + "kind": "string_literal", + "text": "Fehler beim Laden der Workflows", + "context": "string literal", + "line_content": " showError('Fehler beim Laden der Workflows');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 86, + "column": 21, + "kind": "string_literal", + "text": "Workflow gelöscht", + "context": "string literal", + "line_content": " showSuccess('Workflow gelöscht');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 90, + "column": 44, + "kind": "string_literal", + "text": "Löschen fehlgeschlagen", + "context": "string literal", + "line_content": " showError(`Fehler: ${e?.message || 'Löschen fehlgeschlagen'}`);" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 117, + "column": 28, + "kind": "string_literal", + "text": "Workflow aktiviert", + "context": "string literal", + "line_content": " showSuccess(next ? 'Workflow aktiviert' : 'Workflow deaktiviert');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 117, + "column": 51, + "kind": "string_literal", + "text": "Workflow deaktiviert", + "context": "string literal", + "line_content": " showSuccess(next ? 'Workflow aktiviert' : 'Workflow deaktiviert');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 120, + "column": 44, + "kind": "string_literal", + "text": "Status-Update fehlgeschlagen", + "context": "string literal", + "line_content": " showError(`Fehler: ${e?.message || 'Status-Update fehlgeschlagen'}`);" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 131, + "column": 42, + "kind": "string_literal", + "text": "Neuer Name:", + "context": "string literal", + "line_content": " const newLabel = await promptInput('Neuer Name:', {" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 132, + "column": 16, + "kind": "string_literal", + "text": "Workflow umbenennen", + "context": "string literal", + "line_content": " title: 'Workflow umbenennen'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 139, + "column": 21, + "kind": "string_literal", + "text": "Workflow umbenannt", + "context": "string literal", + "line_content": " showSuccess('Workflow umbenannt');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 142, + "column": 44, + "kind": "string_literal", + "text": "Umbenennen fehlgeschlagen", + "context": "string literal", + "line_content": " showError(`Fehler: ${e?.message || 'Umbenennen fehlgeschlagen'}`);" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 162, + "column": 25, + "kind": "string_literal", + "text": "Workflow gestartet und bei Human Task pausiert. Öffne Workflows & Tasks.", + "context": "string literal", + "line_content": " showSuccess('Workflow gestartet und bei Human Task pausiert. Öffne Workflows & Tasks.');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 164, + "column": 25, + "kind": "string_literal", + "text": "Workflow ausgeführt", + "context": "string literal", + "line_content": " showSuccess('Workflow ausgeführt');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 168, + "column": 38, + "kind": "string_literal", + "text": "Ausführung fehlgeschlagen", + "context": "string literal", + "line_content": " showError(result?.error || 'Ausführung fehlgeschlagen');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 171, + "column": 44, + "kind": "string_literal", + "text": "Ausführung fehlgeschlagen", + "context": "string literal", + "line_content": " showError(`Fehler: ${e?.message || 'Ausführung fehlgeschlagen'}`);" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 180, + "column": 28, + "kind": "string_literal", + "text": "Workflow", + "context": "object property label: (e.g. table column)", + "line_content": " { key: 'label', label: 'Workflow', type: 'string', width: 200, sortable: true }," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 183, + "column": 14, + "kind": "string_literal", + "text": "Aktiv", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Aktiv'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 195, + "column": 14, + "kind": "string_literal", + "text": "Läuft", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Läuft'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 207, + "column": 14, + "kind": "string_literal", + "text": "Steht bei", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Steht bei'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 217, + "column": 14, + "kind": "string_literal", + "text": "Erstellt", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Erstellt'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 224, + "column": 14, + "kind": "string_literal", + "text": "Zuletzt gestartet", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Zuletzt gestartet'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 231, + "column": 14, + "kind": "string_literal", + "text": "Läufe", + "context": "object property label: (e.g. table column)", + "line_content": " label: 'Läufe'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 247, + "column": 12, + "kind": "jsx_text", + "text": "Keine Feature-Instanz gefunden.", + "context": "between tags, user-visible text node", + "line_content": "

Keine Feature-Instanz gefunden.

" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 256, + "column": 44, + "kind": "jsx_text", + "text": "Gespeicherte Workflows", + "context": "between tags, user-visible text node", + "line_content": "

Gespeicherte Workflows

" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 303, + "column": 22, + "kind": "string_literal", + "text": "Löschen", + "context": "string literal", + "line_content": " title: 'Löschen'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 332, + "column": 22, + "kind": "string_literal", + "text": "Ausführen", + "context": "string literal", + "line_content": " title: 'Ausführen'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx", + "line": 340, + "column": 24, + "kind": "string_literal", + "text": "Keine Workflows gefunden. Erstelle einen im Editor.", + "context": "string literal", + "line_content": " emptyMessage=\"Keine Workflows gefunden. Erstelle einen im Editor.\"" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 34, + "column": 3, + "kind": "string_literal", + "text": "input.upload", + "context": "string literal", + "line_content": " 'input.upload': 'Upload'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 34, + "column": 19, + "kind": "string_literal", + "text": "Upload", + "context": "string literal", + "line_content": " 'input.upload': 'Upload'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 36, + "column": 19, + "kind": "string_literal", + "text": "Prüfung", + "context": "string literal", + "line_content": " 'input.review': 'Prüfung'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 38, + "column": 25, + "kind": "string_literal", + "text": "Bestätigung", + "context": "string literal", + "line_content": " 'input.confirmation': 'Bestätigung'," + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 159, + "column": 25, + "kind": "string_literal", + "text": "Workflow gestartet und bei Human Task pausiert.", + "context": "string literal", + "line_content": " showSuccess('Workflow gestartet und bei Human Task pausiert.');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 161, + "column": 25, + "kind": "string_literal", + "text": "Workflow gestartet", + "context": "string literal", + "line_content": " showSuccess('Workflow gestartet');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 165, + "column": 38, + "kind": "string_literal", + "text": "Ausführung fehlgeschlagen", + "context": "string literal", + "line_content": " showError(result?.error || 'Ausführung fehlgeschlagen');" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 169, + "column": 51, + "kind": "string_literal", + "text": "Ausführung fehlgeschlagen", + "context": "string literal", + "line_content": " (e as { message?: string })?.message ?? 'Ausführung fehlgeschlagen';" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 185, + "column": 12, + "kind": "jsx_text", + "text": "Keine Feature-Instanz gefunden.", + "context": "between tags, user-visible text node", + "line_content": "

Keine Feature-Instanz gefunden.

" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 194, + "column": 12, + "kind": "jsx_text", + "text": "Lade Tasks…", + "context": "between tags, user-visible text node", + "line_content": "

Lade Tasks…

" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 212, + "column": 39, + "kind": "jsx_text", + "text": "Keine offenen Tasks", + "context": "between tags, user-visible text node", + "line_content": "

Keine offenen Tasks

" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 236, + "column": 17, + "kind": "jsx_text", + "text": "Erledigte Tasks", + "context": "between tags, user-visible text node", + "line_content": " Erledigte Tasks" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 244, + "column": 43, + "kind": "jsx_text", + "text": "Keine erledigten Tasks", + "context": "between tags, user-visible text node", + "line_content": "

Keine erledigten Tasks

" + }, + { + "file": "src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx", + "line": 291, + "column": 57, + "kind": "string_literal", + "text": "Workflows starten", + "context": "jsx/html attribute (title|placeholder|aria-label|alt)", + "line_content": "