From 7ffd8e53e5ea78d23b60461f2f99b0064d7a5239 Mon Sep 17 00:00:00 2001 From: Rodolphe_Lassalle Date: Tue, 28 May 2024 17:49:14 +0200 Subject: [PATCH] first commit --- backend/.gitignore | 33 + backend/.gitlab-ci.yml | 47 + backend/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 62547 bytes backend/.mvn/wrapper/maven-wrapper.properties | 2 + backend/mvnw.cmd | 205 + backend/pom.xml | 83 + backend/routine.md | 140 + .../eps/EpsylProspectsServiceApplication.java | 13 + .../com/epsyl/eps/ServletInitializer.java | 13 + .../epsyl/eps/controllers/AuthController.java | 147 + .../controllers/FileStorageController.java | 68 + .../eps/controllers/ProspectsController.java | 93 + .../epsyl/eps/controllers/TestController.java | 46 + .../eps/controllers/UsersController.java | 57 + .../ObjectIdDeserializer.java | 16 + .../custom_serializer/ObjectIdSerializer.java | 15 + .../java/com/epsyl/eps/dto/ProspectDTO.java | 224 + .../epsyl/eps/entities/FileStorageEntity.java | 41 + .../epsyl/eps/entities/ProspectEntity.java | 288 + .../epsyl/eps/entities/PushQualifEntity.java | 52 + .../com/epsyl/eps/entities/RoleEntity.java | 37 + .../com/epsyl/eps/entities/UserEntity.java | 115 + .../main/java/com/epsyl/eps/enums/ERole.java | 9 + .../eps/playload/request/LoginRequest.java | 27 + .../eps/playload/request/SignupRequest.java | 65 + .../playload/response/MessageResponse.java | 17 + .../playload/response/UserInfoResponse.java | 43 + .../repositories/FileStorageRepository.java | 11 + .../eps/repositories/ProspectRepository.java | 14 + .../eps/repositories/RoleRepository.java | 13 + .../eps/repositories/UserRepository.java | 17 + .../epsyl/eps/security/WebSecurityConfig.java | 96 + .../eps/security/jwt/AuthEntryPointJwt.java | 37 + .../eps/security/jwt/AuthTokenFilter.java | 54 + .../com/epsyl/eps/security/jwt/JwtUtils.java | 92 + .../security/services/UserDetailsImpl.java | 103 + .../services/UserDetailsServiceImpl.java | 25 + .../eps/services/FileStorageService.java | 32 + .../epsyl/eps/services/ProspectServices.java | 40 + .../com/epsyl/eps/services/UserServices.java | 35 + .../src/main/resources/application.properties | 24 + ...EpsylProspectsServiceApplicationTests.java | 13 + frontend/.editorconfig | 20 + frontend/.eslintrc.json | 53 + frontend/.gitignore | 43 + frontend/.gitlab-ci.yml | 88 + frontend/.vscode/extensions.json | 8 + frontend/.vscode/launch.json | 20 + frontend/.vscode/tasks.json | 42 + frontend/README.md | 48 + frontend/READNO.md | 17 + frontend/angular.json | 171 + frontend/cypress.config.ts | 18 + frontend/package-lock.json | 14702 ++++++++++++++++ frontend/package.json | 59 + frontend/server.ts | 56 + frontend/src/app/app.component.html | 2 + frontend/src/app/app.component.scss | 0 frontend/src/app/app.component.spec.ts | 31 + frontend/src/app/app.component.ts | 14 + frontend/src/app/app.config.server.ts | 11 + frontend/src/app/app.config.ts | 17 + frontend/src/app/app.routes.ts | 46 + .../src/app/components/auth/auth.guard.ts | 21 + .../auth/login/login.component.html | 50 + .../auth/login/login.component.scss | 0 .../components/auth/login/login.component.ts | 23 + .../notFound/not-found.component.html | 24 + .../notFound/not-found.component.scss | 0 .../notFound/not-found.component.ts | 13 + .../list-prospects.component.html | 348 + .../list-prospects.component.scss | 9 + .../list-prospects.component.spec.ts | 23 + .../list-prospects.component.ts | 262 + .../app/components/user/user.component.html | 20 + .../app/components/user/user.component.scss | 3 + .../src/app/components/user/user.component.ts | 27 + .../src/app/services/auth/auth.service.ts | 21 + .../src/app/services/auth/login.service.ts | 11 + .../app/services/file/file.service.spec.ts | 17 + .../src/app/services/file/file.service.ts | 29 + frontend/src/app/services/layout.service.ts | 148 + .../prospect/prospect.service.spec.ts | 83 + .../app/services/prospect/prospect.service.ts | 47 + .../app/services/user/user.service.spec.ts | 56 + .../src/app/services/user/user.service.ts | 17 + .../components/footer/footer.component.css | 3 + .../components/footer/footer.component.ts | 18 + .../components/home/home.component.html | 15 + .../components/home/home.component.scss | 0 .../shared/components/home/home.component.ts | 150 + .../components/sidebar/sidebar.component.css | 3 + .../components/sidebar/sidebar.component.ts | 18 + .../components/topbar/topbar.component.html | 39 + .../components/topbar/topbar.component.scss | 3 + .../components/topbar/topbar.component.ts | 24 + .../shared/global-const/constante_global.ts | 1 + .../src/app/shared/models/file-response.ts | 3 + .../app/shared/models/menu-change-event.ts | 4 + .../src/app/shared/models/prospect.model.ts | 33 + frontend/src/app/shared/models/user.model.ts | 8 + frontend/src/assets/.gitkeep | 0 frontend/src/assets/favicon.ico | Bin 0 -> 15086 bytes frontend/src/assets/images/epsyl.png | Bin 0 -> 60218 bytes frontend/src/assets/layout/_config.scss | 42 + frontend/src/assets/layout/_content.scss | 14 + frontend/src/assets/layout/_footer.scss | 8 + frontend/src/assets/layout/_main.scss | 28 + frontend/src/assets/layout/_menu.scss | 140 + frontend/src/assets/layout/_mixins.scss | 13 + frontend/src/assets/layout/_preloading.scss | 48 + frontend/src/assets/layout/_responsive.scss | 100 + frontend/src/assets/layout/_topbar.scss | 151 + frontend/src/assets/layout/_typography.scss | 68 + frontend/src/assets/layout/_utils.scss | 20 + frontend/src/assets/layout/_variables.scss | 4 + frontend/src/assets/layout/layout.css | 540 + frontend/src/assets/layout/layout.scss | 12 + .../assets/logo/android-chrome-192x192.png | Bin 0 -> 12254 bytes .../assets/logo/android-chrome-512x512.png | Bin 0 -> 54237 bytes frontend/src/assets/logo/apple-touch-icon.png | Bin 0 -> 11061 bytes frontend/src/assets/logo/favicon-16x16.png | Bin 0 -> 401 bytes frontend/src/assets/logo/favicon-32x32.png | Bin 0 -> 955 bytes frontend/src/assets/logo/favicon.ico | Bin 0 -> 15406 bytes .../src/assets/theme/saga-orange/theme.css | 6290 +++++++ frontend/src/environments/environment.dev.ts | 4 + frontend/src/environments/environment.ts | 4 + frontend/src/index.html | 14 + frontend/src/main.server.ts | 7 + frontend/src/main.ts | 12 + frontend/src/styles.scss | 21 + frontend/tsconfig.app.json | 19 + frontend/tsconfig.json | 38 + frontend/tsconfig.spec.json | 18 + 134 files changed, 27157 insertions(+) create mode 100644 backend/.gitignore create mode 100644 backend/.gitlab-ci.yml create mode 100644 backend/.mvn/wrapper/maven-wrapper.jar create mode 100644 backend/.mvn/wrapper/maven-wrapper.properties create mode 100644 backend/mvnw.cmd create mode 100644 backend/pom.xml create mode 100644 backend/routine.md create mode 100644 backend/src/main/java/com/epsyl/eps/EpsylProspectsServiceApplication.java create mode 100644 backend/src/main/java/com/epsyl/eps/ServletInitializer.java create mode 100644 backend/src/main/java/com/epsyl/eps/controllers/AuthController.java create mode 100644 backend/src/main/java/com/epsyl/eps/controllers/FileStorageController.java create mode 100644 backend/src/main/java/com/epsyl/eps/controllers/ProspectsController.java create mode 100644 backend/src/main/java/com/epsyl/eps/controllers/TestController.java create mode 100644 backend/src/main/java/com/epsyl/eps/controllers/UsersController.java create mode 100644 backend/src/main/java/com/epsyl/eps/custom_serializer/ObjectIdDeserializer.java create mode 100644 backend/src/main/java/com/epsyl/eps/custom_serializer/ObjectIdSerializer.java create mode 100644 backend/src/main/java/com/epsyl/eps/dto/ProspectDTO.java create mode 100644 backend/src/main/java/com/epsyl/eps/entities/FileStorageEntity.java create mode 100644 backend/src/main/java/com/epsyl/eps/entities/ProspectEntity.java create mode 100644 backend/src/main/java/com/epsyl/eps/entities/PushQualifEntity.java create mode 100644 backend/src/main/java/com/epsyl/eps/entities/RoleEntity.java create mode 100644 backend/src/main/java/com/epsyl/eps/entities/UserEntity.java create mode 100644 backend/src/main/java/com/epsyl/eps/enums/ERole.java create mode 100644 backend/src/main/java/com/epsyl/eps/playload/request/LoginRequest.java create mode 100644 backend/src/main/java/com/epsyl/eps/playload/request/SignupRequest.java create mode 100644 backend/src/main/java/com/epsyl/eps/playload/response/MessageResponse.java create mode 100644 backend/src/main/java/com/epsyl/eps/playload/response/UserInfoResponse.java create mode 100644 backend/src/main/java/com/epsyl/eps/repositories/FileStorageRepository.java create mode 100644 backend/src/main/java/com/epsyl/eps/repositories/ProspectRepository.java create mode 100644 backend/src/main/java/com/epsyl/eps/repositories/RoleRepository.java create mode 100644 backend/src/main/java/com/epsyl/eps/repositories/UserRepository.java create mode 100644 backend/src/main/java/com/epsyl/eps/security/WebSecurityConfig.java create mode 100644 backend/src/main/java/com/epsyl/eps/security/jwt/AuthEntryPointJwt.java create mode 100644 backend/src/main/java/com/epsyl/eps/security/jwt/AuthTokenFilter.java create mode 100644 backend/src/main/java/com/epsyl/eps/security/jwt/JwtUtils.java create mode 100644 backend/src/main/java/com/epsyl/eps/security/services/UserDetailsImpl.java create mode 100644 backend/src/main/java/com/epsyl/eps/security/services/UserDetailsServiceImpl.java create mode 100644 backend/src/main/java/com/epsyl/eps/services/FileStorageService.java create mode 100644 backend/src/main/java/com/epsyl/eps/services/ProspectServices.java create mode 100644 backend/src/main/java/com/epsyl/eps/services/UserServices.java create mode 100644 backend/src/main/resources/application.properties create mode 100644 backend/src/test/java/com/epsyl/eps/EpsylProspectsServiceApplicationTests.java create mode 100644 frontend/.editorconfig create mode 100644 frontend/.eslintrc.json create mode 100644 frontend/.gitignore create mode 100644 frontend/.gitlab-ci.yml create mode 100644 frontend/.vscode/extensions.json create mode 100644 frontend/.vscode/launch.json create mode 100644 frontend/.vscode/tasks.json create mode 100644 frontend/README.md create mode 100644 frontend/READNO.md create mode 100644 frontend/angular.json create mode 100644 frontend/cypress.config.ts create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/server.ts create mode 100644 frontend/src/app/app.component.html create mode 100644 frontend/src/app/app.component.scss create mode 100644 frontend/src/app/app.component.spec.ts create mode 100644 frontend/src/app/app.component.ts create mode 100644 frontend/src/app/app.config.server.ts create mode 100644 frontend/src/app/app.config.ts create mode 100644 frontend/src/app/app.routes.ts create mode 100644 frontend/src/app/components/auth/auth.guard.ts create mode 100644 frontend/src/app/components/auth/login/login.component.html create mode 100644 frontend/src/app/components/auth/login/login.component.scss create mode 100644 frontend/src/app/components/auth/login/login.component.ts create mode 100644 frontend/src/app/components/notFound/not-found.component.html create mode 100644 frontend/src/app/components/notFound/not-found.component.scss create mode 100644 frontend/src/app/components/notFound/not-found.component.ts create mode 100644 frontend/src/app/components/prospects/list-prospects/list-prospects.component.html create mode 100644 frontend/src/app/components/prospects/list-prospects/list-prospects.component.scss create mode 100644 frontend/src/app/components/prospects/list-prospects/list-prospects.component.spec.ts create mode 100644 frontend/src/app/components/prospects/list-prospects/list-prospects.component.ts create mode 100644 frontend/src/app/components/user/user.component.html create mode 100644 frontend/src/app/components/user/user.component.scss create mode 100644 frontend/src/app/components/user/user.component.ts create mode 100644 frontend/src/app/services/auth/auth.service.ts create mode 100644 frontend/src/app/services/auth/login.service.ts create mode 100644 frontend/src/app/services/file/file.service.spec.ts create mode 100644 frontend/src/app/services/file/file.service.ts create mode 100644 frontend/src/app/services/layout.service.ts create mode 100644 frontend/src/app/services/prospect/prospect.service.spec.ts create mode 100644 frontend/src/app/services/prospect/prospect.service.ts create mode 100644 frontend/src/app/services/user/user.service.spec.ts create mode 100644 frontend/src/app/services/user/user.service.ts create mode 100644 frontend/src/app/shared/components/footer/footer.component.css create mode 100644 frontend/src/app/shared/components/footer/footer.component.ts create mode 100644 frontend/src/app/shared/components/home/home.component.html create mode 100644 frontend/src/app/shared/components/home/home.component.scss create mode 100644 frontend/src/app/shared/components/home/home.component.ts create mode 100644 frontend/src/app/shared/components/sidebar/sidebar.component.css create mode 100644 frontend/src/app/shared/components/sidebar/sidebar.component.ts create mode 100644 frontend/src/app/shared/components/topbar/topbar.component.html create mode 100644 frontend/src/app/shared/components/topbar/topbar.component.scss create mode 100644 frontend/src/app/shared/components/topbar/topbar.component.ts create mode 100644 frontend/src/app/shared/global-const/constante_global.ts create mode 100644 frontend/src/app/shared/models/file-response.ts create mode 100644 frontend/src/app/shared/models/menu-change-event.ts create mode 100644 frontend/src/app/shared/models/prospect.model.ts create mode 100644 frontend/src/app/shared/models/user.model.ts create mode 100644 frontend/src/assets/.gitkeep create mode 100644 frontend/src/assets/favicon.ico create mode 100644 frontend/src/assets/images/epsyl.png create mode 100644 frontend/src/assets/layout/_config.scss create mode 100644 frontend/src/assets/layout/_content.scss create mode 100644 frontend/src/assets/layout/_footer.scss create mode 100644 frontend/src/assets/layout/_main.scss create mode 100644 frontend/src/assets/layout/_menu.scss create mode 100644 frontend/src/assets/layout/_mixins.scss create mode 100644 frontend/src/assets/layout/_preloading.scss create mode 100644 frontend/src/assets/layout/_responsive.scss create mode 100644 frontend/src/assets/layout/_topbar.scss create mode 100644 frontend/src/assets/layout/_typography.scss create mode 100644 frontend/src/assets/layout/_utils.scss create mode 100644 frontend/src/assets/layout/_variables.scss create mode 100644 frontend/src/assets/layout/layout.css create mode 100644 frontend/src/assets/layout/layout.scss create mode 100644 frontend/src/assets/logo/android-chrome-192x192.png create mode 100644 frontend/src/assets/logo/android-chrome-512x512.png create mode 100644 frontend/src/assets/logo/apple-touch-icon.png create mode 100644 frontend/src/assets/logo/favicon-16x16.png create mode 100644 frontend/src/assets/logo/favicon-32x32.png create mode 100644 frontend/src/assets/logo/favicon.ico create mode 100644 frontend/src/assets/theme/saga-orange/theme.css create mode 100644 frontend/src/environments/environment.dev.ts create mode 100644 frontend/src/environments/environment.ts create mode 100644 frontend/src/index.html create mode 100644 frontend/src/main.server.ts create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/styles.scss create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.spec.json diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/backend/.gitlab-ci.yml b/backend/.gitlab-ci.yml new file mode 100644 index 0000000..69f6c02 --- /dev/null +++ b/backend/.gitlab-ci.yml @@ -0,0 +1,47 @@ +# You can override the included template(s) by including variable overrides +# SAST customization: https://docs.gitlab.com/ee/user/application_security/sast/#customizing-the-sast-settings +# Secret Detection customization: https://docs.gitlab.com/ee/user/application_security/secret_detection/#customizing-settings +# Dependency Scanning customization: https://docs.gitlab.com/ee/user/application_security/dependency_scanning/#customizing-the-dependency-scanning-settings +# Container Scanning customization: https://docs.gitlab.com/ee/user/application_security/container_scanning/#customizing-the-container-scanning-settings +# Note that environment variables can be set in several places +# See https://docs.gitlab.com/ee/ci/variables/#cicd-variable-precedence +stages: +- build +- test +- deploy + +# Inclure le template Auto-DevOps pour des configurations automatiques +include: + - template: Auto-DevOps.gitlab-ci.yml + +# Configuration des jobs +build: + stage: build + image: maven:3.8.5-jdk-17 # Utilisez l'image Docker Maven avec Java 17 + script: + - mvn clean package # Commande Maven pour compiler et empaqueter l'application + artifacts: + paths: + - target/*.jar # Spécifie les artefacts à archiver (fichier JAR de l'application) + +test: + stage: test + image: maven:3.8.5-jdk-17 + script: + - mvn test # Exécute les tests Maven + artifacts: + reports: + junit: target/surefire-reports/*.xml # Spécifie les rapports de tests à archiver + +deploy: + stage: deploy + image: openjdk:17-jdk # Utilisez l'image Docker OpenJDK 17 pour le déploiement + script: + - java -jar target/*.jar # Commande pour démarrer l'application Spring Boot + environment: + name: production # Nom de l'environnement de déploiement + only: + - main # Déployer uniquement à partir de la branche main + +include: +- template: Auto-DevOps.gitlab-ci.yml diff --git a/backend/.mvn/wrapper/maven-wrapper.jar b/backend/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..cb28b0e37c7d206feb564310fdeec0927af4123a GIT binary patch literal 62547 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 A?*IS* literal 0 HcmV?d00001 diff --git a/backend/.mvn/wrapper/maven-wrapper.properties b/backend/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..e70e7bc --- /dev/null +++ b/backend/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/backend/mvnw.cmd b/backend/mvnw.cmd new file mode 100644 index 0000000..95ba6f5 --- /dev/null +++ b/backend/mvnw.cmd @@ -0,0 +1,205 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/backend/pom.xml b/backend/pom.xml new file mode 100644 index 0000000..930a5c2 --- /dev/null +++ b/backend/pom.xml @@ -0,0 +1,83 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.0.13 + + + com.epsyl + eps + 0.0.1-SNAPSHOT + war + Epsyl Prospects Service + Outil de gestion des nouveaux prospects + + 17 + + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + org.springframework.boot + spring-boot-starter-test + test + + + com.fasterxml.jackson.core + jackson-databind + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + runtime + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/backend/routine.md b/backend/routine.md new file mode 100644 index 0000000..fd59290 --- /dev/null +++ b/backend/routine.md @@ -0,0 +1,140 @@ +## 1. Configurer votre Repository MongoDB : Créez un repository pour accéder aux données de la base de données MongoDB. + +```java +public interface ProspectRepository extends MongoRepository { + List findAllByCreatedDateBetween(LocalDateTime startDate, LocalDateTime endDate); +} +``` + +## 2. Service pour Récupérer les Nouvelles Entrées : Implémentez un service qui utilisera le repository pour récupérer les prospects ajoutés la veille. + +```java +@Service +public class ProspectService { + + @Autowired + private ProspectRepository prospectRepository; + + public List getProspectsAddedYesterday() { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime startOfYesterday = now.minusDays(1).with(LocalTime.MIN); + LocalDateTime endOfYesterday = now.minusDays(1).with(LocalTime.MAX); + + return prospectRepository.findAllByCreatedDateBetween(startOfYesterday, endOfYesterday); + } +} +``` + +## 3. Contrôleur pour Exposer le Service : Créez un contrôleur REST pour exposer le service via une API. + +```java +@RestController +@RequestMapping("/api/prospects") +public class ProspectController { + + @Autowired + private ProspectService prospectService; + + @GetMapping("/new") + public List getNewProspects() { + return prospectService.getProspectsAddedYesterday(); + } +} +``` + +# Automatiser + +## Ajouter les dépendances nécessaires : Assurez-vous que les dépendances pour Spring Mail et Spring Scheduler sont ajoutées dans votre pom.xml. + +```xml + + + + org.springframework.boot + spring-boot-starter-mail + + + + org.springframework.boot + spring-boot-starter + + +``` +## Configurer les propriétés de l'email : Ajoutez les configurations nécessaires dans le fichier application.properties. + +```properties +spring.mail.host=smtp.your-email-provider.com +spring.mail.port=587 +spring.mail.username=your-email@example.com +spring.mail.password=your-email-password +spring.mail.properties.mail.smtp.auth=true +spring.mail.properties.mail.smtp.starttls.enable=true +``` + +## Service d'envoi d'email : Créez un service pour envoyer des emails. + +```java +@Service +public class EmailService { + + @Autowired + private JavaMailSender mailSender; + + public void sendEmail(String to, String subject, String text) { + SimpleMailMessage message = new SimpleMailMessage(); + message.setTo(to); + message.setSubject(subject); + message.setText(text); + mailSender.send(message); + } +} +``` + +## Configurer la tâche planifiée : Implémentez un planificateur pour récupérer les nouveaux prospects et envoyer un email chaque jour de la semaine sauf le samedi et le dimanche. + +```java +@Component +public class ScheduledTasks { + + @Autowired + private ProspectService prospectService; + + @Autowired + private EmailService emailService; + + @Scheduled(cron = "0 0 8 * * MON-FRI") // S'exécute à 8h00 du lundi au vendredi + public void reportNewProspects() { + List newProspects = prospectService.getProspectsAddedYesterday(); + if (!newProspects.isEmpty()) { + StringBuilder emailContent = new StringBuilder("Nouveaux prospects ajoutés hier :\n\n"); + for (Prospect prospect : newProspects) { + emailContent.append(prospect.toString()).append("\n"); + } + emailService.sendEmail("recipient@example.com", "Rapport des nouveaux prospects", emailContent.toString()); + } + } +} +``` + +## Activer la planification dans votre application Spring Boot : Ajoutez l'annotation @EnableScheduling à votre classe principale Spring Boot. + +```java +@SpringBootApplication +@EnableScheduling +public class YourApplication { + + public static void main(String[] args) { + SpringApplication.run(YourApplication.class, args); + } +} +``` + +### Explications supplémentaires : + +- **Propriétés de l'email :** Les configurations de l'email dans application.properties sont nécessaires pour que Spring Boot puisse se connecter à votre serveur SMTP. + +- **Service d'envoi d'email :** EmailService utilise JavaMailSender pour envoyer des emails. Vous pouvez personnaliser le contenu du message selon vos besoins. + +- **Planificateur :** La classe ScheduledTasks utilise @Scheduled pour définir une tâche planifiée qui s'exécute à 8h00 du lundi au vendredi. Le format CRON "0 0 8 * * MON-FRI" signifie "à 8h00 du lundi au vendredi". + +- **Classe principale Spring Boot :** L'annotation @EnableScheduling permet d'activer la fonctionnalité de planification dans votre application Spring Boot. \ No newline at end of file diff --git a/backend/src/main/java/com/epsyl/eps/EpsylProspectsServiceApplication.java b/backend/src/main/java/com/epsyl/eps/EpsylProspectsServiceApplication.java new file mode 100644 index 0000000..47d5501 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/EpsylProspectsServiceApplication.java @@ -0,0 +1,13 @@ +package com.epsyl.eps; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class EpsylProspectsServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(EpsylProspectsServiceApplication.class, args); + } + +} diff --git a/backend/src/main/java/com/epsyl/eps/ServletInitializer.java b/backend/src/main/java/com/epsyl/eps/ServletInitializer.java new file mode 100644 index 0000000..3597971 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/ServletInitializer.java @@ -0,0 +1,13 @@ +package com.epsyl.eps; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +public class ServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(EpsylProspectsServiceApplication.class); + } + +} diff --git a/backend/src/main/java/com/epsyl/eps/controllers/AuthController.java b/backend/src/main/java/com/epsyl/eps/controllers/AuthController.java new file mode 100644 index 0000000..2b38a29 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/controllers/AuthController.java @@ -0,0 +1,147 @@ +package com.epsyl.eps.controllers; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseCookie; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.RestController; + +import com.epsyl.eps.entities.RoleEntity; +import com.epsyl.eps.entities.UserEntity; +import com.epsyl.eps.enums.ERole; +import com.epsyl.eps.playload.request.LoginRequest; +import com.epsyl.eps.playload.request.SignupRequest; +import com.epsyl.eps.playload.response.MessageResponse; +import com.epsyl.eps.playload.response.UserInfoResponse; +import com.epsyl.eps.repositories.RoleRepository; +import com.epsyl.eps.repositories.UserRepository; +import com.epsyl.eps.security.jwt.JwtUtils; +import com.epsyl.eps.security.services.UserDetailsImpl; + +import jakarta.validation.Valid; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + + + +@CrossOrigin(origins = "*", maxAge = 3600) +@RestController +@RequestMapping("api/v1/auth") +public class AuthController { + @Autowired + AuthenticationManager authenticationManager; + + @Autowired + UserRepository userRepository; + + @Autowired + RoleRepository roleRepository; + + @Autowired + PasswordEncoder encoder; + + @Autowired + JwtUtils jwtUtils; + + @PostMapping("/signin") + public ResponseEntity authenticateUser(@Valid @RequestBody LoginRequest loginRequest) { + + Authentication authentication = authenticationManager.authenticate( + new UsernamePasswordAuthenticationToken(loginRequest.getEmail(), loginRequest.getPassword())); + + SecurityContextHolder.getContext().setAuthentication(authentication); + + UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal(); + + ResponseCookie jwtCookie = jwtUtils.generateJwtCookie(userDetails); + + List roles = userDetails.getAuthorities().stream() + .map(item -> item.getAuthority()) + .collect(Collectors.toList()); + + return ResponseEntity.ok().header(HttpHeaders.SET_COOKIE, jwtCookie.toString()) + .body(new UserInfoResponse(userDetails.getId(), + userDetails.getUsername(), + userDetails.getEmail(), + roles)); + } + + @PostMapping("/signup") + public ResponseEntity registerUser(@Valid @RequestBody SignupRequest signUpRequest) { + if (userRepository.findByUsername(signUpRequest.getUsername())) { + return ResponseEntity + .badRequest() + .body(new MessageResponse("Error: Email is already taken!")); + } + + if (userRepository.existsByEmail(signUpRequest.getEmail())) { + return ResponseEntity + .badRequest() + .body(new MessageResponse("Error: Email is already in use!")); + } + + // Create new user's account + UserEntity user = new UserEntity( + signUpRequest.getUsername(), + signUpRequest.getEmail(), + encoder.encode(signUpRequest.getPassword()) + ); + + Set strRoles = signUpRequest.getRoles(); + Set roles = new HashSet<>(); + + if (roles == null) { + RoleEntity userRole = roleRepository.findByName(ERole.ROLE_USER) + .orElseThrow(() -> new RuntimeException("Error: RoleEntity is not found.")); + roles.setName(userRole); + } else { + switch (roles) { + case "super_admin": + RoleEntity superAdminRole = roleRepository.findByName(ERole.ROLE_SUPER_ADMIN) + .orElseThrow(() -> new RuntimeException("Error: RoleEntity is not found.")); + roles.setName(superAdminRole); + break; + case "admin": + RoleEntity adminRole = roleRepository.findByName(ERole.ROLE_ADMIN) + .orElseThrow(() -> new RuntimeException("Error: RoleEntity is not found.")); + roles.setName(adminRole); + break; + case "rh": + RoleEntity rhRole = roleRepository.findByName(ERole.ROLE_RH) + .orElseThrow(() -> new RuntimeException("Error: RoleEntity is not found.")); + roles.setName(rhRole); + break; + case "bum": + RoleEntity bumRole = roleRepository.findByName(ERole.ROLE_BUM) + .orElseThrow(() -> new RuntimeException("Error: RoleEntity is not found.")); + role.setName(bumRole); + break; + default: + RoleEntity userRole = roleRepository.findByName(ERole.ROLE_USER) + .orElseThrow(() -> new RuntimeException("Error: RoleEntity is not found.")); + role.setName(userRole); + } + } + + user.setRole(role); + userRepository.save(user); + + return ResponseEntity.ok(new MessageResponse("User registered successfully!")); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/controllers/FileStorageController.java b/backend/src/main/java/com/epsyl/eps/controllers/FileStorageController.java new file mode 100644 index 0000000..8cb915c --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/controllers/FileStorageController.java @@ -0,0 +1,68 @@ +package com.epsyl.eps.controllers; + +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import com.epsyl.eps.entities.FileStorageEntity; +import com.epsyl.eps.services.FileStorageService; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +@RestController +@RequestMapping("api/v1/files") +@CrossOrigin(origins = "http://localhost:4200") +public class FileStorageController { + + private static final Logger logger = LoggerFactory.getLogger(FileStorageController.class); + + @Autowired + private FileStorageService fileStorageService; + + @PostMapping("/upload") + public ResponseEntity> uploadFile(@RequestParam("file") MultipartFile file) { + Map response = new HashMap<>(); + HttpHeaders headers = new HttpHeaders(); + headers.add(HttpHeaders.CONTENT_TYPE, "application/json"); + + try { + String fileId = fileStorageService.storeFile(file); + response.put("fileId", fileId); + logger.info("File uploaded successfully with ID: {}", fileId); + return new ResponseEntity<>(response, headers, HttpStatus.OK); + } catch (IOException exception) { + response.put("error", "File upload failed"); + logger.error("File upload failed", exception); + return new ResponseEntity<>(response, headers, HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @GetMapping("/download/{id}") + public ResponseEntity downloadFile(@PathVariable String _id) { + FileStorageEntity fileStorage = fileStorageService.getFile(_id); + if(fileStorage != null) { + HttpHeaders headers = new HttpHeaders(); + headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileStorage.getFilename() + "\""); + return new ResponseEntity<>(fileStorage.getData(), headers, HttpStatus.OK); + } else { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); + } + } + + +} diff --git a/backend/src/main/java/com/epsyl/eps/controllers/ProspectsController.java b/backend/src/main/java/com/epsyl/eps/controllers/ProspectsController.java new file mode 100644 index 0000000..84d06e9 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/controllers/ProspectsController.java @@ -0,0 +1,93 @@ +package com.epsyl.eps.controllers; + +import java.util.List; +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import com.epsyl.eps.entities.ProspectEntity; +import com.epsyl.eps.services.ProspectServices; + +@RestController +@CrossOrigin(origins = "*") +@RequestMapping("api/v1/prospect") +public class ProspectsController { + + @Autowired + private ProspectServices prospectServices; + + // GET /api/v1/prospect/all + @GetMapping("/all") + public List getAllProspects() { + return prospectServices.allProspects(); + } + + // GET /api/v1/prospect/id + @RequestMapping("/{id}") + public ResponseEntity getProspectById(@PathVariable String _id) { + Optional prospect = prospectServices.getProspectByID(_id); + if (prospect.isPresent()) { + return ResponseEntity.ok(prospect.get()); + } else { + return ResponseEntity.notFound().build(); + } + } + + // GET /api/v1/prospect/trigram + @GetMapping("/trigram") + public boolean checkTrigram(@RequestParam String trigramme) { + return prospectServices.trigramExist(trigramme); + } + + // POST /api/v1/prospect/save + @PostMapping("/save") + public ProspectEntity saveProspect(@RequestBody ProspectEntity prospect) { + return prospectServices.saveOrUpdateProspect(prospect); + } + + // PUT /api/v1/prospect/edit/id + @PutMapping("/edit/{id}") + public ResponseEntity updateProspect(@PathVariable String _id, @RequestBody ProspectEntity prospectDetails) { + Optional prospectOptional = prospectServices.getProspectByID(_id); + if (prospectOptional.isPresent()) { + ProspectEntity prospect = prospectOptional.get(); + // Update fields here + prospect.setFirstName(prospectDetails.getFirstName()); + prospect.setLastName(prospectDetails.getLastName()); + prospect.setTrigramme(prospectDetails.getTrigramme()); + prospect.setEmail(prospectDetails.getEmail()); + prospect.setPhone(prospectDetails.getPhone()); + prospect.setProfil(prospectDetails.getProfil()); + prospect.setDateContact(prospectDetails.getDateContact()); + prospect.setDateEntretien(prospectDetails.getDateEntretien()); + prospect.setStatutProspect(prospectDetails.getStatutProspect()); + prospect.setBum(prospectDetails.getBum()); + prospect.setRh(prospectDetails.getRh()); + prospect.setSource(prospectDetails.getSource()); + prospect.setPretentionSalariale(prospectDetails.getPretentionSalariale()); + prospect.setNiveauEtude(prospectDetails.getNiveauEtude()); + prospect.setDisponibilite(prospectDetails.getDisponibilite()); + prospect.setMobiliteGeo(prospectDetails.getMobiliteGeo()); + prospect.setCv(prospectDetails.getCv()); + prospect.setGrille(prospectDetails.getGrille()); + prospect.setPr(prospectDetails.getPr()); + prospect.setDc(prospectDetails.getDc()); + prospect.setPushQualif(prospectDetails.getPushQualif()); + // Save updated prospect + ProspectEntity updatedProspect = prospectServices.saveOrUpdateProspect(prospect); + return ResponseEntity.ok(updatedProspect); + } else { + return ResponseEntity.notFound().build(); + } + } + + // DELETE /api/v1/prospect/delete/id + @DeleteMapping("/delete/{id}") + public ResponseEntity deleteProspect(@PathVariable String _id) { + prospectServices.deleteProspectById(_id); + return ResponseEntity.noContent().build(); + } + +} diff --git a/backend/src/main/java/com/epsyl/eps/controllers/TestController.java b/backend/src/main/java/com/epsyl/eps/controllers/TestController.java new file mode 100644 index 0000000..fa468dc --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/controllers/TestController.java @@ -0,0 +1,46 @@ +package com.epsyl.eps.controllers; + +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.GetMapping; + +@CrossOrigin(origins = "*", maxAge = 3600) +@RestController +@RequestMapping("/api/test") +public class TestController { + @GetMapping("/all") + public String allAccess() { + return "Public Content."; + } + + @GetMapping("/user") + @PreAuthorize("hasRole('USER') or hasRole('RH') or hasRole('BUM') or hasRole('ADMIN') or hasRole('SUPER_ADMIN')") + public String userAccess() { + return "User Content."; + } + + @GetMapping("/rh") + @PreAuthorize("hasRole('RH')") + public String rhAccess() { + return "Rh Content."; + } + + @GetMapping("/bum") + @PreAuthorize("hasRole('BUM')") + public String bumAccess() { + return "Rh Content."; + } + @GetMapping("/admin") + @PreAuthorize("hasRole('ADMIN')") + public String adminAccess() { + return "Admin Content."; + } + + @GetMapping("/super_admin") + @PreAuthorize("hasRole('SUPER_ADMIN')") + public String superAdminAccess() { + return "Super Admin Content."; + } +} diff --git a/backend/src/main/java/com/epsyl/eps/controllers/UsersController.java b/backend/src/main/java/com/epsyl/eps/controllers/UsersController.java new file mode 100644 index 0000000..22ee86f --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/controllers/UsersController.java @@ -0,0 +1,57 @@ +package com.epsyl.eps.controllers; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import com.epsyl.eps.entities.UserEntity; +import com.epsyl.eps.services.UserServices; + +@RestController +@CrossOrigin(origins = "*") +@RequestMapping("api/v1/user") +public class UsersController { + + @Autowired + private UserServices userServices; + + // GET api/v1/user/id + @RequestMapping("/{id}") + public ResponseEntity getUser(@PathVariable String _id) { + Optional user = userServices.getUserByID(_id); + if (user.isPresent()) { + return ResponseEntity.ok(user.get()); + } else { + return ResponseEntity.notFound().build(); + } + } + + // GET api/v1/user/all + @GetMapping("/all") + public Iterable getUsers() { + return userServices.listAll(); + } + + // POST api/v1/user/save + @PostMapping("/save") + public UserEntity saveUser(@RequestBody UserEntity user) { + return userServices.saveOrUpdateUser(user); + } + + // PUT api/v1/user/edit/id + @PutMapping("/edit/{id}") + public UserEntity updateUser(@RequestBody UserEntity user, @PathVariable String _id) { + user.set_id(_id); + userServices.saveOrUpdateUser(user); + return user; + } + + // DELETE api/v1/user/delete/id + @DeleteMapping("/delete/{id}") + public ResponseEntity deleteUser(@PathVariable String userId) { + userServices.deleteUser(userId); + return ResponseEntity.noContent().build(); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/custom_serializer/ObjectIdDeserializer.java b/backend/src/main/java/com/epsyl/eps/custom_serializer/ObjectIdDeserializer.java new file mode 100644 index 0000000..c1d7fc9 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/custom_serializer/ObjectIdDeserializer.java @@ -0,0 +1,16 @@ +package com.epsyl.eps.custom_serializer; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import org.bson.types.ObjectId; + +import java.io.IOException; + +public class ObjectIdDeserializer extends JsonDeserializer { + @Override + public ObjectId deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException { + return new ObjectId(jsonParser.getText()); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/custom_serializer/ObjectIdSerializer.java b/backend/src/main/java/com/epsyl/eps/custom_serializer/ObjectIdSerializer.java new file mode 100644 index 0000000..18fa8d8 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/custom_serializer/ObjectIdSerializer.java @@ -0,0 +1,15 @@ +package com.epsyl.eps.custom_serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import org.bson.types.ObjectId; + +import java.io.IOException; + +public class ObjectIdSerializer extends JsonSerializer { + @Override + public void serialize(ObjectId objectId, JsonGenerator jsonGenerator, SerializerProvider serializers) throws IOException { + jsonGenerator.writeString(objectId.toString()); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/dto/ProspectDTO.java b/backend/src/main/java/com/epsyl/eps/dto/ProspectDTO.java new file mode 100644 index 0000000..1f8f23f --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/dto/ProspectDTO.java @@ -0,0 +1,224 @@ +package com.epsyl.eps.dto; + +import java.time.LocalDateTime; +import java.util.Date; + +import org.springframework.data.annotation.CreatedDate; + +import com.epsyl.eps.entities.ProspectEntity; +import com.epsyl.eps.entities.PushQualifEntity; + +public class ProspectDTO { + public String _id; + public String firstName; + public String lastName; + public String trigramme; + public String email; + public String phone; + public String profil; + public Date dateContact; + public Date dateEntretien; + public String statutProspect; + public String bum; + public String rh; + public String source; + public double pretentionSalariale; + public String niveauEtude; + public String disponibilite; + public String mobiliteGeo; + public String cv; + public String grille; + public byte pr; + public String dc; + public PushQualifEntity pushQualif;@CreatedDate + public LocalDateTime createdDate; + + public ProspectDTO() {} + + public ProspectDTO(ProspectEntity prospect, String bum, String rh, String cv, String grille, String dc) { + this._id = prospect.get_id(); + this.firstName = prospect.getFirstName(); + this.lastName = prospect.getLastName(); + this.trigramme = prospect.getTrigramme(); + this.email = prospect.getEmail(); + this.phone = prospect.getPhone(); + this.profil = prospect.getProfil(); + this.dateContact = prospect.getDateContact(); + this.dateEntretien = prospect.getDateEntretien(); + this.statutProspect = prospect.getStatutProspect(); + this.bum = bum; + this.rh = rh; + this.source = prospect.getSource(); + this.pretentionSalariale = prospect.getPretentionSalariale(); + this.niveauEtude = prospect.getNiveauEtude(); + this.disponibilite = prospect.getDisponibilite(); + this.mobiliteGeo = prospect.getMobiliteGeo(); + this.cv = cv; + this.grille = grille; + this.pr = prospect.getPr(); + this.dc = dc; + this.pushQualif = prospect.getPushQualif(); + this.createdDate = prospect.getCreatedDate(); + } + + public String get_id() { + return _id; + } + public void set_id(String _id) { + this._id = _id; + } + + public String getFirstName() { + return firstName; + } + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getTrigramme() { + return trigramme; + } + public void setTrigramme(String trigramme) { + this.trigramme = trigramme; + } + + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + public void setPhone(String phone) { + this.phone = phone; + } + + public String getProfil() { + return profil; + } + public void setProfil(String profil) { + this.profil = profil; + } + + public Date getDateContact() { + return dateContact; + } + public void setDateContact(Date dateContact) { + this.dateContact = dateContact; + } + + public Date getDateEntretien() { + return dateEntretien; + } + public void setDateEntretien(Date dateEntretien) { + this.dateEntretien = dateEntretien; + } + + public String getStatutProspect() { + return statutProspect; + } + public void setStatutProspect(String statutProspect) { + this.statutProspect = statutProspect; + } + + public String getBum() { + return bum; + } + public void setBum(String bum) { + this.bum = bum; + } + + public String getRh() { + return rh; + } + public void setRh(String rh) { + this.rh = rh; + } + + public String getSource() { + return source; + } + public void setSource(String source) { + this.source = source; + } + + public double getPretentionSalariale() { + return pretentionSalariale; + } + public void setPretentionSalariale(double pretentionSalariale) { + this.pretentionSalariale = pretentionSalariale; + } + + public String getNiveauEtude() { + return niveauEtude; + } + public void setNiveauEtude(String niveauEtude) { + this.niveauEtude = niveauEtude; + } + + public String getDisponibilite() { + return disponibilite; + } + public void setDisponibilite(String disponibilite) { + this.disponibilite = disponibilite; + } + + public String getMobiliteGeo() { + return mobiliteGeo; + } + public void setMobiliteGeo(String mobiliteGeo) { + this.mobiliteGeo = mobiliteGeo; + } + + public String getCv() { + return cv; + } + public void setCv(String cv) { + this.cv = cv; + } + + public String getGrille() { + return grille; + } + public void setGrille(String grille) { + this.grille = grille; + } + + public byte getPr() { + return pr; + } + public void setPr(byte pr) { + this.pr = pr; + } + + public String getDc() { + return dc; + } + public void setDc(String dc) { + this.dc = dc; + } + + public PushQualifEntity getPushQualif() { + return pushQualif; + } + public void setPushQualif(PushQualifEntity pushQualif) { + this.pushQualif = pushQualif; + } + + public LocalDateTime getCreatedDate() { + return createdDate; + } + public void setCreatedDate(LocalDateTime createdDate) { + this.createdDate = createdDate; + } +} diff --git a/backend/src/main/java/com/epsyl/eps/entities/FileStorageEntity.java b/backend/src/main/java/com/epsyl/eps/entities/FileStorageEntity.java new file mode 100644 index 0000000..bf94b29 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/entities/FileStorageEntity.java @@ -0,0 +1,41 @@ +package com.epsyl.eps.entities; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +@Document(collection = "fileStorages") +public class FileStorageEntity { + @Id + public String _id; + public String filename; + public String contentType; + public byte[] data; + + public String get_id() { + return _id; + } + public void set_id(String _id) { + this._id = _id; + } + + public String getFilename() { + return filename; + } + public void setFilename(String filename) { + this.filename = filename; + } + + public String getContentType() { + return contentType; + } + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public byte[] getData() { + return data; + } + public void setData(byte[] data) { + this.data = data; + } +} diff --git a/backend/src/main/java/com/epsyl/eps/entities/ProspectEntity.java b/backend/src/main/java/com/epsyl/eps/entities/ProspectEntity.java new file mode 100644 index 0000000..4c9db52 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/entities/ProspectEntity.java @@ -0,0 +1,288 @@ +package com.epsyl.eps.entities; + +import java.time.LocalDateTime; +import java.util.Date; + +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import com.epsyl.eps.custom_serializer.ObjectIdDeserializer; +import com.epsyl.eps.custom_serializer.ObjectIdSerializer; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +@Document(collection = "prospects") +public class ProspectEntity { + @Id + @JsonSerialize(using = ObjectIdSerializer.class) + @JsonDeserialize(using = ObjectIdDeserializer.class) + public String _id; + public String firstName; + public String lastName; + public String trigramme; + public String email; + public String phone; + public String profil; + public Date dateContact; + public Date dateEntretien; + public String statutProspect; + + @JsonSerialize(using = ObjectIdSerializer.class) + @JsonDeserialize(using = ObjectIdDeserializer.class) + public String bum; + + @JsonSerialize(using = ObjectIdSerializer.class) + @JsonDeserialize(using = ObjectIdDeserializer.class) + public String rh; + + public String source; + public double pretentionSalariale; + public String niveauEtude; + public String disponibilite; + public String mobiliteGeo; + + @JsonSerialize(using = ObjectIdSerializer.class) + @JsonDeserialize(using = ObjectIdDeserializer.class) + public String cv; + + @JsonSerialize(using = ObjectIdSerializer.class) + @JsonDeserialize(using = ObjectIdDeserializer.class) + public String grille; + + public byte pr; + + @JsonSerialize(using = ObjectIdSerializer.class) + @JsonDeserialize(using = ObjectIdDeserializer.class) + public String dc; + + @JsonProperty + public PushQualifEntity pushQualif; + @CreatedDate + public LocalDateTime createdDate; + + public ProspectEntity() { + } + + public ProspectEntity(String firstName, String lastName, String trigramme, String email, String phone, String profil, + Date dateContact, Date dateEntretien, String statutProspect, String bum, String rh, + String source, double pretentionSalariale, String niveauEtude, String disponibilite, String mobiliteGeo, + String cv, String grille, byte pr, String dc, PushQualifEntity pushQualif, LocalDateTime createdDate) { + this.firstName = firstName; + this.lastName = lastName; + this.trigramme = trigramme; + this.email = email; + this.phone = phone; + this.profil = profil; + this.dateContact = dateContact; + this.dateEntretien = dateEntretien; + this.statutProspect = statutProspect; + this.bum = bum; + this.rh = rh; + this.source = source; + this.pretentionSalariale = pretentionSalariale; + this.niveauEtude = niveauEtude; + this.disponibilite = disponibilite; + this.mobiliteGeo = mobiliteGeo; + this.cv = cv; + this.grille = grille; + this.pr = pr; + this.dc = dc; + this.pushQualif = pushQualif; + this.createdDate = createdDate; + } + + public String get_id() { + return _id; + } + + public void set_id(String _id) { + this._id = _id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getTrigramme() { + return trigramme; + } + + public void setTrigramme(String trigramme) { + this.trigramme = trigramme; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getProfil() { + return profil; + } + + public void setProfil(String profil) { + this.profil = profil; + } + + public Date getDateContact() { + return dateContact; + } + + public void setDateContact(Date dateContact) { + this.dateContact = dateContact; + } + + public Date getDateEntretien() { + return dateEntretien; + } + + public void setDateEntretien(Date dateEntretien) { + this.dateEntretien = dateEntretien; + } + + public String getStatutProspect() { + return statutProspect; + } + + public void setStatutProspect(String statutProspect) { + this.statutProspect = statutProspect; + } + + public String getBum() { + return bum; + } + + public void setBum(String bum) { + this.bum = bum; + } + + public String getRh() { + return rh; + } + + public void setRh(String rh) { + this.rh = rh; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public double getPretentionSalariale() { + return pretentionSalariale; + } + + public void setPretentionSalariale(double pretentionSalariale) { + this.pretentionSalariale = pretentionSalariale; + } + + public String getNiveauEtude() { + return niveauEtude; + } + + public void setNiveauEtude(String niveauEtude) { + this.niveauEtude = niveauEtude; + } + + public String getDisponibilite() { + return disponibilite; + } + + public void setDisponibilite(String disponibilite) { + this.disponibilite = disponibilite; + } + + public String getMobiliteGeo() { + return mobiliteGeo; + } + + public void setMobiliteGeo(String mobiliteGeo) { + this.mobiliteGeo = mobiliteGeo; + } + + public String getCv() { + return cv; + } + + public void setCv(String cv) { + this.cv = cv; + } + + public String getGrille() { + return grille; + } + + public void setGrille(String grille) { + this.grille = grille; + } + + public byte getPr() { + return pr; + } + + public void setPr(byte pr) { + this.pr = pr; + } + + public String getDc() { + return dc; + } + public void setDc(String dc) { + this.dc = dc; + } + + public PushQualifEntity getPushQualif() { + return pushQualif; + } + public void setPushQualif(PushQualifEntity pushQualif) { + this.pushQualif = pushQualif; + } + + public LocalDateTime getCreatedDate() { + return createdDate; + } + public void setCreatedDate(LocalDateTime createdDate) { + this.createdDate = createdDate; + } + + @Override + public String toString() { + return "Prospect [_id=" + _id + ", firstName=" + firstName + ", lastName=" + lastName + ", trigramme=" + + trigramme + ", email=" + email + ", phone=" + phone + ", profil=" + profil + ", dateContact=" + + dateContact + ", dateEntretien=" + dateEntretien + ", statutProspect=" + + statutProspect + ", bum=" + bum + ", rh=" + rh + ", source=" + source + ", pretentionSalariale=" + + pretentionSalariale + ", niveauEtude=" + niveauEtude + ", disponibilite=" + disponibilite + + ", mobiliteGeo=" + mobiliteGeo + ", cv=" + cv + ", grille=" + grille + ", pr=" + pr + ", dc=" + dc + + ", pushQualif=" + pushQualif + ", createdDate=" + createdDate + "]"; + } + +} diff --git a/backend/src/main/java/com/epsyl/eps/entities/PushQualifEntity.java b/backend/src/main/java/com/epsyl/eps/entities/PushQualifEntity.java new file mode 100644 index 0000000..eaa2b46 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/entities/PushQualifEntity.java @@ -0,0 +1,52 @@ +package com.epsyl.eps.entities; + +import java.util.Date; + +public class PushQualifEntity { + public String client; + public Date datePush; + public Date datePushRetour; + public Date dateQualif; + + public PushQualifEntity() { + } + + public PushQualifEntity(String client, Date datePush, Date datePushRetour, Date dateQualif) { + this.client = client; + this.datePush = datePush; + this.datePushRetour = datePushRetour; + this.dateQualif = dateQualif; + } + + public String getClient() { + return client; + } + + public void setClient(String client) { + this.client = client; + } + + public Date getDatePush() { + return datePush; + } + + public void setDatePush(Date datePush) { + this.datePush = datePush; + } + + public Date getDatePushRetour() { + return datePushRetour; + } + + public void setDatePushRetour(Date datePushRetour) { + this.datePushRetour = datePushRetour; + } + + public Date getDateQualif() { + return dateQualif; + } + + public void setDateQualif(Date dateQualif) { + this.dateQualif = dateQualif; + } +} diff --git a/backend/src/main/java/com/epsyl/eps/entities/RoleEntity.java b/backend/src/main/java/com/epsyl/eps/entities/RoleEntity.java new file mode 100644 index 0000000..e7f2c30 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/entities/RoleEntity.java @@ -0,0 +1,37 @@ +package com.epsyl.eps.entities; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import com.epsyl.eps.enums.ERole; + +@Document(collection = "roles") +public class RoleEntity { + @Id + private String _id; + private ERole name; + + public RoleEntity() {} + + public RoleEntity(ERole name) { + this.name = name; + } + + public String getId() { + return _id; + } + + public void setId(String _id) { + this._id = _id; + } + + public ERole getName() { + return name; + } + + public void setName(ERole name) { + this.name = name; + } + + +} diff --git a/backend/src/main/java/com/epsyl/eps/entities/UserEntity.java b/backend/src/main/java/com/epsyl/eps/entities/UserEntity.java new file mode 100644 index 0000000..d018582 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/entities/UserEntity.java @@ -0,0 +1,115 @@ +package com.epsyl.eps.entities; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +import java.util.HashSet; +import java.util.Set; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.DBRef; +import org.springframework.data.mongodb.core.mapping.Document; + +@Document(collection = "users") +public class UserEntity { + @Id + private String _id; + + @NotBlank + @Size(max = 20) + private String firstName; + + @NotBlank + @Size(max = 20) + private String lastName; + + private String username; + + @NotBlank + @Size(max = 50) + @Email + private String email; + + @NotBlank + @Size(max = 120) + private String password; + + @DBRef + private Set roles = new HashSet<>(); + + public UserEntity() { + } + + public UserEntity(String firstName, String lastName, String email, String password) { + this.firstName = firstName; + this.lastName = lastName; + this.username = generateUsername(firstName, lastName); + this.email = email; + this.password = password; + } + + public UserEntity(String username, String email, String password) { + this.username = username; + this.email = email; + this.password = password; + } + + public String get_id() { + return _id; + } + + public void set_id(String _id) { + this._id = _id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + this.username = generateUsername(firstName, this.lastName); + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + this.username = generateUsername(this.firstName, lastName); + } + + public String getUsername() { + return username; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Set getRoles() { + return roles; + } + + public void setRoles(Set roles) { + this.roles = roles; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + private String generateUsername(String firstName, String lastName) { + return firstName + "." + lastName; + } +} diff --git a/backend/src/main/java/com/epsyl/eps/enums/ERole.java b/backend/src/main/java/com/epsyl/eps/enums/ERole.java new file mode 100644 index 0000000..5e8541e --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/enums/ERole.java @@ -0,0 +1,9 @@ +package com.epsyl.eps.enums; + +public enum ERole { + ROLE_SUPER_ADMIN, + ROLE_ADMIN, + ROLE_RH, + ROLE_BUM, + ROLE_USER +} diff --git a/backend/src/main/java/com/epsyl/eps/playload/request/LoginRequest.java b/backend/src/main/java/com/epsyl/eps/playload/request/LoginRequest.java new file mode 100644 index 0000000..bb05997 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/playload/request/LoginRequest.java @@ -0,0 +1,27 @@ +package com.epsyl.eps.playload.request; + +import jakarta.validation.constraints.NotBlank; + +public class LoginRequest { + @NotBlank + private String email; + + @NotBlank + private String password; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/backend/src/main/java/com/epsyl/eps/playload/request/SignupRequest.java b/backend/src/main/java/com/epsyl/eps/playload/request/SignupRequest.java new file mode 100644 index 0000000..a76e648 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/playload/request/SignupRequest.java @@ -0,0 +1,65 @@ +package com.epsyl.eps.playload.request; + +import java.util.Set; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +public class SignupRequest { + @NotBlank + @Size(min = 3, max = 100) + private String firstName; + + @NotBlank + @Size(min = 3, max = 100) + private String username; + + @NotBlank + @Size(max = 50) + @Email + private String email; + + private Set roles; + + @NotBlank + @Size(min = 6,max = 40) + private String password; + + public String getFirstName() { + return firstName; + } + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getUsername() { + return username; + } + public void setUsername(String username) { + this.username = username; + } + + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Set getRoles() { + return this.roles; + } + + public void setRole(Set roles) { + this.roles = roles; + } +} diff --git a/backend/src/main/java/com/epsyl/eps/playload/response/MessageResponse.java b/backend/src/main/java/com/epsyl/eps/playload/response/MessageResponse.java new file mode 100644 index 0000000..f4d1b08 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/playload/response/MessageResponse.java @@ -0,0 +1,17 @@ +package com.epsyl.eps.playload.response; + +public class MessageResponse { + private String message; + + public MessageResponse(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/backend/src/main/java/com/epsyl/eps/playload/response/UserInfoResponse.java b/backend/src/main/java/com/epsyl/eps/playload/response/UserInfoResponse.java new file mode 100644 index 0000000..1872938 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/playload/response/UserInfoResponse.java @@ -0,0 +1,43 @@ +package com.epsyl.eps.playload.response; + +public class UserInfoResponse { + private String id; + private String lastName; + private String email; + private String role; + + public UserInfoResponse(String id, String lastName, String email, String role) { + this.id = id; + this.lastName = lastName; + this.email = email; + this.role = role; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getRole() { + return role; + } +} diff --git a/backend/src/main/java/com/epsyl/eps/repositories/FileStorageRepository.java b/backend/src/main/java/com/epsyl/eps/repositories/FileStorageRepository.java new file mode 100644 index 0000000..567fe6c --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/repositories/FileStorageRepository.java @@ -0,0 +1,11 @@ +package com.epsyl.eps.repositories; + +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import com.epsyl.eps.entities.FileStorageEntity; + +@Repository +public interface FileStorageRepository extends MongoRepository { + +} diff --git a/backend/src/main/java/com/epsyl/eps/repositories/ProspectRepository.java b/backend/src/main/java/com/epsyl/eps/repositories/ProspectRepository.java new file mode 100644 index 0000000..a6f2229 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/repositories/ProspectRepository.java @@ -0,0 +1,14 @@ +package com.epsyl.eps.repositories; + +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import com.epsyl.eps.entities.ProspectEntity; + +@Repository +public interface ProspectRepository extends MongoRepository { + /* + * Vérifier si le trigramme existe + */ + boolean existsByTrigramme(String trigramme); +} diff --git a/backend/src/main/java/com/epsyl/eps/repositories/RoleRepository.java b/backend/src/main/java/com/epsyl/eps/repositories/RoleRepository.java new file mode 100644 index 0000000..dadd2e5 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/repositories/RoleRepository.java @@ -0,0 +1,13 @@ +package com.epsyl.eps.repositories; + +import java.util.Optional; + +import org.springframework.data.mongodb.repository.MongoRepository; + +import com.epsyl.eps.entities.RoleEntity; +import com.epsyl.eps.enums.ERole; + + +public interface RoleRepository extends MongoRepository { + Optional findByName(ERole name); +} diff --git a/backend/src/main/java/com/epsyl/eps/repositories/UserRepository.java b/backend/src/main/java/com/epsyl/eps/repositories/UserRepository.java new file mode 100644 index 0000000..801abe0 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/repositories/UserRepository.java @@ -0,0 +1,17 @@ +package com.epsyl.eps.repositories; + +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import com.epsyl.eps.entities.UserEntity; +import java.util.Optional; + +@Repository +public interface UserRepository extends MongoRepository { + + Optional findByUsername(String username); + + Boolean existsByUsername(String username); + + Boolean existsByEmail(String email); +} \ No newline at end of file diff --git a/backend/src/main/java/com/epsyl/eps/security/WebSecurityConfig.java b/backend/src/main/java/com/epsyl/eps/security/WebSecurityConfig.java new file mode 100644 index 0000000..a8b8f2a --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/security/WebSecurityConfig.java @@ -0,0 +1,96 @@ +package com.epsyl.eps.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +import com.epsyl.eps.security.jwt.AuthEntryPointJwt; +import com.epsyl.eps.security.jwt.AuthTokenFilter; +import com.epsyl.eps.security.services.UserDetailsServiceImpl; + +@Configuration +@EnableMethodSecurity +public class WebSecurityConfig { + @Autowired + UserDetailsServiceImpl userDetailsService; + + @Autowired + private AuthEntryPointJwt unauthorizedHandler; + + @Bean + public AuthTokenFilter authenticationJwtTokenFilter() { + return new AuthTokenFilter(); + } + + // @Override + // public void configure(AuthenticationManagerBuilder + // authenticationManagerBuilder) throws Exception { + // authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); + // } + + @Bean + public DaoAuthenticationProvider authenticationProvider() { + DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); + + authProvider.setUserDetailsService(userDetailsService); + authProvider.setPasswordEncoder(passwordEncoder()); + + return authProvider; + } + + // @Bean + // @Override + // public AuthenticationManager authenticationManagerBean() throws Exception { + // return super.authenticationManagerBean(); + // } + + @Bean + public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception { + return authConfig.getAuthenticationManager(); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + + // @Override + // protected void configure(HttpSecurity http) throws Exception { + // http.cors().and().csrf().disable() + // .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() + // .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() + // .authorizeRequests().antMatchers("/api/auth/**").permitAll() + // .antMatchers("/api/test/**").permitAll() + // .anyRequest().authenticated(); + // + // http.addFilterBefore(authenticationJwtTokenFilter(), + // UsernamePasswordAuthenticationFilter.class); + // } + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http.csrf(csrf -> csrf.disable()) + .exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler)) + .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .authorizeHttpRequests(auth -> auth.requestMatchers("/api/auth/**").permitAll() + .requestMatchers("/api/test/**").permitAll() + .anyRequest().authenticated()); + + http.authenticationProvider(authenticationProvider()); + + http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class); + + return http.build(); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/security/jwt/AuthEntryPointJwt.java b/backend/src/main/java/com/epsyl/eps/security/jwt/AuthEntryPointJwt.java new file mode 100644 index 0000000..d79d0e5 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/security/jwt/AuthEntryPointJwt.java @@ -0,0 +1,37 @@ +package com.epsyl.eps.security.jwt; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType; +import org.springframework.security.core.AuthenticationException; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +public class AuthEntryPointJwt { + private static final Logger logger = LoggerFactory.getLogger(AuthEntryPointJwt.class); + + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) + throws IOException, ServletException { + logger.error("Unauthorized error: {}", authException.getMessage()); + + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + + final Map body = new HashMap<>(); + body.put("status", HttpServletResponse.SC_UNAUTHORIZED); + body.put("error", "Unauthorized"); + body.put("message", authException.getMessage()); + body.put("path", request.getServletPath()); + + final ObjectMapper mapper = new ObjectMapper(); + mapper.writeValue(response.getOutputStream(), body); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/security/jwt/AuthTokenFilter.java b/backend/src/main/java/com/epsyl/eps/security/jwt/AuthTokenFilter.java new file mode 100644 index 0000000..e84f8d4 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/security/jwt/AuthTokenFilter.java @@ -0,0 +1,54 @@ +package com.epsyl.eps.security.jwt; + +import java.io.IOException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; + +import com.epsyl.eps.security.services.UserDetailsServiceImpl; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +public class AuthTokenFilter { + @Autowired + private JwtUtils jwtUtils; + + @Autowired + private UserDetailsServiceImpl userDetailsService; + + private static final Logger logger = LoggerFactory.getLogger(AuthTokenFilter.class); + + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + try { + String jwt = parseJwt(request); + if (jwt != null && jwtUtils.validateJwtToken(jwt)) { + String lastName = jwtUtils.getUserNameFromJwtToken(jwt); + + UserDetails userDetails = userDetailsService.loadUserByUsername(lastName); + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, + userDetails.getAuthorities()); + authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + + SecurityContextHolder.getContext().setAuthentication(authentication); + } + } catch (Exception e) { + logger.error("Cannot set user authentication: {}", e); + } + + filterChain.doFilter(request, response); + } + + private String parseJwt(HttpServletRequest request) { + String jwt = jwtUtils.getJwtFromCookies(request); + return jwt; + } +} diff --git a/backend/src/main/java/com/epsyl/eps/security/jwt/JwtUtils.java b/backend/src/main/java/com/epsyl/eps/security/jwt/JwtUtils.java new file mode 100644 index 0000000..ddd0405 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/security/jwt/JwtUtils.java @@ -0,0 +1,92 @@ +package com.epsyl.eps.security.jwt; + +import java.security.Key; +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseCookie; +import org.springframework.stereotype.Component; +import org.springframework.web.util.WebUtils; + +import com.epsyl.eps.security.services.UserDetailsImpl; + +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.MalformedJwtException; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.UnsupportedJwtException; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.security.Keys; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; + +@Component +public class JwtUtils { + private static final Logger logger = LoggerFactory.getLogger(JwtUtils.class); + + @Value("${epsyl.eps.jwtSecret}") + private String jwtSecret; + + @Value("${epsyl.eps.jwtExpirationMs}") + private int jwtExpirationMs; + + @Value("${epsyl.eps.jwtCookieName}") + private String jwtCookie; + + public String getJwtFromCookies(HttpServletRequest request) { + Cookie cookie = WebUtils.getCookie(request, jwtCookie); + if (cookie != null) { + return cookie.getValue(); + } else { + return null; + } + } + + public ResponseCookie generateJwtCookie(UserDetailsImpl userPrincipal) { + String jwt = generateTokenFromUsername(userPrincipal.getUsername()); + ResponseCookie cookie = ResponseCookie.from(jwtCookie, jwt).path("/api").maxAge(24 * 60 * 60).httpOnly(true).build(); + return cookie; + } + + public ResponseCookie getCleanJwtCookie() { + ResponseCookie cookie = ResponseCookie.from(jwtCookie, null).path("/api").build(); + return cookie; + } + + public String getUserNameFromJwtToken(String token) { + return Jwts.parserBuilder().setSigningKey(key()).build() + .parseClaimsJws(token).getBody().getSubject(); + } + + private Key key() { + return Keys.hmacShaKeyFor(Decoders.BASE64.decode(jwtSecret)); + } + + public boolean validateJwtToken(String authToken) { + try { + Jwts.parserBuilder().setSigningKey(key()).build().parse(authToken); + return true; + } catch (MalformedJwtException e) { + logger.error("Invalid JWT token: {}", e.getMessage()); + } catch (ExpiredJwtException e) { + logger.error("JWT token is expired: {}", e.getMessage()); + } catch (UnsupportedJwtException e) { + logger.error("JWT token is unsupported: {}", e.getMessage()); + } catch (IllegalArgumentException e) { + logger.error("JWT claims string is empty: {}", e.getMessage()); + } + + return false; + } + + public String generateTokenFromUsername(String lastName) { + return Jwts.builder() + .setSubject(lastName) + .setIssuedAt(new Date()) + .setExpiration(new Date((new Date()).getTime() + jwtExpirationMs)) + .signWith(key(), SignatureAlgorithm.HS256) + .compact(); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/security/services/UserDetailsImpl.java b/backend/src/main/java/com/epsyl/eps/security/services/UserDetailsImpl.java new file mode 100644 index 0000000..cddaf0a --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/security/services/UserDetailsImpl.java @@ -0,0 +1,103 @@ +package com.epsyl.eps.security.services; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import com.epsyl.eps.entities.UserEntity; +import com.fasterxml.jackson.annotation.JsonIgnore; + +public class UserDetailsImpl implements UserDetails { + private static final long serialVersionUID = 1L; + + private String id; + + private String username; + + private String email; + + @JsonIgnore + private String password; + + private Collection authorities; + + public UserDetailsImpl(String id, String username, String email, String password, + Collection authorities) { + this.id = id; + this.username = username; + this.email = email; + this.password = password; + this.authorities = authorities; + } + + public static UserDetailsImpl build(UserEntity user) { + List authorities = user.getRoles().stream() + .map(role -> new SimpleGrantedAuthority(role.getName().name())) + .collect(Collectors.toList()); + + return new UserDetailsImpl( + user.get_id(), + user.getUsername(), + user.getEmail(), + user.getPassword(), + authorities); + } + + @Override + public Collection getAuthorities() { + return authorities; + } + + public String getId() { + return id; + } + + public String getEmail() { + return email; + } + + @Override + public String getPassword() { + return password; + } + + @Override + public String getUsername() { + return username; + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + UserDetailsImpl user = (UserDetailsImpl) o; + return Objects.equals(id, user.id); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/security/services/UserDetailsServiceImpl.java b/backend/src/main/java/com/epsyl/eps/security/services/UserDetailsServiceImpl.java new file mode 100644 index 0000000..19735d5 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/security/services/UserDetailsServiceImpl.java @@ -0,0 +1,25 @@ +package com.epsyl.eps.security.services; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.epsyl.eps.entities.UserEntity; +import com.epsyl.eps.repositories.UserRepository; + +@Service +public class UserDetailsServiceImpl { + @Autowired + UserRepository userRepository; + + // @Override + @Transactional + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + UserEntity user = userRepository.findByUsername(username) + .orElseThrow(() -> new UsernameNotFoundException("User Not Found with username: " + username)); + + return UserDetailsImpl.build(user); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/services/FileStorageService.java b/backend/src/main/java/com/epsyl/eps/services/FileStorageService.java new file mode 100644 index 0000000..d56ece5 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/services/FileStorageService.java @@ -0,0 +1,32 @@ +package com.epsyl.eps.services; + +import com.epsyl.eps.entities.FileStorageEntity; +import com.epsyl.eps.repositories.FileStorageRepository; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +@Service +public class FileStorageService { + + @Autowired + private FileStorageRepository fileStorageRepository; + + public String storeFile(MultipartFile file) throws IOException { + FileStorageEntity fileStorage = new FileStorageEntity(); + fileStorage.setFilename(file.getOriginalFilename()); + fileStorage.setContentType(file.getContentType()); + fileStorage.setData(file.getBytes()); + + fileStorage = fileStorageRepository.save(fileStorage); + + return fileStorage.get_id(); + } + + public FileStorageEntity getFile(String id) { + return fileStorageRepository.findById(id).orElse(null); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/services/ProspectServices.java b/backend/src/main/java/com/epsyl/eps/services/ProspectServices.java new file mode 100644 index 0000000..0976b3c --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/services/ProspectServices.java @@ -0,0 +1,40 @@ +package com.epsyl.eps.services; + +import java.util.List; +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.epsyl.eps.entities.ProspectEntity; +import com.epsyl.eps.repositories.ProspectRepository; + +@Service +public class ProspectServices { + + @Autowired + private ProspectRepository prospectRepository; + + public List allProspects() { + return prospectRepository.findAll(); + } + + public Optional getProspectByID(String _id) { + return prospectRepository.findById(_id); + } + + public ProspectEntity saveOrUpdateProspect(ProspectEntity prospect) { + return prospectRepository.save(prospect); + } + + public Optional deleteProspectById(String _id) { + return prospectRepository.findById(_id).flatMap(prospect -> { + prospectRepository.deleteById(prospect.get_id()); + return Optional.of(prospect); + }); + } + + public boolean trigramExist(String trigramme) { + return prospectRepository.existsByTrigramme(trigramme); + } +} diff --git a/backend/src/main/java/com/epsyl/eps/services/UserServices.java b/backend/src/main/java/com/epsyl/eps/services/UserServices.java new file mode 100644 index 0000000..02b5225 --- /dev/null +++ b/backend/src/main/java/com/epsyl/eps/services/UserServices.java @@ -0,0 +1,35 @@ +package com.epsyl.eps.services; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.epsyl.eps.entities.UserEntity; +import com.epsyl.eps.repositories.UserRepository; + +@Service +public class UserServices { + @Autowired + private UserRepository userRepository; + + public Optional getUserByID(String userId) { + return this.userRepository.findById(userId); + } + + public Iterable listAll() { + return this.userRepository.findAll(); + } + + public UserEntity saveOrUpdateUser(UserEntity user) { + return this.userRepository.save(user); + } + + public Optional deleteUser(String _id) { + return this.userRepository.findById(_id).flatMap(user -> { + userRepository.deleteById(user.get_id()); + return Optional.of(user); + }); + } + +} diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties new file mode 100644 index 0000000..300b5ae --- /dev/null +++ b/backend/src/main/resources/application.properties @@ -0,0 +1,24 @@ +spring.application.name=Epsyl Prospects Service +server.port=8089 + +# MongoDB server +spring.data.mongodb.host=localhost +spring.data.mongodb.port=27017 +spring.data.mongodb.database=eps +spring.jackson.default-property-inclusion=NON_NULL + +# Multipart upload +spring.servlet.multipart.enabled=true +spring.servlet.multipart.max-file-size=10MB +spring.servlet.multipart.max-request-size=10MB +spring.servlet.multipart.file-size-threshold=10MB + +# Spring Security +# spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:4200/auth +# spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http + +# App properties +epsyl.eps.jwtCookieName=Epsyl-alcen +epsyl.eps.jwtSecret= ***===Epsyl-alcen===*** +epsyl.eps.jwtExpirationMs=86400000 + diff --git a/backend/src/test/java/com/epsyl/eps/EpsylProspectsServiceApplicationTests.java b/backend/src/test/java/com/epsyl/eps/EpsylProspectsServiceApplicationTests.java new file mode 100644 index 0000000..02bd249 --- /dev/null +++ b/backend/src/test/java/com/epsyl/eps/EpsylProspectsServiceApplicationTests.java @@ -0,0 +1,13 @@ +package com.epsyl.eps; + +// import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class EpsylProspectsServiceApplicationTests { + + // @Test + // void contextLoads() { + // } + +} diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000..08bd214 --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,20 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false + +[cases.ts] +trim_trailing_whitespace = false diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json new file mode 100644 index 0000000..c816728 --- /dev/null +++ b/frontend/.eslintrc.json @@ -0,0 +1,53 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "tsconfig.json" + ], + "createDefaultProgram": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "eps", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "eps", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended", + "plugin:@angular-eslint/template/accessibility" + ], + "rules": {} + } + ] +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..c5f56ce --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,43 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings +.nx + +# System files +.DS_Store +Thumbs.db diff --git a/frontend/.gitlab-ci.yml b/frontend/.gitlab-ci.yml new file mode 100644 index 0000000..955d9bf --- /dev/null +++ b/frontend/.gitlab-ci.yml @@ -0,0 +1,88 @@ +stages: + - build + - quality + - test + - deploy + +job_0: + stage: build + image: node:20-alpine + tags: + - docker + script: + - echo "Build stage docker image" + - node --version + +job_1: + stage: build + script: + - echo "Build stage" + - npm install --prefer-offline + - echo "Hello, $GITLAB_USER_LOGIN!" + cache: + key: ${CI_COMMIT_REF_SLUG} + paths: + - node_modules + +lint: + stage: quality + needs: + - job_1 + script: + - npm run lint + cache: + key: ${CI_COMMIT_REF_SLUG} + paths: + - node_modules + policy: pull + +test-job1: + stage: test + needs: + - job_1 + script: + - echo "This job tests something" + +test-job2: + stage: test + needs: + - job_1 + script: + - echo "This job tests something, but takes more time than test-job1." + - echo "After the echo commands complete, it runs the sleep command for 20 seconds" + - sleep 20 + +.deploy: + stage: deploy + variables: + NODE_ENV: production + before_script: + - echo "Deploying to $CI_ENVIRONMENT_NAME" + script: + - echo "Deploying to $CI_ENVIRONMENT_NAME" + +deploy-prod: + extends: .deploy + script: + - echo "This job deploys something from the $CI_COMMIT_BRANCH branch." + +deploy-dev: + extends: .deploy + variables: + NODE_ENV: development + script: + - echo "Deploying to $CI_ENVIRONMENT_NAME" + - echo "Making actions to deploy to dev" + - echo "Deployed to $CI_ENVIRONMENT_NAME" + +deploy-staging: + extends: .deploy + rules: + - when: manual + allow_failure: true + variables: + NODE_ENV: staging + script: + - echo "Deploying to $CI_ENVIRONMENT_NAME" + - echo "Making actions to deploy to staging" + - echo "Deployed to $CI_ENVIRONMENT_NAME" diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000..41b5438 --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 + "recommendations": [ + "angular.ng-template", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ] +} diff --git a/frontend/.vscode/launch.json b/frontend/.vscode/launch.json new file mode 100644 index 0000000..925af83 --- /dev/null +++ b/frontend/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ng serve", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: start", + "url": "http://localhost:4200/" + }, + { + "name": "ng test", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: test", + "url": "http://localhost:9876/debug.html" + } + ] +} diff --git a/frontend/.vscode/tasks.json b/frontend/.vscode/tasks.json new file mode 100644 index 0000000..a298b5b --- /dev/null +++ b/frontend/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + } + ] +} diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..2ceb61e --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,48 @@ +# Epsyl Prospects Service (EPS) + +## Description +Logiciel de gestion des prospects. + + +## Visuals +Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. + +## Installation +Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. + +## Usage +Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. + +## Support +Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. + +## Roadmap +If you have ideas for releases in the future, it is a good idea to list them in the README. + +## Contributing +State if you are open to contributions and what your requirements are for accepting them. + +For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. + +You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. + +## Authors and acknowledgment +* [Rodolphe Lassalle](rlassalle@epsyl-alcen.com) + +## License +Open source project. + +[Spring Boot + Angular + MongoDB Rest API Tutorial!](https://github.com/H4mz44mri/TodoApp) + +## Techno + +- [Angular 17](https://angular.dev) +- [PrimeNG](https://primeng.org) +- [MongoDB](https://mongodb.com/docs) + +### A voir +- [Formly](https://formly.dev) +- [Test e2e UUV](https://orange-opensource.github.io/uuv/fr/docs/intro) + - [kata-e2e-uuv](https://github.com/e2e-test-quest/kata-e2e-uuv/) +- [Angular Auth](https://www.youtube.com/watch?v=R8a8ituFkls) +- [Spring Data MongoDB](https://www.baeldung.com/spring-data-mongodb-tutorial) diff --git a/frontend/READNO.md b/frontend/READNO.md new file mode 100644 index 0000000..6ad6056 --- /dev/null +++ b/frontend/READNO.md @@ -0,0 +1,17 @@ +# connexion-back +- dev: http://localhost:8089/api/v1 +- prod: http://localhost:8008/api/v + +## Route +- prospect: **/prospect** + - GET: **/allProspects** + - POST: **/save** + - PUT: **/edit/{id}** + - DELETE: **/delete/{id}** + +- user: **/user** + - GET by id: **/user/{id}** + - GET: **/allUsers** + - POST: **/save** + - PUT: **/edit/{id}** + - DELETE: **/delete/{id}** diff --git a/frontend/angular.json b/frontend/angular.json new file mode 100644 index 0000000..bedba1b --- /dev/null +++ b/frontend/angular.json @@ -0,0 +1,171 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "epsyl_prospects_service-front": { + "projectType": "application", + "i18n": { "sourceLocale": "fr" }, + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "eps", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/epsyl_prospects_service-front", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "node_modules/primeng/resources/themes/saga-orange/theme.css", + "node_modules/primeng/resources/primeng.min.css", + "node_modules/primeicons/primeicons.css", + "src/styles.scss" + ], + "scripts": [], + "server": "src/main.server.ts", + "prerender": true, + "ssr": { + "entry": "server.ts" + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "epsyl_prospects_service-front:build:production" + }, + "development": { + "buildTarget": "epsyl_prospects_service-front:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "epsyl_prospects_service-front:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] + } + }, + "cypress-run": { + "builder": "@cypress/schematic:cypress", + "options": { + "devServerTarget": "epsyl_prospects_service-front:serve" + }, + "configurations": { + "production": { + "devServerTarget": "epsyl_prospects_service-front:serve:production" + } + } + }, + "cypress-open": { + "builder": "@cypress/schematic:cypress", + "options": { + "watch": true, + "headless": false + } + }, + "ct": { + "builder": "@cypress/schematic:cypress", + "options": { + "devServerTarget": "epsyl_prospects_service-front:serve", + "watch": true, + "headless": false, + "testingType": "component" + }, + "configurations": { + "development": { + "devServerTarget": "epsyl_prospects_service-front:serve:development" + } + } + }, + "e2e": { + "builder": "@cypress/schematic:cypress", + "options": { + "devServerTarget": "epsyl_prospects_service-front:serve", + "watch": true, + "headless": false + }, + "configurations": { + "production": { + "devServerTarget": "epsyl_prospects_service-front:serve:production" + } + } + } + } + } + }, + "cli": { + "schematicCollections": [ + "@cypress/schematic", + "@angular-eslint/schematics", + "@schematics/angular" + ] + } +} diff --git a/frontend/cypress.config.ts b/frontend/cypress.config.ts new file mode 100644 index 0000000..4ff5d26 --- /dev/null +++ b/frontend/cypress.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'cypress' + +export default defineConfig({ + + e2e: { + 'baseUrl': 'http://localhost:4200' + }, + + + component: { + devServer: { + framework: 'angular', + bundler: 'webpack', + }, + specPattern: '**/*.cy.ts' + } + +}) \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..c5947b5 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,14702 @@ +{ + "name": "epsyl-prospects-service-front", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "epsyl-prospects-service-front", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^17.3.0", + "@angular/common": "^17.3.0", + "@angular/compiler": "^17.3.0", + "@angular/core": "^17.3.0", + "@angular/forms": "^17.3.0", + "@angular/platform-browser": "^17.3.0", + "@angular/platform-browser-dynamic": "^17.3.0", + "@angular/platform-server": "^17.3.0", + "@angular/router": "^17.3.0", + "@angular/ssr": "^17.3.5", + "express": "^4.18.2", + "primeflex": "^3.3.1", + "primeicons": "^7.0.0", + "primeng": "^17.14.1", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.3" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.3.5", + "@angular-eslint/builder": "17.3.0", + "@angular-eslint/eslint-plugin": "17.3.0", + "@angular-eslint/eslint-plugin-template": "17.3.0", + "@angular-eslint/schematics": "17.3.0", + "@angular-eslint/template-parser": "17.3.0", + "@angular/cli": "^17.3.5", + "@angular/compiler-cli": "^17.3.0", + "@angular/localize": "^17.3.5", + "@cypress/schematic": "^2.5.1", + "@types/express": "^4.17.17", + "@types/jasmine": "~5.1.0", + "@types/node": "^18.18.0", + "@typescript-eslint/eslint-plugin": "7.2.0", + "@typescript-eslint/parser": "7.2.0", + "eslint": "^8.57.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.4.2" + } + }, + "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, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1703.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.5.tgz", + "integrity": "sha512-j3+9QeXIafuRMtk7N5Cmm/IiMSS/TOaybzfCv/LK+DP3hjEd8f8Az7hPmevUuOArvWNzUvoUeu30GmR3wABydA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.5", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.5.tgz", + "integrity": "sha512-Ju2MkMidJglJq/iWgM9CNbhK7A/2n0LNYPZx+ucb+aOFWvurCQrU4Mt/es6xCsxOEs5OPhjqdva8mxE5FHwzTQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1703.5", + "@angular-devkit/build-webpack": "0.1703.5", + "@angular-devkit/core": "17.3.5", + "@babel/core": "7.24.0", + "@babel/generator": "7.23.6", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.6", + "@babel/plugin-transform-async-generator-functions": "7.23.9", + "@babel/plugin-transform-async-to-generator": "7.23.3", + "@babel/plugin-transform-runtime": "7.24.0", + "@babel/preset-env": "7.24.0", + "@babel/runtime": "7.24.0", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "17.3.5", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.18", + "babel-loader": "9.1.3", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.22", + "css-loader": "6.10.0", + "esbuild-wasm": "0.20.1", + "fast-glob": "3.3.2", + "http-proxy-middleware": "2.0.6", + "https-proxy-agent": "7.0.4", + "inquirer": "9.2.15", + "jsonc-parser": "3.2.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.0", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.8", + "mini-css-extract-plugin": "2.8.1", + "mrmime": "2.0.0", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.1", + "piscina": "4.4.0", + "postcss": "8.4.35", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.71.1", + "sass-loader": "14.1.1", + "semver": "7.6.0", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.29.1", + "tree-kill": "1.2.2", + "tslib": "2.6.2", + "undici": "6.11.1", + "vite": "5.1.7", + "watchpack": "2.4.0", + "webpack": "5.90.3", + "webpack-dev-middleware": "6.1.2", + "webpack-dev-server": "4.15.1", + "webpack-merge": "5.10.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.20.1" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "@angular/localize": "^17.0.0", + "@angular/platform-server": "^17.0.0", + "@angular/service-worker": "^17.0.0", + "@web/test-runner": "^0.18.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^17.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.2 <5.5" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1703.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.5.tgz", + "integrity": "sha512-KcoKlWhDP6+2q3laQ6elXLt2QrVxWJFdCPUC9dIm0Tnc997Tal/UVhlDKaZgITYDgDvRFqG+tzNm2uFd8l7h+A==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1703.5", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.5.tgz", + "integrity": "sha512-iqGv45HVI+yRROoTqQTY0QChYlRCZkFUfIjdfJLegjc6xq9sLtxDr03CWM45BKGG5lSxDOy+qu/pdRvtL3V2eg==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.5.tgz", + "integrity": "sha512-oh/mvpMKxGfk5v9QIB7LfGsDC/iVpmsIAvbb4+1ddCx86EJXdz3xWnVDbUehOd6n7HJXnQrNirWjWvWquM2GhQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.5", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-eslint/builder": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-17.3.0.tgz", + "integrity": "sha512-JXSZE7+KA3UGU6jwc0v9lwOIMptosrvLIOXGlXqrhHWEXfkfu3ENPq1Lm3K8jLndQ57XueEhC+Nab/AuUiWA/Q==", + "dev": true, + "dependencies": { + "@nx/devkit": "^17.2.8 || ^18.0.0", + "nx": "^17.2.8 || ^18.0.0" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.3.0.tgz", + "integrity": "sha512-ejfNzRuBeHUV8m2fkgs+M809rj5STuCuQo4fdfc6ccQpzXDI6Ha7BKpTznWfg5g529q/wrkoGSGgFxU9Yc2/dQ==", + "dev": true + }, + "node_modules/@angular-eslint/eslint-plugin": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-17.3.0.tgz", + "integrity": "sha512-81cQbOEPoQupFX8WmpqZn+y8VA7JdVRGBtt+uJNKBXcJknTpPWdLBZRFlgVakmC24iEZ0Fint/N3NBBQI3mz2A==", + "dev": true, + "dependencies": { + "@angular-eslint/utils": "17.3.0", + "@typescript-eslint/utils": "7.2.0" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.3.0.tgz", + "integrity": "sha512-9l/aRfpE9MCRVDWRb+rSB9Zei0paep1vqV6M/87VUnzBnzqeMRnVuPvQowilh2zweVSGKBF25Vp4HkwOL6ExDQ==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "17.3.0", + "@angular-eslint/utils": "17.3.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "aria-query": "5.3.0", + "axobject-query": "4.0.0" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/schematics": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-17.3.0.tgz", + "integrity": "sha512-5yssd5EOomxlKt9vN/OXXCTCuI3Pmfj16pkjBDoW0wzC8/M2l5zlXIEfoKumHYv2wtF553LhaMXVYVU35e0lTw==", + "dev": true, + "dependencies": { + "@angular-eslint/eslint-plugin": "17.3.0", + "@angular-eslint/eslint-plugin-template": "17.3.0", + "@nx/devkit": "^17.2.8 || ^18.0.0", + "ignore": "5.3.1", + "nx": "^17.2.8 || ^18.0.0", + "strip-json-comments": "3.1.1", + "tmp": "0.2.3" + }, + "peerDependencies": { + "@angular/cli": ">= 17.0.0 < 18.0.0" + } + }, + "node_modules/@angular-eslint/schematics/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@angular-eslint/template-parser": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-17.3.0.tgz", + "integrity": "sha512-m+UzAnWgtjeS0x6skSmR0eXltD/p7HZA+c8pPyAkiHQzkxE7ohhfyZc03yWGuYJvWQUqQAKKdO/nQop14TP0bg==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "17.3.0", + "eslint-scope": "^8.0.0" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", + "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "dev": true, + "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/@angular-eslint/template-parser/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, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@angular-eslint/utils": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.3.0.tgz", + "integrity": "sha512-PJT9pxWqpvI9OXO+7L5SIVhvMW+RFjeafC7PYjtvSbNFpz+kF644BiAcfMJ0YqBnkrw3JXt+RAX25CT4mXIoXw==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "17.3.0", + "@typescript-eslint/utils": "7.2.0" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular/animations": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.5.tgz", + "integrity": "sha512-hbfCnBxwhYQMKB+9tDcmfvckUtB8LdY1gPST6TZ7CzrWCSPddsnXxqxBZSBjBI6zXvE4FOV3kUzaUXM/Bq5sRw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.3.5" + } + }, + "node_modules/@angular/cli": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.5.tgz", + "integrity": "sha512-6MHJzPKy4uB9qlJO1eKs4rtDlRuCe0lOiz1f3kHFZ/GQQm5xA1xsmZJMN4ASsnu4yU3oZs6vJ/vt8i2/jvdPbA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1703.5", + "@angular-devkit/core": "17.3.5", + "@angular-devkit/schematics": "17.3.5", + "@schematics/angular": "17.3.5", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.2", + "inquirer": "9.2.15", + "jsonc-parser": "3.2.1", + "npm-package-arg": "11.0.1", + "npm-pick-manifest": "9.0.0", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "17.0.6", + "resolve": "1.22.8", + "semver": "7.6.0", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.5.tgz", + "integrity": "sha512-Ox91WxSnOSrQ6I21cHi69EfT2Pxtd5Knb5AsdwpxqE57V2E7EnWMhb+LP+holCtFUhK529EGXCk788M+Elyw6g==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.3.5", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.5.tgz", + "integrity": "sha512-lTubBFNlpH9zK46+yeVI7VJQNUELLAB8W1ucndYLCA9Rr9Jop+rYIXijmr42AGokOYr7yLc8HRiSQ5e+X2pUQg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.3.5" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.5.tgz", + "integrity": "sha512-R53JNbbVDHWSGdL0e2vGQ5iJCrILOWZ1oemKjekOFB93fUBlEyi+nZmm4uTO7RU8PgjB0UpxI6ok5ZE3Amkt6A==", + "dev": true, + "dependencies": { + "@babel/core": "7.23.9", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/compiler": "17.3.5", + "typescript": ">=5.2 <5.5" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "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/@angular/compiler-cli/node_modules/@babel/core/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 + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/core": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.5.tgz", + "integrity": "sha512-y6P27lcrKy3yMx/rtMuGsAnDyVEsS3BdyArTXcD0TOImVGHhVIaB0L95DUCam3ajTe2f2x39eozJZDh7QSpJaw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.14.0" + } + }, + "node_modules/@angular/forms": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.5.tgz", + "integrity": "sha512-Rf/8XWHdFYZQaOVTJ0QVwxQm9fDqQqIJc0yfPcH/DYL5pT7R0U2z98I5McZawzUBJUo1Zt1gijzDlzNUGf6jiA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.3.5", + "@angular/core": "17.3.5", + "@angular/platform-browser": "17.3.5", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/localize": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.3.5.tgz", + "integrity": "sha512-/5iKRvnleA2vsf8zqNZaXeOBjFFq3FLrbot+ygfmk3uYqz949X0nXrXBKk9kpakw/WC6kgzK+tmiEHKQY6cLiQ==", + "dev": true, + "dependencies": { + "@babel/core": "7.23.9", + "@types/babel__core": "7.20.5", + "fast-glob": "3.3.2", + "yargs": "^17.2.1" + }, + "bin": { + "localize-extract": "tools/bundles/src/extract/cli.js", + "localize-migrate": "tools/bundles/src/migrate/cli.js", + "localize-translate": "tools/bundles/src/translate/cli.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/compiler": "17.3.5", + "@angular/compiler-cli": "17.3.5" + } + }, + "node_modules/@angular/localize/node_modules/@babel/core": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "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/@angular/localize/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 + }, + "node_modules/@angular/localize/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/platform-browser": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.5.tgz", + "integrity": "sha512-ITlu/GTD64Sr0FMaFCJiHoTJrEZw8qRFXjPjv3BKhAp5dQKcwnCm02o1NOaj5d8oIItIh5fbI2zP0CSU2qNZkQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/animations": "17.3.5", + "@angular/common": "17.3.5", + "@angular/core": "17.3.5" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.5.tgz", + "integrity": "sha512-KuS4j3Gh1h/CEj+bIOc/IcZIdiCB/DNbtUvz1eNp1o23aM8QutqelI3A4WBnQuR4yq8Z/8M3FH9F1OVwwhn2QQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.3.5", + "@angular/compiler": "17.3.5", + "@angular/core": "17.3.5", + "@angular/platform-browser": "17.3.5" + } + }, + "node_modules/@angular/platform-server": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-17.3.5.tgz", + "integrity": "sha512-cQRM+sj4NJZi6udXuoFowWIFLlHwUzNfS3WITbYw4iAI1qRgkVZctbA2aKU6lZg43lEDmts9TOqFB1smUXsdVA==", + "dependencies": { + "tslib": "^2.3.0", + "xhr2": "^0.2.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/animations": "17.3.5", + "@angular/common": "17.3.5", + "@angular/compiler": "17.3.5", + "@angular/core": "17.3.5", + "@angular/platform-browser": "17.3.5" + } + }, + "node_modules/@angular/router": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.3.5.tgz", + "integrity": "sha512-KsIIs3t9IpxsdMSrJDZzO5WgIWkVE6Ep5WWiSyPIgEfA+ndGpJLmyv0d/r1yKKlYUJxz7Hde55o4thgT2n2x/A==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.3.5", + "@angular/core": "17.3.5", + "@angular/platform-browser": "17.3.5", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/ssr": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-17.3.5.tgz", + "integrity": "sha512-MBKrIq3w6inFGVjZoCsXRiTYomell6DSLbUUQfvphTN1ExUzbcFvxWoM1p69KmIWqxWlUAECl3sV/cesSeNGRg==", + "dependencies": { + "critters": "0.0.22", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^17.0.0", + "@angular/core": "^17.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.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/core/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 + }, + "node_modules/@babel/core/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", + "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", + "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", + "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", + "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.24.0", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", + "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cypress/schematic": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-2.5.1.tgz", + "integrity": "sha512-tO2lUnr5C0udB4xpewndlTMkEHHdgyvSNLI9+bTdYbxCby8MlxrFpewxmqPIfH21ZmOQP8XghD5uMd3l732ESA==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "rxjs": "~6.6.0" + }, + "peerDependencies": { + "@angular/cli": ">=14", + "@angular/core": ">=14" + } + }, + "node_modules/@cypress/schematic/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@cypress/schematic/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", + "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", + "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", + "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", + "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", + "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", + "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", + "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", + "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", + "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", + "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", + "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", + "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", + "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", + "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", + "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", + "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", + "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", + "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", + "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", + "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", + "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", + "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.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": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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, + "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/@eslint/eslintrc/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 + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/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 + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "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, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "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/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/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/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@ngtools/webpack": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.5.tgz", + "integrity": "sha512-0heI0yHUckdGI8uywu/wkp24KR/tdYMKYJOaYIU+9JydyN1zJRpbR7x0thddl7+k/zu2ZGbfFdv1779Ecw/xdA==", + "dev": true, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "typescript": ">=5.2 <5.5", + "webpack": "^5.54.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, + "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, + "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, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.6.tgz", + "integrity": "sha512-4x/182sKXmQkf0EtXxT26GEsaOATpD7WVtza5hrYivWZeo6QefC6xq9KAXrnjtFKBZ4rZwR7aX/zClYYXgtwLw==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.3.tgz", + "integrity": "sha512-cgsjCvld2wMqkUqvY+SZI+1ZJ7umGBYc9IAKfqJRKJCcs7hCQYxScUgdsyrRINk3VmdCYf9TXiLBHQ6ECTxhtg==", + "dev": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", + "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", + "dev": true, + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", + "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", + "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nrwl/devkit": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-18.3.4.tgz", + "integrity": "sha512-Fty9Huqm12OYueU3uLJl3uvBUl5BvEyPfvw8+rLiNx9iftdEattM8C+268eAbIRRSLSOVXlWsJH4brlc6QZYYw==", + "dev": true, + "dependencies": { + "@nx/devkit": "18.3.4" + } + }, + "node_modules/@nrwl/tao": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-18.3.4.tgz", + "integrity": "sha512-+7KsDYmGj1cvNaXZcjSYOPN1h17hsGFBtVX7MqnpJLLkQTUhKg2rQxqyluzshJ+RoDUVtYPGyHg1AizlB66RIA==", + "dev": true, + "dependencies": { + "nx": "18.3.4", + "tslib": "^2.3.0" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@nx/devkit": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-18.3.4.tgz", + "integrity": "sha512-M3htxl5WvlNKK5KNOndCAApbyBCZNTFFs+rtdwvudNZk5+84zAAPaWzSoX9C4XLAW78/f98LzF68/ch05aN12A==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "18.3.4", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "nx": ">= 16 <= 19" + } + }, + "node_modules/@nx/devkit/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@nx/nx-darwin-arm64": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.3.4.tgz", + "integrity": "sha512-MOGk9z4fIoOkJB68diH3bwoWrC8X9IzMNsz1mu0cbVfgCRAfIV3b+lMsiwQYzWal3UWW5DE5Rkss4F8whiV5Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-darwin-x64": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-18.3.4.tgz", + "integrity": "sha512-tSzPRnNB3QdPM+KYiIuRCUtyCwcuIRC95FfP0ZB3WvfDeNxJChEAChNqmCMDE4iFvZhGuze8WqkJuIVdte+lyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.3.4.tgz", + "integrity": "sha512-bjSPak/d+bcR95/pxHMRhnnpHc6MnrQcG6f5AjX15Esm4JdrdQKPBmG1RybuK0WKSyD5wgVhkAGc/QQUom9l8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.3.4.tgz", + "integrity": "sha512-/1HnUL7jhH0S7PxJqf6R1pk3QlAU22GY89EQV9fd+RDUtp7IyzaTlkebijTIqfxlSjC4OO3bPizaxEaxdd3uKQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.3.4.tgz", + "integrity": "sha512-g/2IaB2bZTKaBNPEf9LxtIXb1XHdhh3VO9PnePIrwkkixPMLN0dTxT5Sttt75lvLP3EU1AUR5w3Aaz2Q1mYtWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.3.4.tgz", + "integrity": "sha512-MgfKLoEF6I1cCS+0ooFLEjJSSVdCYyCT9Q96IHRJntAEL8u/0GR2OUoBoLC+q1lnbIkJr/uqTJxA2Jh+sJTIbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.3.4.tgz", + "integrity": "sha512-vbHxv7m3gjthBvw50EYCtgyY0Zg5nVTaQtX+wRsmKybV2i7wHbw5zIe1aL4zHUm6TcPGbIQK+utVM+hyCqKHVA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.3.4.tgz", + "integrity": "sha512-qIJKJCYFRLVSALsvg3avjReOjuYk91Q0hFXMJ2KaEM1Y3tdzcFN0fKBiaHexgbFIUk8zJuS4dJObTqSYMXowbg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.3.4.tgz", + "integrity": "sha512-UxC8mRkFTPdZbKFprZkiBqVw8624xU38kI0xyooxKlFpt5lccTBwJ0B7+R8p1RoWyvh2DSyFI9VvfD7lczg1lA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.3.4.tgz", + "integrity": "sha512-/RqEjNU9hxIBxRLafCNKoH3SaB2FShf+1ZnIYCdAoCZBxLJebDpnhiyrVs0lPnMj9248JbizEMdJj1+bs/bXig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "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/@rollup/rollup-android-arm-eabi": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz", + "integrity": "sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz", + "integrity": "sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.3.tgz", + "integrity": "sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz", + "integrity": "sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz", + "integrity": "sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz", + "integrity": "sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz", + "integrity": "sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz", + "integrity": "sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz", + "integrity": "sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz", + "integrity": "sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz", + "integrity": "sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz", + "integrity": "sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz", + "integrity": "sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz", + "integrity": "sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz", + "integrity": "sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz", + "integrity": "sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "17.3.5", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.5.tgz", + "integrity": "sha512-SWCK16Eob0K86hpZ3NHmrTS6LSzTlhvnIdf3BXC6nzoiyDhcAS0oJ2Tjdq1opW/PaL1hB7MulcbIhxYln5du0w==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.5", + "@angular-devkit/schematics": "17.3.5", + "jsonc-parser": "3.2.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.1.tgz", + "integrity": "sha512-eqV17lO3EIFqCWK3969Rz+J8MYrRZKw9IBHpSo6DEcEX2c+uzDFOgHE9f2MnyDpfs48LFO4hXmk9KhQ74JzU1g==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.1.tgz", + "integrity": "sha512-aIL8Z9NsMr3C64jyQzE0XlkEyBLpgEJJFDHLVVStkFV5Q3Il/r/YtY6NJWKQ4cy4AE7spP1IX5Jq7VCAxHHMfQ==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.0.tgz", + "integrity": "sha512-tsAyV6FC3R3pHmKS880IXcDJuiFJiKITO1jxR1qbplcsBkZLBmjrEw5GbC7ikD6f5RU1hr7WnmxB/2kKc1qUWQ==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.3.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.2.tgz", + "integrity": "sha512-mwbY1VrEGU4CO55t+Kl6I7WZzIl+ysSzEYdA1Nv/FTrl2bkeaPXo5PnWZAVfcY2zSdhOpsUTJW67/M2zHXGn5w==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.0", + "tuf-js": "^2.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.0.tgz", + "integrity": "sha512-hQF60nc9yab+Csi4AyoAmilGNfpXT+EXdBgFkP9OgPwIBPwyqVf7JAWPtmqrrrneTmAT6ojv7OlH1f6Ix5BG4Q==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.1.tgz", + "integrity": "sha512-dzJtaDAAoXx4GCOJpbB2eG/Qj8VDpdwkLsWGzGm+0L7E8/434RyMbAHmk9ubXWVAb9nXmc44jUf8GKqVDiKezg==", + "dev": true + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", + "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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, + "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.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "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, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", + "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", + "dev": true + }, + "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 + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "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/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@zkochan/js-yaml/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 + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "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, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "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": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "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==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.1", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "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 + }, + "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==", + "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" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "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.11.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==", + "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==" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "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==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "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 + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001611", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz", + "integrity": "sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==", + "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" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/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 + }, + "node_modules/cliui/node_modules/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/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "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 + }, + "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==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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 + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/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==", + "dev": true + }, + "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 + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "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==" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/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, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", + "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "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==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/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 + }, + "node_modules/cosmiconfig/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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.22.tgz", + "integrity": "sha512-NU7DEcQZM2Dy8XTKFHxtdnIM/drE312j2T4PCVaSUcS0oBeyT/NImpRw/Ap0zOr/1SE7SgPK9tGPg1WK/sVakw==", + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "postcss-media-query-parser": "^0.2.3" + } + }, + "node_modules/critters/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/critters/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/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==" + }, + "node_modules/critters/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/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, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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 + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "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==", + "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==", + "dev": true, + "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==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", + "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "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/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==" + }, + "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, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.740", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.740.tgz", + "integrity": "sha512-Yvg5i+iyv7Xm18BRdVPVm8lc7kgxM3r6iwqCH2zB7QZy1kZRNmd0Zqm0zcD9XoFREE5/5rwIuIAOT+/mzGcnZg==", + "dev": true + }, + "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/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/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, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", + "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.1", + "@esbuild/android-arm": "0.20.1", + "@esbuild/android-arm64": "0.20.1", + "@esbuild/android-x64": "0.20.1", + "@esbuild/darwin-arm64": "0.20.1", + "@esbuild/darwin-x64": "0.20.1", + "@esbuild/freebsd-arm64": "0.20.1", + "@esbuild/freebsd-x64": "0.20.1", + "@esbuild/linux-arm": "0.20.1", + "@esbuild/linux-arm64": "0.20.1", + "@esbuild/linux-ia32": "0.20.1", + "@esbuild/linux-loong64": "0.20.1", + "@esbuild/linux-mips64el": "0.20.1", + "@esbuild/linux-ppc64": "0.20.1", + "@esbuild/linux-riscv64": "0.20.1", + "@esbuild/linux-s390x": "0.20.1", + "@esbuild/linux-x64": "0.20.1", + "@esbuild/netbsd-x64": "0.20.1", + "@esbuild/openbsd-x64": "0.20.1", + "@esbuild/sunos-x64": "0.20.1", + "@esbuild/win32-arm64": "0.20.1", + "@esbuild/win32-ia32": "0.20.1", + "@esbuild/win32-x64": "0.20.1" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.20.1.tgz", + "integrity": "sha512-6v/WJubRsjxBbQdz6izgvx7LsVFvVaGmSdwrFHmEzoVgfXL89hkKPoQHsnVI2ngOkcBUQT9kmAM1hVL1k/Av4A==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "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==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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, + "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/eslint/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/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 + }, + "node_modules/eslint/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, + "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/eslint/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/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 + }, + "node_modules/eslint/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/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, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/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 + }, + "node_modules/eslint/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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/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, + "engines": { + "node": ">=4.0" + } + }, + "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, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/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, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "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, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "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" + } + }, + "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==", + "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==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "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.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "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 + }, + "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 + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "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, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "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==", + "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==" + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/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/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "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, + "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==", + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "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 + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "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==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/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==", + "dev": true, + "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/hpack.js/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==", + "dev": true + }, + "node_modules/hpack.js/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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "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/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "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==", + "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-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "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/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", + "dev": true, + "dependencies": { + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, + "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==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "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, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "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-report/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", + "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/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, + "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/jake/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/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 + }, + "node_modules/jake/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jasmine-core": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", + "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", + "dev": true + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/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, + "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/jest-diff/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/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 + }, + "node_modules/jest-diff/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "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 + }, + "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, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/karma": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz", + "integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", + "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", + "dev": true + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/karma/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 + }, + "node_modules/karma/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/karma/node_modules/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/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "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 + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/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, + "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/log-symbols/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/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 + }, + "node_modules/log-symbols/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "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-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dev": true, + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "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, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", + "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "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 + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/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, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", + "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dev": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", + "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", + "dev": true, + "dependencies": { + "@npmcli/redact": "^1.1.0", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nx": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/nx/-/nx-18.3.4.tgz", + "integrity": "sha512-7rOHRyxpnZGJ3pHnwmpoAMHt9hNuwibWhOhPBJDhJVcbQJtGfwcWWyV/iSEnVXwKZ2lfHVE3TwE+gXFdT/GFiw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nrwl/tao": "18.3.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.6.0", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "semver": "^7.5.3", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "18.3.4", + "@nx/nx-darwin-x64": "18.3.4", + "@nx/nx-freebsd-x64": "18.3.4", + "@nx/nx-linux-arm-gnueabihf": "18.3.4", + "@nx/nx-linux-arm64-gnu": "18.3.4", + "@nx/nx-linux-arm64-musl": "18.3.4", + "@nx/nx-linux-x64-gnu": "18.3.4", + "@nx/nx-linux-x64-musl": "18.3.4", + "@nx/nx-win32-arm64-msvc": "18.3.4", + "@nx/nx-win32-x64-msvc": "18.3.4" + }, + "peerDependencies": { + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/nx/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 + }, + "node_modules/nx/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/nx/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, + "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/nx/node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nx/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/nx/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 + }, + "node_modules/nx/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/nx/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/nx/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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/nx/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/nx/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/nx/node_modules/lines-and-columns": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/nx/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/nx/node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nx/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nx/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/nx/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, + "engines": { + "node": ">= 10.0.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "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==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "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/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/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, + "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/ora/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/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 + }, + "node_modules/ora/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", + "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", + "dev": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "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, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?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==", + "engines": { + "node": ">= 0.8" + } + }, + "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, + "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==", + "dev": true, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.4.0.tgz", + "integrity": "sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==", + "dev": true, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "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, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/primeflex": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-3.3.1.tgz", + "integrity": "sha512-zaOq3YvcOYytbAmKv3zYc+0VNS9Wg5d37dfxZnveKBFPr7vEIwfV5ydrpiouTft8MVW6qNjfkaQphHSnvgQbpQ==" + }, + "node_modules/primeicons": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-7.0.0.tgz", + "integrity": "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==" + }, + "node_modules/primeng": { + "version": "17.14.1", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-17.14.1.tgz", + "integrity": "sha512-hjJzjiNZR0+zCEbvLidXYzJriwgxj4vTBMTmmw9JP5b17mO3Ruhv7h4ofEThpnc1LyE0W91f8jC+Q/Kg2Xuqrw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/forms": "^17.0.0", + "rxjs": "^6.0.0 || ^7.8.1", + "zone.js": "~0.14.0" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "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==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "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" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "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==", + "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==", + "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-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/read-package-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", + "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.3.tgz", + "integrity": "sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.14.3", + "@rollup/rollup-android-arm64": "4.14.3", + "@rollup/rollup-darwin-arm64": "4.14.3", + "@rollup/rollup-darwin-x64": "4.14.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.14.3", + "@rollup/rollup-linux-arm-musleabihf": "4.14.3", + "@rollup/rollup-linux-arm64-gnu": "4.14.3", + "@rollup/rollup-linux-arm64-musl": "4.14.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.14.3", + "@rollup/rollup-linux-riscv64-gnu": "4.14.3", + "@rollup/rollup-linux-s390x-gnu": "4.14.3", + "@rollup/rollup-linux-x64-gnu": "4.14.3", + "@rollup/rollup-linux-x64-musl": "4.14.3", + "@rollup/rollup-win32-arm64-msvc": "4.14.3", + "@rollup/rollup-win32-ia32-msvc": "4.14.3", + "@rollup/rollup-win32-x64-msvc": "4.14.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.1.tgz", + "integrity": "sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true, + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "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==", + "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==" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/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==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.0.tgz", + "integrity": "sha512-q+o8L2ebiWD1AxD17eglf1pFrl9jtW7FHa0ygqY6EKvibK8JHyq9Z26v9MZXeDiw+RbfOJ9j2v70M10Hd6E06A==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "@sigstore/sign": "^2.3.0", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz", + "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==", + "dev": true, + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/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/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, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "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/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/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-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-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/terser": { + "version": "5.29.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", + "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/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, + "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/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/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 + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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, + "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==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tuf-js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", + "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "2.0.0", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.37.tgz", + "integrity": "sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/undici": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.11.1.tgz", + "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==", + "dev": true, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "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, + "dependencies": { + "punycode": "^2.1.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==", + "dev": true + }, + "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==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz", + "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.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": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.2.tgz", + "integrity": "sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "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/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/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, + "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/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/webpack/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 + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/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 + }, + "node_modules/wrap-ansi/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/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 + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "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/xhr2": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", + "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.4.tgz", + "integrity": "sha512-NtTUvIlNELez7Q1DzKVIFZBzNb646boQMgpATo9z3Ftuu/gWvzxCW7jdjcUDoRGxRikrhVHB/zLXh1hxeJawvw==", + "dependencies": { + "tslib": "^2.3.0" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..04f7a23 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,59 @@ +{ + "name": "epsyl-prospects-service-front", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "serve:ssr:epsyl_prospects_service-front": "node dist/epsyl_prospects_service-front/server/server.mjs", + "lint": "lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "^17.3.0", + "@angular/common": "^17.3.0", + "@angular/compiler": "^17.3.0", + "@angular/core": "^17.3.0", + "@angular/forms": "^17.3.0", + "@angular/platform-browser": "^17.3.0", + "@angular/platform-browser-dynamic": "^17.3.0", + "@angular/platform-server": "^17.3.0", + "@angular/router": "^17.3.0", + "@angular/ssr": "^17.3.5", + "express": "^4.18.2", + "primeflex": "^3.3.1", + "primeicons": "^7.0.0", + "primeng": "^17.14.1", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.3" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.3.5", + "@angular-eslint/builder": "17.3.0", + "@angular-eslint/eslint-plugin": "17.3.0", + "@angular-eslint/eslint-plugin-template": "17.3.0", + "@angular-eslint/schematics": "17.3.0", + "@angular-eslint/template-parser": "17.3.0", + "@angular/cli": "^17.3.5", + "@angular/compiler-cli": "^17.3.0", + "@angular/localize": "^17.3.5", + "@cypress/schematic": "^2.5.1", + "@types/express": "^4.17.17", + "@types/jasmine": "~5.1.0", + "@types/node": "^18.18.0", + "@typescript-eslint/eslint-plugin": "7.2.0", + "@typescript-eslint/parser": "7.2.0", + "eslint": "^8.57.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.4.2" + } +} diff --git a/frontend/server.ts b/frontend/server.ts new file mode 100644 index 0000000..7083b14 --- /dev/null +++ b/frontend/server.ts @@ -0,0 +1,56 @@ +import { APP_BASE_HREF } from '@angular/common'; +import { CommonEngine } from '@angular/ssr'; +import express from 'express'; +import { fileURLToPath } from 'node:url'; +import { dirname, join, resolve } from 'node:path'; +import bootstrap from './src/main.server'; + +// The Express app is exported so that it can be used by serverless Functions. +export function app(): express.Express { + const server = express(); + const serverDistFolder = dirname(fileURLToPath(import.meta.url)); + const browserDistFolder = resolve(serverDistFolder, '../browser'); + const indexHtml = join(serverDistFolder, 'index.server.html'); + + const commonEngine = new CommonEngine(); + + server.set('view engine', 'html'); + server.set('views', browserDistFolder); + + // Example Express Rest API endpoints + // server.get('/api/**', (req, res) => { }); + // Serve static files from /browser + server.get('*.*', express.static(browserDistFolder, { + maxAge: '1y' + })); + + // All regular routes use the Angular engine + server.get('*', (req, res, next) => { + const { protocol, originalUrl, baseUrl, headers } = req; + + commonEngine + .render({ + bootstrap, + documentFilePath: indexHtml, + url: `${protocol}://${headers.host}${originalUrl}`, + publicPath: browserDistFolder, + providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }], + }) + .then((html) => res.send(html)) + .catch((err) => next(err)); + }); + + return server; +} + +function run(): void { + const port = process.env['PORT'] || 4000; + + // Start up the Node server + const server = app(); + server.listen(port, () => { + console.log(`Node Express server listening on http://localhost:${port}`); + }); +} + +run(); diff --git a/frontend/src/app/app.component.html b/frontend/src/app/app.component.html new file mode 100644 index 0000000..a3f7082 --- /dev/null +++ b/frontend/src/app/app.component.html @@ -0,0 +1,2 @@ + + diff --git a/frontend/src/app/app.component.scss b/frontend/src/app/app.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/app.component.spec.ts b/frontend/src/app/app.component.spec.ts new file mode 100644 index 0000000..fbe39ef --- /dev/null +++ b/frontend/src/app/app.component.spec.ts @@ -0,0 +1,31 @@ +import { TestBed } from '@angular/core/testing'; +import { AppComponent } from './app.component'; +import { RouterTestingModule } from '@angular/router/testing'; + +describe('AppComponent', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [RouterTestingModule], + declarations: [AppComponent], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have as title 'Epsyl Prospects Service'`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('Epsyl Prospects Service'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('Epsyl Prospects Service'); + }); +}); diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts new file mode 100644 index 0000000..18b4400 --- /dev/null +++ b/frontend/src/app/app.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; + +@Component({ + selector: 'eps-root', + standalone: true, + imports: [RouterOutlet], + templateUrl: './app.component.html', + styleUrl: './app.component.scss' +}) +export class AppComponent { + title = 'Epsyl Prospects Service'; + +} diff --git a/frontend/src/app/app.config.server.ts b/frontend/src/app/app.config.server.ts new file mode 100644 index 0000000..b4d57c9 --- /dev/null +++ b/frontend/src/app/app.config.server.ts @@ -0,0 +1,11 @@ +import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; +import { provideServerRendering } from '@angular/platform-server'; +import { appConfig } from './app.config'; + +const serverConfig: ApplicationConfig = { + providers: [ + provideServerRendering() + ] +}; + +export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts new file mode 100644 index 0000000..c131044 --- /dev/null +++ b/frontend/src/app/app.config.ts @@ -0,0 +1,17 @@ +import { ApplicationConfig, LOCALE_ID} from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; +import { provideClientHydration } from '@angular/platform-browser'; +import { provideAnimations } from '@angular/platform-browser/animations'; +import { provideHttpClient, withFetch, withInterceptorsFromDi } from '@angular/common/http'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(routes), + provideClientHydration(), + provideAnimations(), + provideHttpClient(withInterceptorsFromDi(), withFetch()), + { provide: LOCALE_ID, useValue: 'fr-FR' }, + ] +}; diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts new file mode 100644 index 0000000..4781b2b --- /dev/null +++ b/frontend/src/app/app.routes.ts @@ -0,0 +1,46 @@ +import { Routes } from '@angular/router'; +// import { inject } from '@angular/core'; + +// import { AuthentificationService } from '@eps/services/auth/authentification.service'; + +import { HomeComponent } from '@eps/shared/components/home/home.component'; +import { NotFoundComponent } from './components/notFound/not-found.component'; +import { UserComponent } from './components/user/user.component'; +import { ListProspectsComponent } from './components/prospects/list-prospects/list-prospects.component'; +// import { LoginComponent } from '@eps/components/auth/login/login.component'; +// import { AuthGuard } from './components/auth/auth.guard'; + +export const routes: Routes = [ + // { + // path: 'login', + // component: LoginComponent + // }, + { + path: '', + component: HomeComponent, + // canActivate: [AuthGuard], + children: [ + { + path: 'prospect', + component: ListProspectsComponent, + }, + { + path: 'user', + component: UserComponent, + }, + // { + // path: '', + // canMatch: [() => inject(AuthentificationService).isAuthenticated()], + // }, + + // { + // path: 'register', + // component: UserComponent, + // }, + ], + }, + { + path: '**', + component: NotFoundComponent, + }, +]; diff --git a/frontend/src/app/components/auth/auth.guard.ts b/frontend/src/app/components/auth/auth.guard.ts new file mode 100644 index 0000000..330e7ac --- /dev/null +++ b/frontend/src/app/components/auth/auth.guard.ts @@ -0,0 +1,21 @@ +import { inject, Injectable } from '@angular/core'; +// import { ActivatedRouteSnapshot, CanActivate, CanActivateFn, GuardResult, MaybeAsync, Router, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivate, GuardResult, MaybeAsync, Router, RouterStateSnapshot } from '@angular/router'; + +import { AuthService } from '@eps/service/auth/auth.service'; +// import { Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class AuthGuard implements CanActivate { + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): MaybeAsync { + console.log(route, state); + + throw new Error('Method not implemented.'); + } + + readonly authService = inject(AuthService); + readonly router = inject(Router); + +} diff --git a/frontend/src/app/components/auth/login/login.component.html b/frontend/src/app/components/auth/login/login.component.html new file mode 100644 index 0000000..bbef983 --- /dev/null +++ b/frontend/src/app/components/auth/login/login.component.html @@ -0,0 +1,50 @@ +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + +
+
+ + +
+
+
+
+
diff --git a/frontend/src/app/components/auth/login/login.component.scss b/frontend/src/app/components/auth/login/login.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/components/auth/login/login.component.ts b/frontend/src/app/components/auth/login/login.component.ts new file mode 100644 index 0000000..de1db63 --- /dev/null +++ b/frontend/src/app/components/auth/login/login.component.ts @@ -0,0 +1,23 @@ +import { Component } from "@angular/core"; + +import { DialogModule } from 'primeng/dialog'; +import { ButtonModule } from 'primeng/button'; + +@Component({ + selector: 'eps-login', + templateUrl: 'login.component.html', + styleUrl: 'login.component.scss', + standalone: true, + imports: [DialogModule, ButtonModule], +}) +export class LoginComponent { + visible: boolean = false; + + showDialog() { + this.visible = true; + } + + closeDialog() { + this.visible = false; + } +} diff --git a/frontend/src/app/components/notFound/not-found.component.html b/frontend/src/app/components/notFound/not-found.component.html new file mode 100644 index 0000000..630f05a --- /dev/null +++ b/frontend/src/app/components/notFound/not-found.component.html @@ -0,0 +1,24 @@ +
+
+
+
+ 404 +

Page inexistante

+
Retour
+ + + Retour à l'accueil + +
+
+
+
diff --git a/frontend/src/app/components/notFound/not-found.component.scss b/frontend/src/app/components/notFound/not-found.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/components/notFound/not-found.component.ts b/frontend/src/app/components/notFound/not-found.component.ts new file mode 100644 index 0000000..1690303 --- /dev/null +++ b/frontend/src/app/components/notFound/not-found.component.ts @@ -0,0 +1,13 @@ +import { Component } from "@angular/core"; +import { RouterModule } from "@angular/router"; + +@Component({ + selector: 'eps-not-found', + templateUrl: 'not-found.component.html', + styleUrl: 'not-found.component.scss', + standalone: true, + imports: [RouterModule], +}) +export class NotFoundComponent { + title = 'Page not found'; +} diff --git a/frontend/src/app/components/prospects/list-prospects/list-prospects.component.html b/frontend/src/app/components/prospects/list-prospects/list-prospects.component.html new file mode 100644 index 0000000..c72b815 --- /dev/null +++ b/frontend/src/app/components/prospects/list-prospects/list-prospects.component.html @@ -0,0 +1,348 @@ +
+ + + + + + + + + + Trigramme + Nom + Prénom + Profil + CV + Date de contact + Date d'entretien + Grille + GO / NOGO + BUM + PR + DC + Push / Qualif + + + + + + + + {{ prospect.trigramme }} + + + + + + + + {{ prospect.lastName }} + + + + + + + + + + {{ prospect.firstName }} + + + + + + + + + + {{ prospect.profil }} + + + + + @if(prospect.cv !== null && prospect.cv !== undefined) { + + + + } @else { + + + + } + + + + + + + + {{ prospect.dateContact | date : "dd-MM-yyyy" }} + + + + + + + + + + {{ prospect.dateEntretien | date : "dd-MM-yyyy" }} + + + + + + + + + + + @if(prospect.grille !== null && prospect.grille !== undefined) { + + + + } @else { + + + + } + + + + + @if(prospect.bum !== null && prospect.bum !== undefined) { + + + + } @else { +
+ + +
+ } + + + {{ fullNameBum(prospect.bum) }} + + + + + + + + @if(prospect.pr) { + + } @else { + + } + + + + + + + + + + + @if(prospect.dc !== null && prospect.dc !== undefined) { + + + + } @else { + + + + } + + + + + + + +
+ @if(!editing) { + + + } @else { + + + + + } +
+ + +
+ + +
+ + +
+ + + + + +
+ + + + Client + Date de push + Date retour + Date qualif + + + + + + + + + + + + {{ pushQualif.client }} + + + + + + + + + + {{ pushQualif.datePush | date : "dd-MM-yyyy" }} + + + + + + + + + + {{ pushQualif.datePushRetour | date : "dd-MM-yyyy" }} + + + + + + + + + + {{ pushQualif.dateQualif | date : "dd-MM-yyyy" }} + + + + +
+ @if(!expandedEditing) { + + + } @else { + + + + + } +
+ + +
+
+
+ + +
+ + + Pas de données disponible + + +
+
+ + +
+
+
+
+ + + Le nom est obligatoire. +
+
+ + + Le prénom est + obligatoire. +
+
+ +
+
+ + + Ce trigramme existe déjà, ajouter un caractére +
+
+ Téléphone + + Le numéro de téléphone est + obligatoire. +
+
+
+
+ + + L'email est obligatoire. +
+
+ + + Le profil est + obligatoire. +
+
+ + +
+ +
+
+ + +
+
+ + +
+
+
+
diff --git a/frontend/src/app/components/prospects/list-prospects/list-prospects.component.scss b/frontend/src/app/components/prospects/list-prospects/list-prospects.component.scss new file mode 100644 index 0000000..f9df90d --- /dev/null +++ b/frontend/src/app/components/prospects/list-prospects/list-prospects.component.scss @@ -0,0 +1,9 @@ +:host { + display: block; +} + +:host ::ng-deep .p-dialog .product-image { + width: 150px; + margin: 0 auto 2rem auto; + display: block; +} diff --git a/frontend/src/app/components/prospects/list-prospects/list-prospects.component.spec.ts b/frontend/src/app/components/prospects/list-prospects/list-prospects.component.spec.ts new file mode 100644 index 0000000..01e9955 --- /dev/null +++ b/frontend/src/app/components/prospects/list-prospects/list-prospects.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { RouterTestingModule } from "@angular/router/testing"; + +import { ListProspectsComponent } from "./list-prospects.component"; + +describe('ListProspectsComponent', () => { + let component: ListProspectsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RouterTestingModule], + declarations: [ListProspectsComponent], + }).compileComponents(); + fixture = TestBed.createComponent(ListProspectsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/components/prospects/list-prospects/list-prospects.component.ts b/frontend/src/app/components/prospects/list-prospects/list-prospects.component.ts new file mode 100644 index 0000000..797aa58 --- /dev/null +++ b/frontend/src/app/components/prospects/list-prospects/list-prospects.component.ts @@ -0,0 +1,262 @@ +import { PushQualif } from './../../../shared/models/prospect.model'; +import { CommonModule, NgFor, NgIf } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + inject, + OnInit, + // signal, +} from '@angular/core'; +import { FormsModule, NgForm } from '@angular/forms'; + +import { Prospect } from '@eps/shared/models/prospect.model'; +import { User } from '@eps/shared/models/user.model'; +import { FileResponse } from '@eps/shared/models/file-response'; + +import { ProspectService } from '@eps/service/prospect/prospect.service'; +import { FileService } from '@eps/service/file/file.service'; +import { ConfirmationService, MessageService } from 'primeng/api'; + +import { BaseIcon } from 'primeng/baseicon'; +import { ButtonModule } from 'primeng/button'; +import { CalendarModule } from 'primeng/calendar'; +import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { DialogModule } from 'primeng/dialog'; +import { FileSelectEvent, FileUploadModule } from 'primeng/fileupload'; +import { InputMaskModule } from 'primeng/inputmask'; +import { TableModule } from 'primeng/table'; +import { TagModule } from 'primeng/tag'; +import { ToastModule } from 'primeng/toast'; +import { ToolbarModule } from 'primeng/toolbar'; +import { DropdownModule } from 'primeng/dropdown'; +import { InputTextModule } from 'primeng/inputtext'; + +interface expandedRows { + [key: string]: boolean; +} + +@Component({ + selector: 'eps-list-prospects', + standalone: true, + imports: [ + CalendarModule, + CommonModule, + ConfirmDialogModule, + BaseIcon, + ButtonModule, + DialogModule, + DropdownModule, + FileUploadModule, + FormsModule, + InputTextModule, + InputMaskModule, + TableModule, + TagModule, + ToolbarModule, + ToastModule, + NgIf, + NgFor, + ], + templateUrl: 'list-prospects.component.html', + styleUrl: 'list-prospects.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [MessageService, ConfirmationService], +}) +export class ListProspectsComponent implements OnInit { + // services + readonly prospectService = inject(ProspectService); + readonly messageService = inject(MessageService); + readonly fileService = inject(FileService); + readonly confirmService = inject(ConfirmationService); + + // Table + prospects: Prospect[] = []; + clonedProspects: { [s: string]: Prospect } = {}; + editing = false; + dateContact: Date = new Date(); + dateEntretien: Date = new Date(); + grille: string = ''; + dc: string = ''; + expandedRows: expandedRows = {}; + isExpanded: boolean = false; + expandedEditing = false; + + // dialog + visible: boolean = false; + prospect!: Prospect; + submitted: boolean = false; + lastName: string = ''; + firstName: string = ''; + trigram: string = ''; + email: string = ''; + phone: number = 0; + profil: string = ''; + cvFile: string = ''; + fileName: string = ''; + trigramExist: boolean = false; + + + ngOnInit(): void { + this.prospectService.getProspects().subscribe((prospects: Prospect[]) => { + console.warn(prospects); + this.prospects.push(...prospects); + }); + } + + newProspect() { + this.visible = true; + } + + onSave(newProspect: NgForm) { + if(newProspect.valid) { + const newProspect: Prospect = { + firstName: this.firstName, + lastName: this.lastName, + trigramme: this.trigram, + email: this.email, + phone: this.phone.toString(), + profil: this.profil, + cv: this.cvFile, + }; + + this.prospectService.saveProspect(newProspect).subscribe(() => { + this.messageService.add({ severity:'success', summary: 'Success', detail: 'Le prospect est ajouté' }); + this.visible = false; + }); + } + } + + generateTrigram() { + this.firstName && this.lastName ? + this.trigram = (this.firstName.substring(0,1) + this.lastName.substring(0,1) + this.lastName.substring(this.lastName.length - 1)).toLowerCase() : + this.trigram = ''; + if(this.trigram) { + this.checkTrigram(this.trigram); + } + } + + checkTrigram(trigram: string) { + this.prospectService.checkTrigram(trigram).subscribe( + data => this.trigramExist = data, + error => console.error(error) + ); + } + + fullNameBum(data: User) { + console.log(data); + if(data ?? '') { + return `${data.firstName} ${data.lastName}`; + } else { + return ''; + } + } + + validatedBum(event: Event) { + console.log(event); + this.confirmService.confirm({ + target: event.target as EventTarget, + message: 'Are you sure that you want to proceed?', + header: 'Confirmation', + icon: 'pi pi-exclamation-triangle', + acceptIcon:"none", + rejectIcon:"none", + rejectButtonStyleClass:"p-button-text", + accept: () => { + this.messageService.add({ severity: 'info', summary: 'Confirmed', detail: 'You have accepted' }); + }, + reject: () => { + this.messageService.add({ severity: 'error', summary: 'Rejected', detail: 'You have rejected', life: 3000 }); + } + }); + + } + + onRowEdit(prospect: Prospect) { + this.clonedProspects[prospect._id as string] = { ...prospect }; + this.editing = true; + } + + onRowEditSave(prospect: Prospect) { + console.log(prospect); + if (prospect._id) { + this.prospectService.updateProspect(prospect).subscribe(() => { + this.messageService.add({ severity:'success', summary: 'Success', detail: 'Le prospect est modifié' }); + }); + delete this.clonedProspects[prospect._id as string]; + } + this.editing = false; + } + + onRowEditCancel(prospect: Prospect, index: number) { + this.prospects[index] = this.clonedProspects[prospect._id as string]; + delete this.clonedProspects[prospect._id as string]; + this.editing = false; + } + + archiveProspect(event: Event, prospect: Prospect) { + this.editing = false; + console.log(event.target, prospect._id); + this.confirmService.confirm({ + target: event.target as EventTarget, + message: 'Etès-vous sûre de vouloir archiver ce prospet ?', + header: 'Confirmation', + icon: 'pi pi-exclamation-triangle', + acceptIcon:"none", + rejectIcon:"none", + rejectButtonStyleClass:"p-button-text", + accept: () => { + this.messageService.add({ severity: 'info', summary: 'Confirmation', detail: 'Vous avez archivé le prospect.' }); + }, + reject: () => { + this.messageService.add({ severity: 'error', summary: 'Rejet', detail: 'You have rejected', life: 3000 }); + } + }); + + } + + onUploadFile(event: FileSelectEvent, type: string) { + const file: File = event.files[0]; + + if(file) { + this.fileService.uploadFile(file).subscribe((fileID: FileResponse) => { + if(fileID && fileID.fileId) { + switch(type) { + case 'cv': + this.cvFile = fileID.fileId; + break; + case 'grille': + this.grille = fileID.fileId; + break; + case 'dc': + this.dc = fileID.fileId; + break; + } + this.messageService.add({ severity: 'info', summary: '', detail: 'Fichier téléchargé' }); + } + }, + () => { + this.messageService.add({ severity: 'error', summary: 'Une erreur est survenu', detail: 'Le fichier n\'a pas été téléchargé' }); + }); + } + } + + expandAll() { + if (!this.isExpanded) { + this.prospects.forEach(prospect => prospect && prospect.pushQualif ? this.expandedRows[prospect.email] = true : ''); + } else { + this.expandedRows = {}; + } + this.isExpanded = !this.isExpanded; + } + + onRowExpandedEdit() { + this.expandedEditing = true; + } + onRowExpandedEditSave() { + this.expandedEditing = false; + } + onRowExpandedEditCancel(pushQualif: PushQualif, index: number) { + console.log(pushQualif, index); + this.expandedEditing = false; + } +} diff --git a/frontend/src/app/components/user/user.component.html b/frontend/src/app/components/user/user.component.html new file mode 100644 index 0000000..48f28a4 --- /dev/null +++ b/frontend/src/app/components/user/user.component.html @@ -0,0 +1,20 @@ +
+ + + + Nom + Prénom + email + role + + + + + {{ user.lastName }} + {{ user.firstName }} + {{ user.email }} + {{ user.role }} + + + +
diff --git a/frontend/src/app/components/user/user.component.scss b/frontend/src/app/components/user/user.component.scss new file mode 100644 index 0000000..5d4e87f --- /dev/null +++ b/frontend/src/app/components/user/user.component.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/frontend/src/app/components/user/user.component.ts b/frontend/src/app/components/user/user.component.ts new file mode 100644 index 0000000..fe9982f --- /dev/null +++ b/frontend/src/app/components/user/user.component.ts @@ -0,0 +1,27 @@ +import { User } from '@eps/shared/models/user.model'; +import { CommonModule } from '@angular/common'; +import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core'; +import { UserService } from '@eps/service/user/user.service'; +import { TableModule } from 'primeng/table'; + +@Component({ + selector: 'eps-user', + templateUrl: 'user.component.html', + styleUrl: 'user.component.scss', + standalone: true, + imports: [ + CommonModule, + TableModule + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class UserComponent implements OnInit{ + users: User[] = []; + userServise = inject(UserService); + + ngOnInit(): void{ + this.userServise.getUsers().subscribe((users: User[]) => { + this.users.push(...users); + }); + } +} diff --git a/frontend/src/app/services/auth/auth.service.ts b/frontend/src/app/services/auth/auth.service.ts new file mode 100644 index 0000000..e81e252 --- /dev/null +++ b/frontend/src/app/services/auth/auth.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from "@angular/core"; +// import { Observable } from "rxjs"; + +// import { User } from "@eps/shared/models/user.model"; + +@Injectable({ + providedIn: 'root' +}) +export class AuthService { + + // user$: User = new Observable(); + + // isAuthenticated(): boolean { + // if + // return true; + // } + + isLoggedIn(): boolean { + return !!localStorage.getItem('authToken'); + } +} diff --git a/frontend/src/app/services/auth/login.service.ts b/frontend/src/app/services/auth/login.service.ts new file mode 100644 index 0000000..00f49a8 --- /dev/null +++ b/frontend/src/app/services/auth/login.service.ts @@ -0,0 +1,11 @@ +import { HttpClient } from "@angular/common/http"; +import { inject, Injectable } from "@angular/core"; +import { environment } from "@eps/env/environment.dev"; + +@Injectable({ + providedIn: 'root' +}) +export class LoginService { + readonly #http = inject(HttpClient); + apiUrl = `${environment.apiUrl}/prospect`; +} diff --git a/frontend/src/app/services/file/file.service.spec.ts b/frontend/src/app/services/file/file.service.spec.ts new file mode 100644 index 0000000..445a925 --- /dev/null +++ b/frontend/src/app/services/file/file.service.spec.ts @@ -0,0 +1,17 @@ +import { HttpClientTestingModule, HttpTestingController } from "@angular/common/http/testing"; +import { TestBed } from "@angular/core/testing"; +import { FileService } from "./file.service"; + +describe('ProspectService', () => { + let service: FileService; + let httpMock: HttpTestingController; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [FileService] + }); + service = TestBed.inject(FileService); + httpMock = TestBed.inject(HttpTestingController); + }); +}); diff --git a/frontend/src/app/services/file/file.service.ts b/frontend/src/app/services/file/file.service.ts new file mode 100644 index 0000000..11232e7 --- /dev/null +++ b/frontend/src/app/services/file/file.service.ts @@ -0,0 +1,29 @@ +import { HttpClient, HttpHeaders } from "@angular/common/http"; +import { inject, Injectable } from "@angular/core"; +import { environment } from "@eps/env/environment.dev"; +import { FileResponse } from "@eps/shared/models/file-response"; +import { Observable } from "rxjs"; + +@Injectable({ + providedIn: 'root' +}) +export class FileService { + readonly #http = inject(HttpClient); + + apiUrl = `${environment.apiUrl}/files`; + + // POST: **/upload** + uploadFile(file: File): Observable { + const formData: FormData = new FormData(); + formData.append('file', file, file.name); + + return this.#http.post(`${this.apiUrl}/upload`, formData, { + headers: new HttpHeaders({ 'Accept': 'application/json'}) + }); + } + + // GET: **/download** + downloadFile(fileId: string): Observable { + return this.#http.get(`${this.apiUrl}/download/${fileId}`, { responseType: 'blob' }); + } +} diff --git a/frontend/src/app/services/layout.service.ts b/frontend/src/app/services/layout.service.ts new file mode 100644 index 0000000..ed5ee12 --- /dev/null +++ b/frontend/src/app/services/layout.service.ts @@ -0,0 +1,148 @@ +import { Injectable, effect, signal } from '@angular/core'; +import { Subject } from 'rxjs'; + +export interface AppConfig { + inputStyle: string; + colorScheme: string; + theme: string; + ripple: boolean; + menuMode: string; + scale: number; +} + +interface LayoutState { + staticMenuDesktopInactive: boolean; + overlayMenuActive: boolean; + profileSidebarVisible: boolean; + configSidebarVisible: boolean; + staticMenuMobileActive: boolean; + menuHoverActive: boolean; +} + +@Injectable({ + providedIn: 'root', +}) +export class LayoutService { + _config: AppConfig = { + ripple: false, + inputStyle: 'outlined', + menuMode: 'static', + colorScheme: 'light', + theme: 'saga-orange', + scale: 14, + }; + + config = signal(this._config); + + state: LayoutState = { + staticMenuDesktopInactive: false, + overlayMenuActive: false, + profileSidebarVisible: false, + configSidebarVisible: false, + staticMenuMobileActive: false, + menuHoverActive: false, + }; + + private configUpdate = new Subject(); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private overlayOpen = new Subject(); + + configUpdate$ = this.configUpdate.asObservable(); + overlayOpen$ = this.overlayOpen.asObservable(); + + constructor() { + effect(() => { + const config = this.config(); + if (this.updateStyle(config)) { + this.changeTheme(); + } + // this.changeScale(config.scale); + this.onConfigUpdate(); + }); + } + + updateStyle(config: AppConfig) { + return ( + config.theme !== this._config.theme || + config.colorScheme !== this._config.colorScheme + ); + } + + // onMenuToggle() { + // console.log('onMenuToggle', this.config().menuMode === 'overlay'); + // if (this.isOverlay()) { + // this.state.overlayMenuActive = !this.state.overlayMenuActive; + // if (this.state.overlayMenuActive) { + // this.overlayOpen.next(null); + // } + // } + + // if (this.isDesktop()) { + // this.state.staticMenuDesktopInactive = + // !this.state.staticMenuDesktopInactive; + // } else { + // this.state.staticMenuMobileActive = !this.state.staticMenuMobileActive; + + // if (this.state.staticMenuMobileActive) { + // this.overlayOpen.next(null); + // } + // } + // } + + showConfigSidebar() { + this.state.configSidebarVisible = true; + } + + isOverlay() { + return this.config().menuMode === 'overlay'; + } + + isDesktop() { + return window.innerWidth > 991; + } + + isMobile() { + return !this.isDesktop(); + } + + onConfigUpdate() { + this._config = { ...this.config() }; + this.configUpdate.next(this.config()); + } + + changeTheme() { + const config = this.config(); + const themeLink = document.getElementById('theme-css'); + const themeLinkHref = themeLink.getAttribute('href')!; + const newHref = themeLinkHref + .split('/') + .map((el) => + el == this._config.theme + ? (el = config.theme) + : el == `theme-${this._config.colorScheme}` + ? (el = `theme-${config.colorScheme}`) + : el + ) + .join('/'); + + this.replaceThemeLink(newHref); + } + replaceThemeLink(href: string) { + const id = 'theme-css'; + const themeLink = document.getElementById(id); + const cloneLinkElement = themeLink.cloneNode(true); + + cloneLinkElement.setAttribute('href', href); + cloneLinkElement.setAttribute('id', id + '-clone'); + + themeLink.parentNode!.insertBefore(cloneLinkElement, themeLink.nextSibling); + cloneLinkElement.addEventListener('load', () => { + themeLink.remove(); + cloneLinkElement.setAttribute('id', id); + }); + } + + // changeScale(value: number) { + // document.documentElement.style.fontSize = `${value}px`; + // } +} diff --git a/frontend/src/app/services/prospect/prospect.service.spec.ts b/frontend/src/app/services/prospect/prospect.service.spec.ts new file mode 100644 index 0000000..61c38e1 --- /dev/null +++ b/frontend/src/app/services/prospect/prospect.service.spec.ts @@ -0,0 +1,83 @@ +import { HttpClientTestingModule, HttpTestingController } from "@angular/common/http/testing"; +import { TestBed } from "@angular/core/testing"; +import { ProspectService } from "./prospect.service"; +import { Prospect } from "@eps/shared/models/prospect.model"; + +describe('ProspectService', () => { + let service: ProspectService; + let httpMock: HttpTestingController; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [ProspectService] + }); + service = TestBed.inject(ProspectService); + httpMock = TestBed.inject(HttpTestingController); + }); + + afterEach(() => { + httpMock.verify(); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should return list of prospects', () => { + const dummyProspects: Prospect[] = [ + { + _id: '123', + firstName: 'John', + lastName: 'Doe', + trigramme: 'jde', + email: 'john.doe@example.com', + phone: '123456789', + profil: 'Développeur Fullstack', + dateContact: new Date(), + dateEntretien: new Date(), + statusProspect: 'En attente', + bum: { + _id: 'test-1', + firstName: 'John', + lastName: 'Doe', + email: 'test-1', + password: '123', + role: 'admin' + }, + rh: { + _id: 'test-1', + firstName: 'John', + lastName: 'Doe', + email: 'test-1', + password: '123', + role: 'admin' + }, + source: 'linkedin', + prententionSalarial: 12, + niveauEtude: 'test-1', + disponibilite: 'test-1', + mobiliteGeo: 'test-1', + pr: 12, + pushQualif: { + client: 'client-1', + datePush: new Date(), + datePushRetour: new Date(), + dateQualif: new Date() + }, + cv: 'undefined', + grille: 'undefined', + dc: 'undefined' + } + ]; + + service.getProspects().subscribe(prospects => { + expect(prospects.length).toBe(1); + expect(prospects).toEqual(dummyProspects); + }); + + const req = httpMock.expectOne(`${service.apiUrl}/all`); + expect(req.request.method).toBe('GET'); + req.flush(dummyProspects); + }); +}); diff --git a/frontend/src/app/services/prospect/prospect.service.ts b/frontend/src/app/services/prospect/prospect.service.ts new file mode 100644 index 0000000..7f9b5bf --- /dev/null +++ b/frontend/src/app/services/prospect/prospect.service.ts @@ -0,0 +1,47 @@ +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { inject, Injectable } from '@angular/core'; +import { Prospect } from '@eps/shared/models/prospect.model'; +import { environment } from '@eps/env/environment.dev'; +import { Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class ProspectService { + readonly #http = inject(HttpClient); + + apiUrl = `${environment.apiUrl}/prospect`; + + // GET: **/allProspects** + public getProspects(): Observable { + return this.#http.get(`${this.apiUrl}/all`); + } + + // GET by id + public getProspectById(id: number) { + return this.#http.get(`${this.apiUrl}/prospect/${id}`); + } + + // POST: **/save** + public saveProspect(prospect: Prospect) { + return this.#http.post(`${this.apiUrl}/save`, prospect, { + headers: new HttpHeaders({ 'Accept': 'application/json'}) + }); + } + + // DELETE: **/delete** + public deleteProspect(id: string) { + return this.#http.delete(`${this.apiUrl}/delete/${id}`); + } + + // PUT: **/update** + updateProspect(prospect: Prospect) { + return this.#http.put(`${this.apiUrl}/edit/${prospect._id}`, prospect); + } + + // GET: **/trigramme** + checkTrigram(trigram: string): Observable { + const params = new HttpParams().set('trigramme', trigram); + return this.#http.get(`${this.apiUrl}/trigram`, {params}); + } +} diff --git a/frontend/src/app/services/user/user.service.spec.ts b/frontend/src/app/services/user/user.service.spec.ts new file mode 100644 index 0000000..16a9079 --- /dev/null +++ b/frontend/src/app/services/user/user.service.spec.ts @@ -0,0 +1,56 @@ +import { TestBed } from "@angular/core/testing"; +import { HttpClientTestingModule, HttpTestingController } from "@angular/common/http/testing"; +import { UserService } from "./user.service"; +import { User } from "@eps/shared/models/user.model"; + +describe('UserService', () => { + let service: UserService; + let httpMock: HttpTestingController; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [UserService] + }); + service = TestBed.inject(UserService); + httpMock = TestBed.inject(HttpTestingController); + }); + + afterEach(() => { + httpMock.verify(); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should return list of users', () => { + const dummyUsers: User[] = [ + { + _id: 'test-1', + firstName: 'John', + lastName: 'Doe', + email: 'test-1', + password: '123', + role: 'admin' + }, + { + _id: 'test-2', + firstName: 'Jane', + lastName: 'Doe', + email: 'test-1', + password: '123', + role: 'admin' + } + ]; + + service.getUsers().subscribe(users => { + expect(users.length).toBe(2); + expect(users).toEqual(dummyUsers); + }); + + const req = httpMock.expectOne(`${service.apiUrl}/all`); + expect(req.request.method).toBe('GET'); + req.flush(dummyUsers); + }); +}); diff --git a/frontend/src/app/services/user/user.service.ts b/frontend/src/app/services/user/user.service.ts new file mode 100644 index 0000000..addc6a1 --- /dev/null +++ b/frontend/src/app/services/user/user.service.ts @@ -0,0 +1,17 @@ +import { HttpClient } from "@angular/common/http"; +import { inject, Injectable } from "@angular/core"; +import { environment } from "@eps/env/environment.dev"; +import { User } from "@eps/shared/models/user.model"; +import { Observable } from "rxjs"; + +@Injectable({ + providedIn: 'root' +}) +export class UserService { + readonly http = inject(HttpClient); + readonly apiUrl = `${environment.apiUrl}/user`; + + public getUsers(): Observable { + return this.http.get(`${this.apiUrl}/all`); + } +} diff --git a/frontend/src/app/shared/components/footer/footer.component.css b/frontend/src/app/shared/components/footer/footer.component.css new file mode 100644 index 0000000..5d4e87f --- /dev/null +++ b/frontend/src/app/shared/components/footer/footer.component.css @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/frontend/src/app/shared/components/footer/footer.component.ts b/frontend/src/app/shared/components/footer/footer.component.ts new file mode 100644 index 0000000..498a5bc --- /dev/null +++ b/frontend/src/app/shared/components/footer/footer.component.ts @@ -0,0 +1,18 @@ +import { CommonModule } from '@angular/common'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'eps-footer', + standalone: true, + imports: [ + CommonModule, + ], + template: ` + +`, + styleUrl: './footer.component.css', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FooterComponent { } diff --git a/frontend/src/app/shared/components/home/home.component.html b/frontend/src/app/shared/components/home/home.component.html new file mode 100644 index 0000000..038ec82 --- /dev/null +++ b/frontend/src/app/shared/components/home/home.component.html @@ -0,0 +1,15 @@ + + +
+ + +
+
+ +
+ +
+
+
diff --git a/frontend/src/app/shared/components/home/home.component.scss b/frontend/src/app/shared/components/home/home.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/shared/components/home/home.component.ts b/frontend/src/app/shared/components/home/home.component.ts new file mode 100644 index 0000000..034616b --- /dev/null +++ b/frontend/src/app/shared/components/home/home.component.ts @@ -0,0 +1,150 @@ +import { LayoutService } from './../../../services/layout.service'; +import { + Component, + inject, + OnDestroy, + Renderer2, + ViewChild, +} from '@angular/core'; +import { TopbarComponent } from '../topbar/topbar.component'; +import { NavigationEnd, Router, RouterModule } from '@angular/router'; +import { FooterComponent } from '../footer/footer.component'; +import { filter, Subscription } from 'rxjs'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'eps-home', + templateUrl: 'home.component.html', + styleUrl: 'home.component.scss', + standalone: true, + imports: [ + CommonModule, + TopbarComponent, + RouterModule, + FooterComponent, + ], +}) +export class HomeComponent implements OnDestroy { + overlayMenuOpenSubscription: Subscription; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + menuOutsideClickListener: any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + profileMenuOutsideClickListener: any; + + @ViewChild(TopbarComponent) appTopbar!: TopbarComponent; + + layoutService = inject(LayoutService); + renderer = inject(Renderer2); + router = inject(Router); + + constructor() { + this.overlayMenuOpenSubscription = + this.layoutService.overlayOpen$.subscribe(() => { + if (!this.menuOutsideClickListener) { + this.menuOutsideClickListener = this.renderer.listen( + 'document', + 'click', + (event) => { + const isOutsideClicked = !( + this.appTopbar.menuButton.nativeElement.isSameNode( + event.target + ) || + this.appTopbar.menuButton.nativeElement.contains(event.target) + ); + + if (isOutsideClicked) { + this.hideMenu(); + } + } + ); + } + + if (!this.profileMenuOutsideClickListener) { + this.profileMenuOutsideClickListener = this.renderer.listen( + 'document', + 'click', + (event) => { + const isOutsideClicked = !( + this.appTopbar.menu.nativeElement.isSameNode(event.target) || + this.appTopbar.menu.nativeElement.contains(event.target) || + this.appTopbar.topbarMenuButton.nativeElement.isSameNode( + event.target + ) || + this.appTopbar.topbarMenuButton.nativeElement.contains( + event.target + ) + ); + + if (isOutsideClicked) { + this.hideProfileMenu(); + } + } + ); + } + + if (this.layoutService.state.staticMenuMobileActive) { + this.blockBodyScroll(); + } + }); + + this.router.events + .pipe(filter((event) => event instanceof NavigationEnd)) + .subscribe(() => { + this.hideMenu(); + this.hideProfileMenu(); + }); + } + + hideMenu() { + this.layoutService.state.overlayMenuActive = false; + this.layoutService.state.staticMenuMobileActive = false; + this.layoutService.state.menuHoverActive = false; + if (this.menuOutsideClickListener) { + this.menuOutsideClickListener(); + this.menuOutsideClickListener = null; + } + } + + hideProfileMenu() { + this.layoutService.state.profileSidebarVisible = false; + if (this.profileMenuOutsideClickListener) { + this.profileMenuOutsideClickListener(); + this.profileMenuOutsideClickListener = null; + } + } + + blockBodyScroll(): void { + if (document.body.classList) { + document.body.classList.add('blocked-scroll'); + } else { + document.body.className += ' blocked-scroll'; + } + } + + get containerClass() { + return { + 'layout-theme-light': this.layoutService.config().colorScheme === 'light', + 'layout-theme-dark': this.layoutService.config().colorScheme === 'dark', + 'layout-overlay': this.layoutService.config().menuMode === 'overlay', + 'layout-static': this.layoutService.config().menuMode === 'static', + 'layout-static-inactive': + this.layoutService.state.staticMenuDesktopInactive && + this.layoutService.config().menuMode === 'static', + 'layout-overlay-active': this.layoutService.state.overlayMenuActive, + 'layout-mobile-active': this.layoutService.state.staticMenuMobileActive, + 'p-input-filled': this.layoutService.config().inputStyle === 'filled', + 'p-ripple-disabled': !this.layoutService.config().ripple, + }; + } + + ngOnDestroy() { + if (this.overlayMenuOpenSubscription) { + this.overlayMenuOpenSubscription.unsubscribe(); + } + + if (this.menuOutsideClickListener) { + this.menuOutsideClickListener(); + } + } +} diff --git a/frontend/src/app/shared/components/sidebar/sidebar.component.css b/frontend/src/app/shared/components/sidebar/sidebar.component.css new file mode 100644 index 0000000..5d4e87f --- /dev/null +++ b/frontend/src/app/shared/components/sidebar/sidebar.component.css @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/frontend/src/app/shared/components/sidebar/sidebar.component.ts b/frontend/src/app/shared/components/sidebar/sidebar.component.ts new file mode 100644 index 0000000..e72bcae --- /dev/null +++ b/frontend/src/app/shared/components/sidebar/sidebar.component.ts @@ -0,0 +1,18 @@ +import { CommonModule } from '@angular/common'; +import { ChangeDetectionStrategy, Component, ElementRef, inject } from '@angular/core'; +import { LayoutService } from '@eps/service/layout.service'; + +@Component({ + selector: 'eps-sidebar', + standalone: true, + imports: [ + CommonModule, + ], + template: ``, + styleUrl: './sidebar.component.css', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SidebarComponent { + layoutService = inject(LayoutService); + el = inject(ElementRef); +} diff --git a/frontend/src/app/shared/components/topbar/topbar.component.html b/frontend/src/app/shared/components/topbar/topbar.component.html new file mode 100644 index 0000000..1f1e319 --- /dev/null +++ b/frontend/src/app/shared/components/topbar/topbar.component.html @@ -0,0 +1,39 @@ +
+ + + + + + +
+ + + + +
+
+ diff --git a/frontend/src/app/shared/components/topbar/topbar.component.scss b/frontend/src/app/shared/components/topbar/topbar.component.scss new file mode 100644 index 0000000..5d4e87f --- /dev/null +++ b/frontend/src/app/shared/components/topbar/topbar.component.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/frontend/src/app/shared/components/topbar/topbar.component.ts b/frontend/src/app/shared/components/topbar/topbar.component.ts new file mode 100644 index 0000000..b6a946a --- /dev/null +++ b/frontend/src/app/shared/components/topbar/topbar.component.ts @@ -0,0 +1,24 @@ +import { CommonModule } from '@angular/common'; +import { ChangeDetectionStrategy, Component, ElementRef, inject, ViewChild } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { LayoutService } from '@eps/service/layout.service'; +import { MenuItem } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { TooltipModule } from 'primeng/tooltip'; + +@Component({ + selector: 'eps-topbar', + templateUrl: `topbar.component.html`, + styleUrl: 'topbar.component.scss', + standalone: true, + imports: [CommonModule, RouterModule, TooltipModule, ButtonModule], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TopbarComponent { + items!: MenuItem[]; + @ViewChild('menubutton') menuButton!: ElementRef; + @ViewChild('topbarmenubutton') topbarMenuButton!: ElementRef; + @ViewChild('topbarmenu') menu!: ElementRef; + + layoutService = inject(LayoutService); +} diff --git a/frontend/src/app/shared/global-const/constante_global.ts b/frontend/src/app/shared/global-const/constante_global.ts new file mode 100644 index 0000000..6eccc1e --- /dev/null +++ b/frontend/src/app/shared/global-const/constante_global.ts @@ -0,0 +1 @@ +export const CV = 'cv'; diff --git a/frontend/src/app/shared/models/file-response.ts b/frontend/src/app/shared/models/file-response.ts new file mode 100644 index 0000000..a62096e --- /dev/null +++ b/frontend/src/app/shared/models/file-response.ts @@ -0,0 +1,3 @@ +export interface FileResponse { + fileId: string; +} diff --git a/frontend/src/app/shared/models/menu-change-event.ts b/frontend/src/app/shared/models/menu-change-event.ts new file mode 100644 index 0000000..02ebd0c --- /dev/null +++ b/frontend/src/app/shared/models/menu-change-event.ts @@ -0,0 +1,4 @@ +export interface MenuChangeEvent { + key: string; + routeEvent?: boolean; +} diff --git a/frontend/src/app/shared/models/prospect.model.ts b/frontend/src/app/shared/models/prospect.model.ts new file mode 100644 index 0000000..14863c0 --- /dev/null +++ b/frontend/src/app/shared/models/prospect.model.ts @@ -0,0 +1,33 @@ +import { User } from "./user.model"; + +export interface Prospect { + _id?: string; + firstName: string; + lastName: string; + trigramme: string; + email: string; + phone: string; + profil: string; + dateContact?: Date; + dateEntretien?: Date + statusProspect?: string; + bum?: User; + rh?: User; + source?: string; + prententionSalarial?: number; + niveauEtude?: string; + disponibilite?: string; + mobiliteGeo?: string; + cv?: string; + grille?: string; + pr?: number; + dc?: string; + pushQualif?: PushQualif; +} + +export interface PushQualif { + client: string; + datePush: Date; + datePushRetour: Date; + dateQualif: Date; +} diff --git a/frontend/src/app/shared/models/user.model.ts b/frontend/src/app/shared/models/user.model.ts new file mode 100644 index 0000000..3d00ab0 --- /dev/null +++ b/frontend/src/app/shared/models/user.model.ts @@ -0,0 +1,8 @@ +export interface User { + _id: string; + firstName: string; + lastName: string; + email: string; + password: string; + role: string; +} diff --git a/frontend/src/assets/.gitkeep b/frontend/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/assets/favicon.ico b/frontend/src/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 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 Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/frontend/src/assets/images/epsyl.png b/frontend/src/assets/images/epsyl.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1895e73bdfc35c872fdd5c3453a5092c0eac49 GIT binary patch literal 60218 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

1M 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 bcRb .layout-menuitem-root-text { + font-size: 0.857rem; + text-transform: uppercase; + font-weight: 700; + color: var(--surface-900); + margin: 0.75rem 0; + } + + > a { + display: none; + } + } + + a { + user-select: none; + + &.active-menuitem { + > .layout-submenu-toggler { + transform: rotate(-180deg); + } + } + } + + li.active-menuitem { + > a { + .layout-submenu-toggler { + transform: rotate(-180deg); + } + } + } + + ul { + margin: 0; + padding: 0; + list-style-type: none; + + a { + display: flex; + align-items: center; + position: relative; + outline: 0 none; + color: var(--text-color); + cursor: pointer; + padding: 0.75rem 1rem; + border-radius: $borderRadius; + transition: background-color $transitionDuration, + box-shadow $transitionDuration; + + .layout-menuitem-icon { + margin-right: 0.5rem; + } + + .layout-submenu-toggler { + font-size: 75%; + margin-left: auto; + transition: transform $transitionDuration; + } + + &.active-route { + font-weight: 700; + color: var(--primary-color); + } + + &:hover { + background-color: var(--surface-hover); + } + + &:focus { + @include focused-inset(); + } + } + + ul { + overflow: hidden; + border-radius: $borderRadius; + + li { + a { + margin-left: 1rem; + } + + li { + a { + margin-left: 2rem; + } + + li { + a { + margin-left: 2.5rem; + } + + li { + a { + margin-left: 3rem; + } + + li { + a { + margin-left: 3.5rem; + } + + li { + a { + margin-left: 4rem; + } + } + } + } + } + } + } + } + } +} diff --git a/frontend/src/assets/layout/_mixins.scss b/frontend/src/assets/layout/_mixins.scss new file mode 100644 index 0000000..ca3f78b --- /dev/null +++ b/frontend/src/assets/layout/_mixins.scss @@ -0,0 +1,13 @@ +@mixin focused() { + outline: 0 none; + outline-offset: 0; + transition: box-shadow .2s; + box-shadow: var(--focus-ring); +} + +@mixin focused-inset() { + outline: 0 none; + outline-offset: 0; + transition: box-shadow .2s; + box-shadow: inset var(--focus-ring); +} diff --git a/frontend/src/assets/layout/_preloading.scss b/frontend/src/assets/layout/_preloading.scss new file mode 100644 index 0000000..fd3c0d1 --- /dev/null +++ b/frontend/src/assets/layout/_preloading.scss @@ -0,0 +1,48 @@ +.preloader { + position: fixed; + z-index: 999999; + background: #edf1f5; + width: 100%; + height: 100%; +} +.preloader-content { + border: 0 solid transparent; + border-radius: 50%; + width: 150px; + height: 150px; + position: absolute; + top: calc(50vh - 75px); + left: calc(50vw - 75px); +} + +.preloader-content:before, +.preloader-content:after { + content: ""; + border: 1em solid var(--primary-color); + border-radius: 50%; + width: inherit; + height: inherit; + position: absolute; + top: 0; + left: 0; + animation: loader 2s linear infinite; + opacity: 0; +} + +.preloader-content:before { + animation-delay: 0.5s; +} + +@keyframes loader { + 0% { + transform: scale(0); + opacity: 0; + } + 50% { + opacity: 1; + } + 100% { + transform: scale(1); + opacity: 0; + } +} diff --git a/frontend/src/assets/layout/_responsive.scss b/frontend/src/assets/layout/_responsive.scss new file mode 100644 index 0000000..7ff8ed0 --- /dev/null +++ b/frontend/src/assets/layout/_responsive.scss @@ -0,0 +1,100 @@ +@media screen and (min-width: 1960px) { + .layout-main, + .landing-wrapper { + width: 1504px; + margin-left: auto !important; + margin-right: auto !important; + } +} + +@media (min-width: 992px) { + .layout-wrapper { + &.layout-overlay { + .layout-main-container { + margin-left: 0; + padding-left: 2rem; + } + + .layout-sidebar { + transform: translateX(-100%); + left: 0; + top: 0; + height: 100vh; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + &.layout-overlay-active { + .layout-sidebar { + transform: translateX(0); + } + } + } + + &.layout-static { + .layout-main-container { + margin-left: 300px; + } + + &.layout-static-inactive { + .layout-sidebar { + transform: translateX(-100%); + left: 0; + } + + .layout-main-container { + margin-left: 0; + padding-left: 2rem; + } + } + } + + .layout-mask { + display: none; + } + } +} + +@media (max-width: 991px) { + .blocked-scroll { + overflow: hidden; + } + + .layout-wrapper { + .layout-main-container { + margin-left: 0; + padding-left: 2rem; + } + + .layout-sidebar { + transform: translateX(-100%); + left: 0; + top: 0; + height: 100vh; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .layout-mask { + display: none; + position: fixed; + top: 0; + left: 0; + z-index: 998; + width: 100%; + height: 100%; + background-color: var(--maskbg); + } + + &.layout-mobile-active { + .layout-sidebar { + transform: translateX(0); + } + + .layout-mask { + display: block; + animation: fadein $transitionDuration; + } + } + } +} diff --git a/frontend/src/assets/layout/_topbar.scss b/frontend/src/assets/layout/_topbar.scss new file mode 100644 index 0000000..3984dd7 --- /dev/null +++ b/frontend/src/assets/layout/_topbar.scss @@ -0,0 +1,151 @@ +.layout-topbar { + position: fixed; + height: 5rem; + z-index: 997; + left: 0; + top: 0; + width: 100%; + padding: 0 2rem; + background-color: var(--surface-card); + transition: left $transitionDuration; + display: flex; + align-items: center; + box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.02), 0px 0px 2px rgba(0, 0, 0, 0.05), + 0px 1px 4px rgba(0, 0, 0, 0.08); + + .layout-topbar-logo { + display: flex; + align-items: center; + color: var(--surface-900); + font-size: 1.5rem; + font-weight: 500; + width: 300px; + border-radius: 12px; + + img { + height: 2.5rem; + margin-right: 0.5rem; + } + + &:focus { + @include focused(); + } + } + + .layout-topbar-button { + display: inline-flex; + justify-content: center; + align-items: center; + position: relative; + color: var(--text-color-secondary); + border-radius: 50%; + width: 3rem; + height: 3rem; + cursor: pointer; + transition: background-color $transitionDuration; + + &:hover { + color: var(--text-color); + background-color: var(--surface-hover); + } + + &:focus { + @include focused(); + } + + i { + font-size: 1.5rem; + } + + span { + font-size: 1rem; + display: none; + } + } + + .layout-menu-button { + margin-left: 2rem; + } + + .layout-topbar-menu-button { + display: none; + + i { + font-size: 1.25rem; + } + } + + .layout-topbar-menu { + margin: 0 0 0 auto; + padding: 0; + list-style: none; + display: flex; + + .layout-topbar-button { + margin-left: 1rem; + } + } +} + +@media (max-width: 991px) { + .layout-topbar { + justify-content: space-between; + + .layout-topbar-logo { + width: auto; + order: 2; + } + + .layout-menu-button { + margin-left: 0; + order: 1; + } + + .layout-topbar-menu-button { + display: inline-flex; + margin-left: 0; + order: 3; + } + + .layout-topbar-menu { + margin-left: 0; + position: absolute; + flex-direction: column; + background-color: var(--surface-overlay); + box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.02), + 0px 0px 2px rgba(0, 0, 0, 0.05), 0px 1px 4px rgba(0, 0, 0, 0.08); + border-radius: 12px; + padding: 1rem; + right: 2rem; + top: 5rem; + min-width: 15rem; + display: none; + -webkit-animation: scalein 0.15s linear; + animation: scalein 0.15s linear; + + &.layout-topbar-menu-mobile-active { + display: block; + } + + .layout-topbar-button { + margin-left: 0; + display: flex; + width: 100%; + height: auto; + justify-content: flex-start; + border-radius: 12px; + padding: 1rem; + + i { + font-size: 1rem; + margin-right: 0.5rem; + } + + span { + font-weight: medium; + display: block; + } + } + } + } +} diff --git a/frontend/src/assets/layout/_typography.scss b/frontend/src/assets/layout/_typography.scss new file mode 100644 index 0000000..0443d8f --- /dev/null +++ b/frontend/src/assets/layout/_typography.scss @@ -0,0 +1,68 @@ +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 1.5rem 0 1rem 0; + font-family: inherit; + font-weight: 500; + line-height: 1.2; + color: var(--surface-900); + + &:first-child { + margin-top: 0; + } +} + +h1 { + font-size: 2.5rem; +} + +h2 { + font-size: 2rem; +} + +h3 { + font-size: 1.75rem; +} + +h4 { + font-size: 1.5rem; +} + +h5 { + font-size: 1.25rem; +} + +h6 { + font-size: 1rem; +} + +mark { + background: #fff8e1; + padding: 0.25rem 0.4rem; + border-radius: $borderRadius; + font-family: monospace; +} + +blockquote { + margin: 1rem 0; + padding: 0 2rem; + border-left: 4px solid #90a4ae; +} + +hr { + border-top: solid var(--surface-border); + border-width: 1px 0 0 0; + margin: 1rem 0; +} + +p { + margin: 0 0 1rem 0; + line-height: 1.5; + + &:last-child { + margin-bottom: 0; + } +} diff --git a/frontend/src/assets/layout/_utils.scss b/frontend/src/assets/layout/_utils.scss new file mode 100644 index 0000000..e9ebf07 --- /dev/null +++ b/frontend/src/assets/layout/_utils.scss @@ -0,0 +1,20 @@ +.card { + background: var(--surface-card); + border: 1px solid var(--surface-border); + padding: 2rem; + margin-bottom: 2rem; + box-shadow: var(--card-shadow); + border-radius: $borderRadius; + + &:last-child { + margin-bottom: 0; + } +} + +.p-toast { + &.p-toast-top-right, + &.p-toast-top-left, + &.p-toast-top-center { + top: 100px; + } +} diff --git a/frontend/src/assets/layout/_variables.scss b/frontend/src/assets/layout/_variables.scss new file mode 100644 index 0000000..24d931d --- /dev/null +++ b/frontend/src/assets/layout/_variables.scss @@ -0,0 +1,4 @@ +/* General */ +$scale: 14px; /* main font size */ +$borderRadius: 12px; /* border radius of layout element e.g. card, sidebar */ +$transitionDuration: 0.2s; /* transition duration of layout elements e.g. sidebar, overlay menus */ diff --git a/frontend/src/assets/layout/layout.css b/frontend/src/assets/layout/layout.css new file mode 100644 index 0000000..0f80043 --- /dev/null +++ b/frontend/src/assets/layout/layout.css @@ -0,0 +1,540 @@ +/* General */ +/* main font size */ +/* border radius of layout element e.g. card, sidebar */ +/* transition duration of layout elements e.g. sidebar, overlay menus */ +.preloader { + position: fixed; + z-index: 999999; + background: #edf1f5; + width: 100%; + height: 100%; +} + +.preloader-content { + border: 0 solid transparent; + border-radius: 50%; + width: 150px; + height: 150px; + position: absolute; + top: calc(50vh - 75px); + left: calc(50vw - 75px); +} + +.preloader-content:before, +.preloader-content:after { + content: ""; + border: 1em solid var(--primary-color); + border-radius: 50%; + width: inherit; + height: inherit; + position: absolute; + top: 0; + left: 0; + animation: loader 2s linear infinite; + opacity: 0; +} + +.preloader-content:before { + animation-delay: 0.5s; +} + +@keyframes loader { + 0% { + transform: scale(0); + opacity: 0; + } + 50% { + opacity: 1; + } + 100% { + transform: scale(1); + opacity: 0; + } +} +* { + box-sizing: border-box; +} + +html { + height: 100%; + font-size: 14px; +} + +body { + font-family: var(--font-family); + color: var(--text-color); + background-color: var(--surface-ground); + margin: 0; + padding: 0; + min-height: 100%; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + text-decoration: none; + color: var(--primary-color); +} + +.layout-wrapper { + min-height: 100vh; +} + +.layout-topbar { + position: fixed; + height: 5rem; + z-index: 997; + left: 0; + top: 0; + width: 100%; + padding: 0 2rem; + background-color: var(--surface-card); + transition: left 0.2s; + display: flex; + align-items: center; + box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.02), 0px 0px 2px rgba(0, 0, 0, 0.05), + 0px 1px 4px rgba(0, 0, 0, 0.08); +} +.layout-topbar .layout-topbar-logo { + display: flex; + align-items: center; + color: var(--surface-900); + font-size: 1.5rem; + font-weight: 500; + width: 300px; + border-radius: 12px; +} +.layout-topbar .layout-topbar-logo img { + height: 2.5rem; + margin-right: 0.5rem; +} +.layout-topbar .layout-topbar-logo:focus { + outline: 0 none; + outline-offset: 0; + transition: box-shadow 0.2s; + box-shadow: var(--focus-ring); +} +.layout-topbar .layout-topbar-button { + display: inline-flex; + justify-content: center; + align-items: center; + position: relative; + color: var(--text-color-secondary); + border-radius: 50%; + width: 3rem; + height: 3rem; + cursor: pointer; + transition: background-color 0.2s; +} +.layout-topbar .layout-topbar-button:hover { + color: var(--text-color); + background-color: var(--surface-hover); +} +.layout-topbar .layout-topbar-button:focus { + outline: 0 none; + outline-offset: 0; + transition: box-shadow 0.2s; + box-shadow: var(--focus-ring); +} +.layout-topbar .layout-topbar-button i { + font-size: 1.5rem; +} +.layout-topbar .layout-topbar-button span { + font-size: 1rem; + display: none; +} +.layout-topbar .layout-menu-button { + margin-left: 2rem; +} +.layout-topbar .layout-topbar-menu-button { + display: none; +} +.layout-topbar .layout-topbar-menu-button i { + font-size: 1.25rem; +} +.layout-topbar .layout-topbar-menu { + margin: 0 0 0 auto; + padding: 0; + list-style: none; + display: flex; +} +.layout-topbar .layout-topbar-menu .layout-topbar-button { + margin-left: 1rem; +} + +@media (max-width: 991px) { + .layout-topbar { + justify-content: space-between; + } + .layout-topbar .layout-topbar-logo { + width: auto; + order: 2; + } + .layout-topbar .layout-menu-button { + margin-left: 0; + order: 1; + } + .layout-topbar .layout-topbar-menu-button { + display: inline-flex; + margin-left: 0; + order: 3; + } + .layout-topbar .layout-topbar-menu { + margin-left: 0; + position: absolute; + flex-direction: column; + background-color: var(--surface-overlay); + box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.02), 0px 0px 2px rgba(0, 0, 0, 0.05), + 0px 1px 4px rgba(0, 0, 0, 0.08); + border-radius: 12px; + padding: 1rem; + right: 2rem; + top: 5rem; + min-width: 15rem; + display: none; + -webkit-animation: scalein 0.15s linear; + animation: scalein 0.15s linear; + } + .layout-topbar .layout-topbar-menu.layout-topbar-menu-mobile-active { + display: block; + } + .layout-topbar .layout-topbar-menu .layout-topbar-button { + margin-left: 0; + display: flex; + width: 100%; + height: auto; + justify-content: flex-start; + border-radius: 12px; + padding: 1rem; + } + .layout-topbar .layout-topbar-menu .layout-topbar-button i { + font-size: 1rem; + margin-right: 0.5rem; + } + .layout-topbar .layout-topbar-menu .layout-topbar-button span { + font-weight: medium; + display: block; + } +} +.layout-sidebar { + position: fixed; + width: 300px; + height: calc(100vh - 9rem); + z-index: 999; + overflow-y: auto; + user-select: none; + top: 7rem; + left: 2rem; + transition: transform 0.2s, left 0.2s; + background-color: var(--surface-overlay); + border-radius: 12px; + padding: 0.5rem 1.5rem; + box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.02), 0px 0px 2px rgba(0, 0, 0, 0.05), + 0px 1px 4px rgba(0, 0, 0, 0.08); +} + +.layout-menu { + margin: 0; + padding: 0; + list-style-type: none; +} +.layout-menu .layout-root-menuitem > .layout-menuitem-root-text { + font-size: 0.857rem; + text-transform: uppercase; + font-weight: 700; + color: var(--surface-900); + margin: 0.75rem 0; +} +.layout-menu .layout-root-menuitem > a { + display: none; +} +.layout-menu a { + user-select: none; +} +.layout-menu a.active-menuitem > .layout-submenu-toggler { + transform: rotate(-180deg); +} +.layout-menu li.active-menuitem > a .layout-submenu-toggler { + transform: rotate(-180deg); +} +.layout-menu ul { + margin: 0; + padding: 0; + list-style-type: none; +} +.layout-menu ul a { + display: flex; + align-items: center; + position: relative; + outline: 0 none; + color: var(--text-color); + cursor: pointer; + padding: 0.75rem 1rem; + border-radius: 12px; + transition: background-color 0.2s, box-shadow 0.2s; +} +.layout-menu ul a .layout-menuitem-icon { + margin-right: 0.5rem; +} +.layout-menu ul a .layout-submenu-toggler { + font-size: 75%; + margin-left: auto; + transition: transform 0.2s; +} +.layout-menu ul a.active-route { + font-weight: 700; + color: var(--primary-color); +} +.layout-menu ul a:hover { + background-color: var(--surface-hover); +} +.layout-menu ul a:focus { + outline: 0 none; + outline-offset: 0; + transition: box-shadow 0.2s; + box-shadow: inset var(--focus-ring); +} +.layout-menu ul ul { + overflow: hidden; + border-radius: 12px; +} +.layout-menu ul ul li a { + margin-left: 1rem; +} +.layout-menu ul ul li li a { + margin-left: 2rem; +} +.layout-menu ul ul li li li a { + margin-left: 2.5rem; +} +.layout-menu ul ul li li li li a { + margin-left: 3rem; +} +.layout-menu ul ul li li li li li a { + margin-left: 3.5rem; +} +.layout-menu ul ul li li li li li li a { + margin-left: 4rem; +} + +.layout-config-button { + display: block; + position: fixed; + width: 3rem; + height: 3rem; + line-height: 3rem; + background: var(--primary-color); + color: var(--primary-color-text); + text-align: center; + top: 50%; + right: 0; + margin-top: -1.5rem; + border-top-left-radius: var(--border-radius); + border-bottom-left-radius: var(--border-radius); + border-top-right-radius: 0; + border-bottom-right-radius: 0; + transition: background-color var(--transition-duration); + overflow: hidden; + cursor: pointer; + z-index: 999; + box-shadow: -0.25rem 0 1rem rgba(0, 0, 0, 0.15); +} +.layout-config-button i { + font-size: 2rem; + line-height: inherit; + transform: rotate(0deg); + transition: transform 1s; +} +.layout-config-button:hover { + background: var(--primary-400); +} + +.layout-config-sidebar.p-sidebar .p-sidebar-content { + padding-left: 2rem; + padding-right: 2rem; +} + +.layout-main-container { + display: flex; + flex-direction: column; + min-height: 100vh; + justify-content: space-between; + padding: 7rem 2rem 2rem 4rem; + transition: margin-left 0.2s; +} + +.layout-main { + flex: 1 1 auto; +} + +.layout-footer { + transition: margin-left 0.2s; + display: flex; + align-items: center; + justify-content: center; + padding-top: 1rem; + border-top: 1px solid var(--surface-border); +} + +@media screen and (min-width: 1960px) { + .layout-main, + .landing-wrapper { + width: 1504px; + margin-left: auto !important; + margin-right: auto !important; + } +} +@media (min-width: 992px) { + .layout-wrapper.layout-overlay .layout-main-container { + margin-left: 0; + padding-left: 2rem; + } + .layout-wrapper.layout-overlay .layout-sidebar { + transform: translateX(-100%); + left: 0; + top: 0; + height: 100vh; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .layout-wrapper.layout-overlay.layout-overlay-active .layout-sidebar { + transform: translateX(0); + } + .layout-wrapper.layout-static .layout-main-container { + margin-left: 300px; + } + .layout-wrapper.layout-static.layout-static-inactive .layout-sidebar { + transform: translateX(-100%); + left: 0; + } + .layout-wrapper.layout-static.layout-static-inactive .layout-main-container { + margin-left: 0; + padding-left: 2rem; + } + .layout-wrapper .layout-mask { + display: none; + } +} +@media (max-width: 991px) { + .blocked-scroll { + overflow: hidden; + } + .layout-wrapper .layout-main-container { + margin-left: 0; + padding-left: 2rem; + } + .layout-wrapper .layout-sidebar { + transform: translateX(-100%); + left: 0; + top: 0; + height: 100vh; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .layout-wrapper .layout-mask { + display: none; + position: fixed; + top: 0; + left: 0; + z-index: 998; + width: 100%; + height: 100%; + background-color: var(--maskbg); + } + .layout-wrapper.layout-mobile-active .layout-sidebar { + transform: translateX(0); + } + .layout-wrapper.layout-mobile-active .layout-mask { + display: block; + animation: fadein 0.2s; + } +} +.card { + background: var(--surface-card); + border: 1px solid var(--surface-border); + padding: 2rem; + margin-bottom: 2rem; + box-shadow: var(--card-shadow); + border-radius: 12px; +} +.card:last-child { + margin-bottom: 0; +} + +.p-toast.p-toast-top-right, +.p-toast.p-toast-top-left, +.p-toast.p-toast-top-center { + top: 100px; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 1.5rem 0 1rem 0; + font-family: inherit; + font-weight: 500; + line-height: 1.2; + color: var(--surface-900); +} +h1:first-child, +h2:first-child, +h3:first-child, +h4:first-child, +h5:first-child, +h6:first-child { + margin-top: 0; +} + +h1 { + font-size: 2.5rem; +} + +h2 { + font-size: 2rem; +} + +h3 { + font-size: 1.75rem; +} + +h4 { + font-size: 1.5rem; +} + +h5 { + font-size: 1.25rem; +} + +h6 { + font-size: 1rem; +} + +mark { + background: #fff8e1; + padding: 0.25rem 0.4rem; + border-radius: 12px; + font-family: monospace; +} + +blockquote { + margin: 1rem 0; + padding: 0 2rem; + border-left: 4px solid #90a4ae; +} + +hr { + border-top: solid var(--surface-border); + border-width: 1px 0 0 0; + margin: 1rem 0; +} + +p { + margin: 0 0 1rem 0; + line-height: 1.5; +} +p:last-child { + margin-bottom: 0; +} diff --git a/frontend/src/assets/layout/layout.scss b/frontend/src/assets/layout/layout.scss new file mode 100644 index 0000000..f613a6e --- /dev/null +++ b/frontend/src/assets/layout/layout.scss @@ -0,0 +1,12 @@ +@import './_config'; +@import './_content'; +@import './_footer'; +@import './_main'; +@import './_menu'; +@import './_mixins'; +@import './_preloading'; +@import './_responsive'; +@import './_topbar'; +@import './_typography'; +@import './_utils'; +@import './_variables'; diff --git a/frontend/src/assets/logo/android-chrome-192x192.png b/frontend/src/assets/logo/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..d97b23452da98bb0bdd7029e7ee39526d7a84aff GIT binary patch literal 12254 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 C(eh^i literal 0 HcmV?d00001 diff --git a/frontend/src/assets/logo/android-chrome-512x512.png b/frontend/src/assets/logo/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..ffbfb6c83134de09f39d930202fe6b562e65a517 GIT binary patch literal 54237 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 T{&9H&fS!xNmxFkLNyYyHkW(J4 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/logo/apple-touch-icon.png b/frontend/src/assets/logo/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6c79174e7b7db4ce6b560c95698192753b0ece0e GIT binary patch literal 11061 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 W$2#8 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/logo/favicon-16x16.png b/frontend/src/assets/logo/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..906765d06a9c0610721638c972bbcb3ce9a3e643 GIT binary patch literal 401 zcmV;C0dD?@P)VtYk0{Y#f(8ARrcQz}ae~eufUnlqW{Y>>ulxNCR;ZEz#S2i(00000NkvXXu0mjff|aSx literal 0 HcmV?d00001 diff --git a/frontend/src/assets/logo/favicon-32x32.png b/frontend/src/assets/logo/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..0d540479b019efb1db4fed027d250b6189347fc0 GIT binary patch literal 955 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 .p-inputtext { + border-color: #f44336; + } + + .p-autocomplete-panel { + background: #ffffff; + color: #495057; + border: 0 none; + border-radius: 3px; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-autocomplete-panel .p-autocomplete-items { + padding: 0.5rem 0; + } + .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item { + margin: 0; + padding: 0.5rem 1rem; + border: 0 none; + color: #495057; + background: transparent; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item.p-highlight.p-focus { + background: #ebe0ce; + } + .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item:not(.p-highlight):not(.p-disabled).p-focus { + color: #495057; + background: #dee2e6; + } + .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item:not(.p-highlight):not(.p-disabled):hover { + color: #495057; + background: #e9ecef; + } + .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item-group { + margin: 0; + padding: 0.75rem 1rem; + color: #495057; + background: #ffffff; + font-weight: 600; + } + + p-autocomplete.ng-dirty.ng-invalid > .p-autocomplete > .p-inputtext { + border-color: #f44336; + } + + p-autocomplete.p-autocomplete-clearable .p-inputtext { + padding-right: 2rem; + } + p-autocomplete.p-autocomplete-clearable .p-autocomplete-clear-icon { + color: #6c757d; + right: 0.5rem; + } + + p-autocomplete.p-autocomplete-clearable .p-autocomplete-dd .p-autocomplete-clear-icon { + color: #6c757d; + right: 2.857rem; + } + + p-calendar.ng-dirty.ng-invalid > .p-calendar > .p-inputtext { + border-color: #f44336; + } + + .p-calendar:not(.p-calendar-disabled).p-focus > .p-inputtext { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + + .p-datepicker { + padding: 0.5rem; + background: #ffffff; + color: #495057; + border: 1px solid #ced4da; + border-radius: 3px; + } + .p-datepicker:not(.p-datepicker-inline) { + background: #ffffff; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-datepicker:not(.p-datepicker-inline) .p-datepicker-header { + background: #ffffff; + } + .p-datepicker .p-datepicker-header { + padding: 0.5rem; + color: #495057; + background: #ffffff; + font-weight: 600; + margin: 0; + border-bottom: 1px solid #dee2e6; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-datepicker .p-datepicker-header .p-datepicker-prev, +.p-datepicker .p-datepicker-header .p-datepicker-next { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:hover, +.p-datepicker .p-datepicker-header .p-datepicker-next:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-datepicker .p-datepicker-header .p-datepicker-prev:focus-visible, +.p-datepicker .p-datepicker-header .p-datepicker-next:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-datepicker .p-datepicker-header .p-datepicker-title { + line-height: 2rem; + } + .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year, +.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { + color: #495057; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + font-weight: 600; + padding: 0.5rem; + } + .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:hover, +.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:hover { + color: #FFC107; + } + .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { + margin-right: 0.5rem; + } + .p-datepicker table { + font-size: 1rem; + margin: 0.5rem 0; + } + .p-datepicker table th { + padding: 0.5rem; + } + .p-datepicker table th > span { + width: 2.5rem; + height: 2.5rem; + } + .p-datepicker table td { + padding: 0.5rem; + } + .p-datepicker table td > span { + width: 2.5rem; + height: 2.5rem; + border-radius: 50%; + transition: box-shadow 0.2s; + border: 1px solid transparent; + } + .p-datepicker table td > span.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-datepicker table td > span:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-datepicker table td.p-datepicker-today > span { + background: #ced4da; + color: #495057; + border-color: transparent; + } + .p-datepicker table td.p-datepicker-today > span.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-datepicker .p-datepicker-buttonbar { + padding: 1rem 0; + border-top: 1px solid #dee2e6; + } + .p-datepicker .p-datepicker-buttonbar .p-button { + width: auto; + } + .p-datepicker .p-timepicker { + border-top: 1px solid #dee2e6; + padding: 0.5rem; + } + .p-datepicker .p-timepicker button { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-datepicker .p-timepicker button:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-datepicker .p-timepicker button:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-datepicker .p-timepicker button:last-child { + margin-top: 0.2em; + } + .p-datepicker .p-timepicker span { + font-size: 1.25rem; + } + .p-datepicker .p-timepicker > div { + padding: 0 0.5rem; + } + .p-datepicker.p-datepicker-timeonly .p-timepicker { + border-top: 0 none; + } + .p-datepicker .p-monthpicker { + margin: 0.5rem 0; + } + .p-datepicker .p-monthpicker .p-monthpicker-month { + padding: 0.5rem; + transition: box-shadow 0.2s; + border-radius: 3px; + } + .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-datepicker .p-yearpicker { + margin: 0.5rem 0; + } + .p-datepicker .p-yearpicker .p-yearpicker-year { + padding: 0.5rem; + transition: box-shadow 0.2s; + border-radius: 3px; + } + .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-datepicker.p-datepicker-multiple-month .p-datepicker-group { + border-left: 1px solid #dee2e6; + padding-right: 0.5rem; + padding-left: 0.5rem; + padding-top: 0; + padding-bottom: 0; + } + .p-datepicker.p-datepicker-multiple-month .p-datepicker-group:first-child { + padding-left: 0; + border-left: 0 none; + } + .p-datepicker.p-datepicker-multiple-month .p-datepicker-group:last-child { + padding-right: 0; + } + .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover { + background: #e9ecef; + } + .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):hover { + background: #e9ecef; + } + .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):hover { + background: #e9ecef; + } + .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + + p-calendar.p-calendar-clearable .p-inputtext { + padding-right: 2rem; + } + p-calendar.p-calendar-clearable .p-calendar-clear-icon { + color: #6c757d; + right: 0.5rem; + } + + p-calendar.p-calendar-clearable .p-calendar-w-btn .p-calendar-clear-icon { + color: #6c757d; + right: 2.857rem; + } + + @media screen and (max-width: 769px) { + .p-datepicker table th, .p-datepicker table td { + padding: 0; + } + } + .p-cascadeselect { + background: #ffffff; + border: 1px solid #ced4da; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + border-radius: 3px; + } + .p-cascadeselect:not(.p-disabled):hover { + border-color: #FFC107; + } + .p-cascadeselect:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + .p-cascadeselect .p-cascadeselect-label { + background: transparent; + border: 0 none; + padding: 0.5rem 0.5rem; + } + .p-cascadeselect .p-cascadeselect-label.p-placeholder { + color: #6c757d; + } + .p-cascadeselect .p-cascadeselect-label:enabled:focus { + outline: 0 none; + box-shadow: none; + } + .p-cascadeselect .p-cascadeselect-trigger { + background: transparent; + color: #6c757d; + width: 2.357rem; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + .p-cascadeselect.p-invalid.p-component { + border-color: #f44336; + } + + .p-cascadeselect-panel { + background: #ffffff; + color: #495057; + border: 0 none; + border-radius: 3px; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-cascadeselect-panel .p-cascadeselect-items { + padding: 0.5rem 0; + } + .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item { + margin: 0; + border: 0 none; + color: #495057; + background: transparent; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item.p-highlight.p-focus { + background: #ebe0ce; + } + .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item:not(.p-highlight):not(.p-disabled).p-focus { + color: #495057; + background: #dee2e6; + } + .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item:not(.p-highlight):not(.p-disabled):hover { + color: #495057; + background: #e9ecef; + } + .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-item-content { + padding: 0.5rem 1rem; + } + .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-group-icon { + font-size: 0.875rem; + } + + .p-input-filled .p-cascadeselect { + background: #f8f9fa; + } + .p-input-filled .p-cascadeselect:not(.p-disabled):hover { + background-color: #f8f9fa; + } + .p-input-filled .p-cascadeselect:not(.p-disabled).p-focus { + background-color: #ffffff; + } + + p-cascadeselect.ng-dirty.ng-invalid > .p-cascadeselect { + border-color: #f44336; + } + + p-cascadeselect.p-cascadeselect-clearable .p-cascadeselect-label { + padding-right: 0.5rem; + } + p-cascadeselect.p-cascadeselect-clearable .p-cascadeselect-clear-icon { + color: #6c757d; + right: 2.357rem; + } + + .p-overlay-modal .p-cascadeselect-sublist .p-cascadeselect-panel { + box-shadow: none; + border-radius: 0; + padding: 0.25rem 0 0.25rem 0.5rem; + } + .p-overlay-modal .p-cascadeselect-item-active > .p-cascadeselect-item-content .p-cascadeselect-group-icon { + transform: rotate(90deg); + } + + .p-checkbox { + width: 20px; + height: 20px; + } + .p-checkbox .p-checkbox-box { + border: 2px solid #ced4da; + background: #ffffff; + width: 20px; + height: 20px; + color: #495057; + border-radius: 3px; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + } + .p-checkbox .p-checkbox-box .p-checkbox-icon { + transition-duration: 0.2s; + color: #212529; + font-size: 14px; + } + .p-checkbox .p-checkbox-box .p-icon { + width: 14px; + height: 14px; + } + .p-checkbox .p-checkbox-box.p-highlight { + border-color: #FFC107; + background: #FFC107; + } + .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover { + border-color: #FFC107; + } + .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover { + border-color: #d29d00; + background: #d29d00; + color: #212529; + } + + p-checkbox.ng-dirty.ng-invalid > .p-checkbox > .p-checkbox-box { + border-color: #f44336; + } + + .p-input-filled .p-checkbox .p-checkbox-box { + background-color: #f8f9fa; + } + .p-input-filled .p-checkbox .p-checkbox-box.p-highlight { + background: #FFC107; + } + .p-input-filled .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover { + background-color: #f8f9fa; + } + .p-input-filled .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover { + background: #d29d00; + } + + .p-checkbox-label { + margin-left: 0.5rem; + } + + p-tristatecheckbox.ng-dirty.ng-invalid > .p-checkbox > .p-checkbox-box { + border-color: #f44336; + } + + .p-chips:not(.p-disabled):hover .p-chips-multiple-container { + border-color: #FFC107; + } + .p-chips:not(.p-disabled).p-focus .p-chips-multiple-container { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + .p-chips .p-chips-multiple-container { + padding: 0.25rem 0.5rem; + gap: 0.5rem; + } + .p-chips .p-chips-multiple-container .p-chips-token { + padding: 0.25rem 0.5rem; + margin-right: 0.5rem; + background: #dee2e6; + color: #495057; + border-radius: 16px; + } + .p-chips .p-chips-multiple-container .p-chips-token.p-focus { + background: #ced4da; + color: #495057; + } + .p-chips .p-chips-multiple-container .p-chips-token .p-chips-token-icon { + margin-left: 0.5rem; + } + .p-chips .p-chips-multiple-container .p-chips-input-token { + padding: 0.25rem 0; + } + .p-chips .p-chips-multiple-container .p-chips-input-token input { + font-family: var(--font-family); + font-feature-settings: var(--font-feature-settings, normal); + font-size: 1rem; + color: #495057; + padding: 0; + margin: 0; + } + + p-chips.ng-dirty.ng-invalid > .p-chips > .p-inputtext { + border-color: #f44336; + } + + p-chips.p-chips-clearable .p-inputtext { + padding-right: 1.5rem; + } + p-chips.p-chips-clearable .p-chips-clear-icon { + color: #6c757d; + right: 0.5rem; + } + + .p-colorpicker-preview, +.p-fluid .p-colorpicker-preview.p-inputtext { + width: 2rem; + height: 2rem; + } + + .p-colorpicker-panel { + background: #323232; + border: 1px solid #191919; + } + .p-colorpicker-panel .p-colorpicker-color-handle, +.p-colorpicker-panel .p-colorpicker-hue-handle { + border-color: #ffffff; + } + + .p-colorpicker-overlay-panel { + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + + .p-dropdown { + background: #ffffff; + border: 1px solid #ced4da; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + border-radius: 3px; + } + .p-dropdown:not(.p-disabled):hover { + border-color: #FFC107; + } + .p-dropdown:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + .p-dropdown.p-dropdown-clearable .p-dropdown-label { + padding-right: 1.5rem; + } + .p-dropdown .p-dropdown-label { + background: transparent; + border: 0 none; + } + .p-dropdown .p-dropdown-label.p-placeholder { + color: #6c757d; + } + .p-dropdown .p-dropdown-label:focus, .p-dropdown .p-dropdown-label:enabled:focus { + outline: 0 none; + box-shadow: none; + } + .p-dropdown .p-dropdown-trigger { + background: transparent; + color: #6c757d; + width: 2.357rem; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + .p-dropdown .p-dropdown-clear-icon { + color: #6c757d; + right: 2.357rem; + } + .p-dropdown.p-invalid.p-component { + border-color: #f44336; + } + + .p-dropdown-panel { + background: #ffffff; + color: #495057; + border: 0 none; + border-radius: 3px; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-dropdown-panel .p-dropdown-header { + padding: 0.5rem 1rem; + border-bottom: 0 none; + color: #495057; + background: #f8f9fa; + margin: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-dropdown-panel .p-dropdown-header .p-dropdown-filter { + padding-right: 1.5rem; + margin-right: -1.5rem; + } + .p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon { + right: 0.5rem; + color: #6c757d; + } + .p-dropdown-panel .p-dropdown-items { + padding: 0.5rem 0; + } + .p-dropdown-panel .p-dropdown-items .p-dropdown-item { + margin: 0; + padding: 0.5rem 1rem; + border: 0 none; + color: #495057; + background: transparent; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight.p-focus { + background: #ebe0ce; + } + .p-dropdown-panel .p-dropdown-items .p-dropdown-item:not(.p-highlight):not(.p-disabled).p-focus { + color: #495057; + background: #dee2e6; + } + .p-dropdown-panel .p-dropdown-items .p-dropdown-item:not(.p-highlight):not(.p-disabled):hover { + color: #495057; + background: #e9ecef; + } + .p-dropdown-panel .p-dropdown-items .p-dropdown-item-group { + margin: 0; + padding: 0.75rem 1rem; + color: #495057; + background: #ffffff; + font-weight: 600; + } + .p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message { + padding: 0.5rem 1rem; + color: #495057; + background: transparent; + } + + .p-input-filled .p-dropdown { + background: #f8f9fa; + } + .p-input-filled .p-dropdown:not(.p-disabled):hover { + background-color: #f8f9fa; + } + .p-input-filled .p-dropdown:not(.p-disabled).p-focus { + background-color: #ffffff; + } + .p-input-filled .p-dropdown:not(.p-disabled).p-focus .p-inputtext { + background-color: transparent; + } + + p-dropdown.ng-dirty.ng-invalid > .p-dropdown { + border-color: #f44336; + } + + .p-inputgroup-addon { + background: #e9ecef; + color: #6c757d; + border-top: 1px solid #ced4da; + border-left: 1px solid #ced4da; + border-bottom: 1px solid #ced4da; + padding: 0.5rem 0.5rem; + min-width: 2.357rem; + } + .p-inputgroup-addon:last-child { + border-right: 1px solid #ced4da; + } + + .p-inputgroup > .p-component, +.p-inputgroup > .p-inputwrapper > .p-inputtext, +.p-inputgroup > .p-float-label > .p-component { + border-radius: 0; + margin: 0; + } + .p-inputgroup > .p-component + .p-inputgroup-addon, +.p-inputgroup > .p-inputwrapper > .p-inputtext + .p-inputgroup-addon, +.p-inputgroup > .p-float-label > .p-component + .p-inputgroup-addon { + border-left: 0 none; + } + .p-inputgroup > .p-component:focus, +.p-inputgroup > .p-inputwrapper > .p-inputtext:focus, +.p-inputgroup > .p-float-label > .p-component:focus { + z-index: 1; + } + .p-inputgroup > .p-component:focus ~ label, +.p-inputgroup > .p-inputwrapper > .p-inputtext:focus ~ label, +.p-inputgroup > .p-float-label > .p-component:focus ~ label { + z-index: 1; + } + + .p-inputgroup-addon:first-child, +.p-inputgroup button:first-child, +.p-inputgroup input:first-child, +.p-inputgroup > .p-inputwrapper:first-child > .p-component, +.p-inputgroup > .p-inputwrapper:first-child > .p-component > .p-inputtext { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + } + + .p-inputgroup .p-float-label:first-child input { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + } + + .p-inputgroup-addon:last-child, +.p-inputgroup button:last-child, +.p-inputgroup input:last-child, +.p-inputgroup > .p-inputwrapper:last-child > .p-component, +.p-inputgroup > .p-inputwrapper:last-child > .p-component > .p-inputtext { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + + .p-inputgroup .p-float-label:last-child input { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + + .p-fluid .p-inputgroup .p-button { + width: auto; + } + .p-fluid .p-inputgroup .p-button.p-button-icon-only { + width: 2.357rem; + } + + p-inputmask.ng-dirty.ng-invalid > .p-inputtext { + border-color: #f44336; + } + + p-inputmask.p-inputmask-clearable .p-inputtext { + padding-right: 2rem; + } + p-inputmask.p-inputmask-clearable .p-inputmask-clear-icon { + color: #6c757d; + right: 0.5rem; + } + + p-inputnumber.ng-dirty.ng-invalid > .p-inputnumber > .p-inputtext { + border-color: #f44336; + } + + p-inputnumber.p-inputnumber-clearable .p-inputnumber-input { + padding-right: 2rem; + } + p-inputnumber.p-inputnumber-clearable .p-inputnumber-clear-icon { + color: #6c757d; + right: 0.5rem; + } + + p-inputnumber.p-inputnumber-clearable .p-inputnumber-buttons-stacked .p-inputnumber-clear-icon { + right: 2.857rem; + } + p-inputnumber.p-inputnumber-clearable .p-inputnumber-buttons-horizontal .p-inputnumber-clear-icon { + right: 2.857rem; + } + + .p-inputswitch { + width: 3rem; + height: 1.75rem; + } + .p-inputswitch .p-inputswitch-slider { + background: #ced4da; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + border-radius: 30px; + } + .p-inputswitch .p-inputswitch-slider:before { + background: #ffffff; + width: 1.25rem; + height: 1.25rem; + left: 0.25rem; + margin-top: -0.625rem; + border-radius: 50%; + transition-duration: 0.2s; + } + .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before { + transform: translateX(1.25rem); + } + .p-inputswitch.p-focus .p-inputswitch-slider { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-inputswitch:not(.p-disabled):hover .p-inputswitch-slider { + background: #b6bfc8; + } + .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider { + background: #FFC107; + } + .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before { + background: #ffffff; + } + .p-inputswitch.p-inputswitch-checked:not(.p-disabled):hover .p-inputswitch-slider { + background: #ecb100; + } + + p-inputswitch.ng-dirty.ng-invalid > .p-inputswitch > .p-inputswitch-slider { + border-color: #f44336; + } + + .p-inputtext { + font-family: var(--font-family); + font-feature-settings: var(--font-feature-settings, normal); + font-size: 1rem; + color: #495057; + background: #ffffff; + padding: 0.5rem 0.5rem; + border: 1px solid #ced4da; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + appearance: none; + border-radius: 3px; + } + .p-inputtext:enabled:hover { + border-color: #FFC107; + } + .p-inputtext:enabled:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + .p-inputtext.ng-dirty.ng-invalid { + border-color: #f44336; + } + .p-inputtext.p-inputtext-sm { + font-size: 0.875rem; + padding: 0.4375rem 0.4375rem; + } + .p-inputtext.p-inputtext-lg { + font-size: 1.25rem; + padding: 0.625rem 0.625rem; + } + + .p-float-label > label { + left: 0.5rem; + color: #6c757d; + transition-duration: 0.2s; + } + + .p-float-label > .ng-invalid.ng-dirty + label { + color: #f44336; + } + + .p-input-icon-left > .p-icon-wrapper.p-icon, +.p-input-icon-left > i:first-of-type { + left: 0.5rem; + color: #6c757d; + } + + .p-input-icon-left > .p-inputtext { + padding-left: 2rem; + } + + .p-input-icon-left.p-float-label > label { + left: 2rem; + } + + .p-input-icon-right > .p-icon-wrapper, +.p-input-icon-right > i:last-of-type { + right: 0.5rem; + color: #6c757d; + } + + .p-input-icon-right > .p-inputtext { + padding-right: 2rem; + } + + ::-webkit-input-placeholder { + color: #6c757d; + } + + :-moz-placeholder { + color: #6c757d; + } + + ::-moz-placeholder { + color: #6c757d; + } + + :-ms-input-placeholder { + color: #6c757d; + } + + .p-input-filled .p-inputtext { + background-color: #f8f9fa; + } + .p-input-filled .p-inputtext:enabled:hover { + background-color: #f8f9fa; + } + .p-input-filled .p-inputtext:enabled:focus { + background-color: #ffffff; + } + + .p-inputtext-sm .p-inputtext { + font-size: 0.875rem; + padding: 0.4375rem 0.4375rem; + } + + .p-inputtext-lg .p-inputtext { + font-size: 1.25rem; + padding: 0.625rem 0.625rem; + } + + .p-listbox { + background: #ffffff; + color: #495057; + border: 1px solid #ced4da; + border-radius: 3px; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + } + .p-listbox .p-listbox-header { + padding: 0.5rem 1rem; + border-bottom: 0 none; + color: #495057; + background: #f8f9fa; + margin: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-listbox .p-listbox-header .p-listbox-filter { + padding-right: 1.5rem; + } + .p-listbox .p-listbox-header .p-listbox-filter-icon { + right: 0.5rem; + color: #6c757d; + } + .p-listbox .p-listbox-header .p-checkbox { + margin-right: 0.5rem; + } + .p-listbox .p-listbox-list { + padding: 0.5rem 0; + outline: 0 none; + } + .p-listbox .p-listbox-list .p-listbox-item { + margin: 0; + padding: 0.5rem 1rem; + border: 0 none; + color: #495057; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-listbox .p-listbox-list .p-listbox-item.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-listbox .p-listbox-list .p-listbox-item .p-checkbox { + margin-right: 0.5rem; + } + .p-listbox .p-listbox-list .p-listbox-item-group { + margin: 0; + padding: 0.75rem 1rem; + color: #495057; + background: #ffffff; + font-weight: 600; + } + .p-listbox .p-listbox-list .p-listbox-empty-message { + padding: 0.5rem 1rem; + color: #495057; + background: transparent; + } + .p-listbox:not(.p-disabled) .p-listbox-item.p-highlight.p-focus { + background: #ebe0ce; + } + .p-listbox:not(.p-disabled) .p-listbox-item:not(.p-highlight):not(.p-disabled).p-focus { + color: #495057; + background: #dee2e6; + } + .p-listbox:not(.p-disabled) .p-listbox-item:not(.p-highlight):not(.p-disabled):hover { + color: #495057; + background: #e9ecef; + } + .p-listbox.p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + + p-listbox.ng-dirty.ng-invalid > .p-listbox { + border-color: #f44336; + } + + .p-multiselect { + background: #ffffff; + border: 1px solid #ced4da; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + border-radius: 3px; + } + .p-multiselect:not(.p-disabled):hover { + border-color: #FFC107; + } + .p-multiselect:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + .p-multiselect .p-multiselect-label { + padding: 0.5rem 0.5rem; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + } + .p-multiselect .p-multiselect-label.p-placeholder { + color: #6c757d; + } + .p-multiselect.p-multiselect-chip .p-multiselect-token { + padding: 0.25rem 0.5rem; + margin-right: 0.5rem; + background: #dee2e6; + color: #495057; + border-radius: 16px; + } + .p-multiselect.p-multiselect-chip .p-multiselect-token .p-multiselect-token-icon { + margin-left: 0.5rem; + } + .p-multiselect .p-multiselect-trigger { + background: transparent; + color: #6c757d; + width: 2.357rem; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + + .p-inputwrapper-filled.p-multiselect.p-multiselect-chip .p-multiselect-label { + padding: 0.25rem 0.5rem; + } + + .p-multiselect-clearable .p-multiselect-label-container { + padding-right: 1.5rem; + } + .p-multiselect-clearable .p-multiselect-clear-icon { + color: #6c757d; + right: 2.357rem; + } + + .p-multiselect-panel { + background: #ffffff; + color: #495057; + border: 0 none; + border-radius: 3px; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-multiselect-panel .p-multiselect-header { + padding: 0.5rem 1rem; + border-bottom: 0 none; + color: #495057; + background: #f8f9fa; + margin: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext { + padding-right: 1.5rem; + } + .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-multiselect-filter-icon { + right: 0.5rem; + color: #6c757d; + } + .p-multiselect-panel .p-multiselect-header .p-checkbox { + margin-right: 0.5rem; + } + .p-multiselect-panel .p-multiselect-header .p-multiselect-close { + margin-left: 0.5rem; + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-multiselect-panel .p-multiselect-header .p-multiselect-close:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-multiselect-panel .p-multiselect-header .p-multiselect-close:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-multiselect-panel .p-multiselect-items { + padding: 0.5rem 0; + } + .p-multiselect-panel .p-multiselect-items .p-multiselect-item { + margin: 0; + padding: 0.5rem 1rem; + border: 0 none; + color: #495057; + background: transparent; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight.p-focus { + background: #ebe0ce; + } + .p-multiselect-panel .p-multiselect-items .p-multiselect-item:not(.p-highlight):not(.p-disabled).p-focus { + color: #495057; + background: #dee2e6; + } + .p-multiselect-panel .p-multiselect-items .p-multiselect-item:not(.p-highlight):not(.p-disabled):hover { + color: #495057; + background: #e9ecef; + } + .p-multiselect-panel .p-multiselect-items .p-multiselect-item .p-checkbox { + margin-right: 0.5rem; + } + .p-multiselect-panel .p-multiselect-items .p-multiselect-item-group { + margin: 0; + padding: 0.75rem 1rem; + color: #495057; + background: #ffffff; + font-weight: 600; + } + .p-multiselect-panel .p-multiselect-items .p-multiselect-empty-message { + padding: 0.5rem 1rem; + color: #495057; + background: transparent; + } + + .p-input-filled .p-multiselect { + background: #f8f9fa; + } + .p-input-filled .p-multiselect:not(.p-disabled):hover { + background-color: #f8f9fa; + } + .p-input-filled .p-multiselect:not(.p-disabled).p-focus { + background-color: #ffffff; + } + + p-multiselect.ng-dirty.ng-invalid > .p-multiselect { + border-color: #f44336; + } + + p-password.ng-invalid.ng-dirty > .p-password > .p-inputtext { + border-color: #f44336; + } + + .p-password-panel { + padding: 1rem; + background: #ffffff; + color: #495057; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + border-radius: 3px; + } + .p-password-panel .p-password-meter { + margin-bottom: 0.5rem; + background: #dee2e6; + } + .p-password-panel .p-password-meter .p-password-strength.weak { + background: #d32f2f; + } + .p-password-panel .p-password-meter .p-password-strength.medium { + background: #fbc02d; + } + .p-password-panel .p-password-meter .p-password-strength.strong { + background: #689f38; + } + + p-password.p-password-clearable .p-password-input { + padding-right: 2rem; + } + p-password.p-password-clearable .p-password-clear-icon { + color: #6c757d; + right: 0.5rem; + } + + p-password.p-password-clearable.p-password-mask .p-password-input { + padding-right: 3.5rem; + } + p-password.p-password-clearable.p-password-mask .p-password-clear-icon { + color: #6c757d; + right: 2rem; + } + + .p-radiobutton { + width: 20px; + height: 20px; + } + .p-radiobutton .p-radiobutton-box { + border: 2px solid #ced4da; + background: #ffffff; + width: 20px; + height: 20px; + color: #495057; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + } + .p-radiobutton .p-radiobutton-box:not(.p-disabled):not(.p-highlight):hover { + border-color: #FFC107; + } + .p-radiobutton .p-radiobutton-box:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + .p-radiobutton .p-radiobutton-box .p-radiobutton-icon { + width: 12px; + height: 12px; + transition-duration: 0.2s; + background-color: #212529; + } + .p-radiobutton .p-radiobutton-box.p-highlight { + border-color: #FFC107; + background: #FFC107; + } + .p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover { + border-color: #d29d00; + background: #d29d00; + color: #212529; + } + + p-radiobutton.ng-dirty.ng-invalid > .p-radiobutton > .p-radiobutton-box { + border-color: #f44336; + } + + .p-input-filled .p-radiobutton .p-radiobutton-box { + background-color: #f8f9fa; + } + .p-input-filled .p-radiobutton .p-radiobutton-box:not(.p-disabled):hover { + background-color: #f8f9fa; + } + .p-input-filled .p-radiobutton .p-radiobutton-box.p-highlight { + background: #FFC107; + } + .p-input-filled .p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover { + background: #d29d00; + } + + .p-radiobutton-label { + margin-left: 0.5rem; + } + + .p-rating { + gap: 0.5rem; + } + .p-rating .p-rating-item .p-rating-icon { + color: #495057; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + font-size: 1.143rem; + } + .p-rating .p-rating-item .p-rating-icon.p-icon { + width: 1.143rem; + height: 1.143rem; + } + .p-rating .p-rating-item .p-rating-icon.p-rating-cancel { + color: #e74c3c; + } + .p-rating .p-rating-item.p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + .p-rating .p-rating-item.p-rating-item-active .p-rating-icon { + color: #FFC107; + } + .p-rating:not(.p-disabled):not(.p-readonly) .p-rating-item:hover .p-rating-icon { + color: #FFC107; + } + .p-rating:not(.p-disabled):not(.p-readonly) .p-rating-item:hover .p-rating-icon.p-rating-cancel { + color: #c0392b; + } + + .p-selectbutton .p-button { + background: #ffffff; + border: 1px solid #ced4da; + color: #495057; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + } + .p-selectbutton .p-button .p-button-icon-left, +.p-selectbutton .p-button .p-button-icon-right { + color: #6c757d; + } + .p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover { + background: #e9ecef; + border-color: #ced4da; + color: #495057; + } + .p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-left, +.p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-right { + color: #6c757d; + } + .p-selectbutton .p-button.p-highlight { + background: #FFC107; + border-color: #FFC107; + color: #212529; + } + .p-selectbutton .p-button.p-highlight .p-button-icon-left, +.p-selectbutton .p-button.p-highlight .p-button-icon-right { + color: #212529; + } + .p-selectbutton .p-button.p-highlight:hover { + background: #ecb100; + border-color: #ecb100; + color: #212529; + } + .p-selectbutton .p-button.p-highlight:hover .p-button-icon-left, +.p-selectbutton .p-button.p-highlight:hover .p-button-icon-right { + color: #212529; + } + + p-selectbutton.ng-dirty.ng-invalid > .p-selectbutton > .p-button { + border-color: #f44336; + } + + .p-slider { + background: #dee2e6; + border: 0 none; + border-radius: 3px; + } + .p-slider.p-slider-horizontal { + height: 0.286rem; + } + .p-slider.p-slider-horizontal .p-slider-handle { + margin-top: -0.5715rem; + margin-left: -0.5715rem; + } + .p-slider.p-slider-vertical { + width: 0.286rem; + } + .p-slider.p-slider-vertical .p-slider-handle { + margin-left: -0.5715rem; + margin-bottom: -0.5715rem; + } + .p-slider .p-slider-handle { + height: 1.143rem; + width: 1.143rem; + background: #ffffff; + border: 2px solid #FFC107; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + } + .p-slider .p-slider-handle:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-slider .p-slider-range { + background: #FFC107; + } + .p-slider:not(.p-disabled) .p-slider-handle:hover { + background: #FFC107; + border-color: #FFC107; + } + .p-slider.p-slider-animate.p-slider-horizontal .p-slider-handle { + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, left 0.2s; + } + .p-slider.p-slider-animate.p-slider-horizontal .p-slider-range { + transition: width 0.2s; + } + .p-slider.p-slider-animate.p-slider-vertical .p-slider-handle { + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, bottom 0.2s; + } + .p-slider.p-slider-animate.p-slider-vertical .p-slider-range { + transition: height 0.2s; + } + + .p-togglebutton.p-button { + background: #ffffff; + border: 1px solid #ced4da; + color: #495057; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + } + .p-togglebutton.p-button .p-button-icon-left, +.p-togglebutton.p-button .p-button-icon-right { + color: #6c757d; + } + .p-togglebutton.p-button:not(.p-disabled):not(.p-highlight):hover { + background: #e9ecef; + border-color: #ced4da; + color: #495057; + } + .p-togglebutton.p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-left, +.p-togglebutton.p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-right { + color: #6c757d; + } + .p-togglebutton.p-button.p-highlight { + background: #FFC107; + border-color: #FFC107; + color: #212529; + } + .p-togglebutton.p-button.p-highlight .p-button-icon-left, +.p-togglebutton.p-button.p-highlight .p-button-icon-right { + color: #212529; + } + .p-togglebutton.p-button.p-highlight:hover { + background: #ecb100; + border-color: #ecb100; + color: #212529; + } + .p-togglebutton.p-button.p-highlight:hover .p-button-icon-left, +.p-togglebutton.p-button.p-highlight:hover .p-button-icon-right { + color: #212529; + } + + p-togglebutton.ng-dirty.ng-invalid > .p-togglebutton.p-button { + border-color: #f44336; + } + + .p-treeselect { + background: #ffffff; + border: 1px solid #ced4da; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + border-radius: 3px; + } + .p-treeselect:not(.p-disabled):hover { + border-color: #FFC107; + } + .p-treeselect:not(.p-disabled).p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: #FFC107; + } + .p-treeselect .p-treeselect-label { + padding: 0.5rem 0.5rem; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + } + .p-treeselect .p-treeselect-label.p-placeholder { + color: #6c757d; + } + .p-treeselect.p-treeselect-chip .p-treeselect-token { + padding: 0.25rem 0.5rem; + margin-right: 0.5rem; + background: #dee2e6; + color: #495057; + border-radius: 16px; + } + .p-treeselect .p-treeselect-trigger { + background: transparent; + color: #6c757d; + width: 2.357rem; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + + p-treeselect.ng-invalid.ng-dirty > .p-treeselect { + border-color: #f44336; + } + + .p-inputwrapper-filled .p-treeselect.p-treeselect-chip .p-treeselect-label { + padding: 0.25rem 0.5rem; + } + + .p-treeselect-panel { + background: #ffffff; + color: #495057; + border: 0 none; + border-radius: 3px; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-treeselect-panel .p-treeselect-header { + padding: 0.5rem 1rem; + border-bottom: 0 none; + color: #495057; + background: #f8f9fa; + margin: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-treeselect-panel .p-treeselect-header .p-treeselect-filter-container { + margin-right: 0.5rem; + } + .p-treeselect-panel .p-treeselect-header .p-treeselect-filter-container .p-treeselect-filter { + padding-right: 1.5rem; + } + .p-treeselect-panel .p-treeselect-header .p-treeselect-filter-container .p-treeselect-filter-icon { + right: 0.5rem; + color: #6c757d; + } + .p-treeselect-panel .p-treeselect-header .p-treeselect-filter-container.p-treeselect-clearable-filter .p-treeselect-filter { + padding-right: 3rem; + } + .p-treeselect-panel .p-treeselect-header .p-treeselect-filter-container.p-treeselect-clearable-filter .p-treeselect-filter-clear-icon { + right: 2rem; + } + .p-treeselect-panel .p-treeselect-header .p-treeselect-close { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-treeselect-panel .p-treeselect-header .p-treeselect-close:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-treeselect-panel .p-treeselect-header .p-treeselect-close:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-treeselect-panel .p-treeselect-items-wrapper .p-tree { + border: 0 none; + } + .p-treeselect-panel .p-treeselect-items-wrapper .p-treeselect-empty-message { + padding: 0.5rem 1rem; + color: #495057; + background: transparent; + } + + .p-input-filled .p-treeselect { + background: #f8f9fa; + } + .p-input-filled .p-treeselect:not(.p-disabled):hover { + background-color: #f8f9fa; + } + .p-input-filled .p-treeselect:not(.p-disabled).p-focus { + background-color: #ffffff; + } + + p-treeselect.p-treeselect-clearable .p-treeselect-label-container { + padding-right: 1.5rem; + } + p-treeselect.p-treeselect-clearable .p-treeselect-clear-icon { + color: #6c757d; + right: 2.357rem; + } + + .p-button { + color: #212529; + background: #FFC107; + border: 1px solid #FFC107; + padding: 0.5rem 1rem; + font-size: 1rem; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + border-radius: 3px; + } + .p-button:not(:disabled):hover { + background: #ecb100; + color: #212529; + border-color: #ecb100; + } + .p-button:not(:disabled):active { + background: #d29d00; + color: #212529; + border-color: #d29d00; + } + .p-button.p-button-outlined { + background-color: transparent; + color: #FFC107; + border: 1px solid; + } + .p-button.p-button-outlined:not(:disabled):hover { + background: rgba(255, 193, 7, 0.04); + color: #FFC107; + border: 1px solid; + } + .p-button.p-button-outlined:not(:disabled):active { + background: rgba(255, 193, 7, 0.16); + color: #FFC107; + border: 1px solid; + } + .p-button.p-button-outlined.p-button-plain { + color: #6c757d; + border-color: #6c757d; + } + .p-button.p-button-outlined.p-button-plain:not(:disabled):hover { + background: #e9ecef; + color: #6c757d; + } + .p-button.p-button-outlined.p-button-plain:not(:disabled):active { + background: #dee2e6; + color: #6c757d; + } + .p-button.p-button-text { + background-color: transparent; + color: #FFC107; + border-color: transparent; + } + .p-button.p-button-text:not(:disabled):hover { + background: rgba(255, 193, 7, 0.04); + color: #FFC107; + border-color: transparent; + } + .p-button.p-button-text:not(:disabled):active { + background: rgba(255, 193, 7, 0.16); + color: #FFC107; + border-color: transparent; + } + .p-button.p-button-text.p-button-plain { + color: #6c757d; + } + .p-button.p-button-text.p-button-plain:not(:disabled):hover { + background: #e9ecef; + color: #6c757d; + } + .p-button.p-button-text.p-button-plain:not(:disabled):active { + background: #dee2e6; + color: #6c757d; + } + .p-button:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-button .p-button-label { + transition-duration: 0.2s; + } + .p-button .p-button-icon-left { + margin-right: 0.5rem; + } + .p-button .p-button-icon-right { + margin-left: 0.5rem; + } + .p-button .p-button-icon-bottom { + margin-top: 0.5rem; + } + .p-button .p-button-icon-top { + margin-bottom: 0.5rem; + } + .p-button .p-badge { + margin-left: 0.5rem; + min-width: 1rem; + height: 1rem; + line-height: 1rem; + color: #FFC107; + background-color: #212529; + } + .p-button.p-button-raised { + box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + } + .p-button.p-button-rounded { + border-radius: 2rem; + } + .p-button.p-button-icon-only { + width: 2.357rem; + padding: 0.5rem 0; + } + .p-button.p-button-icon-only .p-button-icon-left, +.p-button.p-button-icon-only .p-button-icon-right { + margin: 0; + } + .p-button.p-button-icon-only.p-button-rounded { + border-radius: 50%; + height: 2.357rem; + } + .p-button.p-button-sm { + font-size: 0.875rem; + padding: 0.4375rem 0.875rem; + } + .p-button.p-button-sm .p-button-icon { + font-size: 0.875rem; + } + .p-button.p-button-lg { + font-size: 1.25rem; + padding: 0.625rem 1.25rem; + } + .p-button.p-button-lg .p-button-icon { + font-size: 1.25rem; + } + .p-button.p-button-loading-label-only .p-button-label { + margin-left: 0.5rem; + } + .p-button.p-button-loading-label-only .p-button-loading-icon { + margin-right: 0; + } + + .p-fluid .p-button { + width: 100%; + } + .p-fluid .p-button-icon-only { + width: 2.357rem; + } + .p-fluid .p-buttonset { + display: flex; + } + .p-fluid .p-buttonset .p-button { + flex: 1; + } + + .p-button.p-button-secondary, +.p-buttonset.p-button-secondary > .p-button, +.p-splitbutton.p-button-secondary > .p-button { + color: #ffffff; + background: #607d8b; + border: 1px solid #607d8b; + } + .p-button.p-button-secondary:not(:disabled):hover, +.p-buttonset.p-button-secondary > .p-button:not(:disabled):hover, +.p-splitbutton.p-button-secondary > .p-button:not(:disabled):hover { + background: #56717d; + color: #ffffff; + border-color: #56717d; + } + .p-button.p-button-secondary:not(:disabled):focus, +.p-buttonset.p-button-secondary > .p-button:not(:disabled):focus, +.p-splitbutton.p-button-secondary > .p-button:not(:disabled):focus { + box-shadow: 0 0 0 0.2rem #beccd2; + } + .p-button.p-button-secondary:not(:disabled):active, +.p-buttonset.p-button-secondary > .p-button:not(:disabled):active, +.p-splitbutton.p-button-secondary > .p-button:not(:disabled):active { + background: #4d646f; + color: #ffffff; + border-color: #4d646f; + } + .p-button.p-button-secondary.p-button-outlined, +.p-buttonset.p-button-secondary > .p-button.p-button-outlined, +.p-splitbutton.p-button-secondary > .p-button.p-button-outlined { + background-color: transparent; + color: #607d8b; + border: 1px solid; + } + .p-button.p-button-secondary.p-button-outlined:not(:disabled):hover, +.p-buttonset.p-button-secondary > .p-button.p-button-outlined:not(:disabled):hover, +.p-splitbutton.p-button-secondary > .p-button.p-button-outlined:not(:disabled):hover { + background: rgba(96, 125, 139, 0.04); + color: #607d8b; + border: 1px solid; + } + .p-button.p-button-secondary.p-button-outlined:not(:disabled):active, +.p-buttonset.p-button-secondary > .p-button.p-button-outlined:not(:disabled):active, +.p-splitbutton.p-button-secondary > .p-button.p-button-outlined:not(:disabled):active { + background: rgba(96, 125, 139, 0.16); + color: #607d8b; + border: 1px solid; + } + .p-button.p-button-secondary.p-button-text, +.p-buttonset.p-button-secondary > .p-button.p-button-text, +.p-splitbutton.p-button-secondary > .p-button.p-button-text { + background-color: transparent; + color: #607d8b; + border-color: transparent; + } + .p-button.p-button-secondary.p-button-text:not(:disabled):hover, +.p-buttonset.p-button-secondary > .p-button.p-button-text:not(:disabled):hover, +.p-splitbutton.p-button-secondary > .p-button.p-button-text:not(:disabled):hover { + background: rgba(96, 125, 139, 0.04); + border-color: transparent; + color: #607d8b; + } + .p-button.p-button-secondary.p-button-text:not(:disabled):active, +.p-buttonset.p-button-secondary > .p-button.p-button-text:not(:disabled):active, +.p-splitbutton.p-button-secondary > .p-button.p-button-text:not(:disabled):active { + background: rgba(96, 125, 139, 0.16); + border-color: transparent; + color: #607d8b; + } + + .p-button.p-button-info, +.p-buttonset.p-button-info > .p-button, +.p-splitbutton.p-button-info > .p-button { + color: #ffffff; + background: #0288d1; + border: 1px solid #0288d1; + } + .p-button.p-button-info:not(:disabled):hover, +.p-buttonset.p-button-info > .p-button:not(:disabled):hover, +.p-splitbutton.p-button-info > .p-button:not(:disabled):hover { + background: #027abc; + color: #ffffff; + border-color: #027abc; + } + .p-button.p-button-info:not(:disabled):focus, +.p-buttonset.p-button-info > .p-button:not(:disabled):focus, +.p-splitbutton.p-button-info > .p-button:not(:disabled):focus { + box-shadow: 0 0 0 0.2rem #89d4fe; + } + .p-button.p-button-info:not(:disabled):active, +.p-buttonset.p-button-info > .p-button:not(:disabled):active, +.p-splitbutton.p-button-info > .p-button:not(:disabled):active { + background: #026da7; + color: #ffffff; + border-color: #026da7; + } + .p-button.p-button-info.p-button-outlined, +.p-buttonset.p-button-info > .p-button.p-button-outlined, +.p-splitbutton.p-button-info > .p-button.p-button-outlined { + background-color: transparent; + color: #0288d1; + border: 1px solid; + } + .p-button.p-button-info.p-button-outlined:not(:disabled):hover, +.p-buttonset.p-button-info > .p-button.p-button-outlined:not(:disabled):hover, +.p-splitbutton.p-button-info > .p-button.p-button-outlined:not(:disabled):hover { + background: rgba(2, 136, 209, 0.04); + color: #0288d1; + border: 1px solid; + } + .p-button.p-button-info.p-button-outlined:not(:disabled):active, +.p-buttonset.p-button-info > .p-button.p-button-outlined:not(:disabled):active, +.p-splitbutton.p-button-info > .p-button.p-button-outlined:not(:disabled):active { + background: rgba(2, 136, 209, 0.16); + color: #0288d1; + border: 1px solid; + } + .p-button.p-button-info.p-button-text, +.p-buttonset.p-button-info > .p-button.p-button-text, +.p-splitbutton.p-button-info > .p-button.p-button-text { + background-color: transparent; + color: #0288d1; + border-color: transparent; + } + .p-button.p-button-info.p-button-text:not(:disabled):hover, +.p-buttonset.p-button-info > .p-button.p-button-text:not(:disabled):hover, +.p-splitbutton.p-button-info > .p-button.p-button-text:not(:disabled):hover { + background: rgba(2, 136, 209, 0.04); + border-color: transparent; + color: #0288d1; + } + .p-button.p-button-info.p-button-text:not(:disabled):active, +.p-buttonset.p-button-info > .p-button.p-button-text:not(:disabled):active, +.p-splitbutton.p-button-info > .p-button.p-button-text:not(:disabled):active { + background: rgba(2, 136, 209, 0.16); + border-color: transparent; + color: #0288d1; + } + + .p-button.p-button-success, +.p-buttonset.p-button-success > .p-button, +.p-splitbutton.p-button-success > .p-button { + color: #ffffff; + background: #689f38; + border: 1px solid #689f38; + } + .p-button.p-button-success:not(:disabled):hover, +.p-buttonset.p-button-success > .p-button:not(:disabled):hover, +.p-splitbutton.p-button-success > .p-button:not(:disabled):hover { + background: #5e8f32; + color: #ffffff; + border-color: #5e8f32; + } + .p-button.p-button-success:not(:disabled):focus, +.p-buttonset.p-button-success > .p-button:not(:disabled):focus, +.p-splitbutton.p-button-success > .p-button:not(:disabled):focus { + box-shadow: 0 0 0 0.2rem #c2e0a8; + } + .p-button.p-button-success:not(:disabled):active, +.p-buttonset.p-button-success > .p-button:not(:disabled):active, +.p-splitbutton.p-button-success > .p-button:not(:disabled):active { + background: #537f2d; + color: #ffffff; + border-color: #537f2d; + } + .p-button.p-button-success.p-button-outlined, +.p-buttonset.p-button-success > .p-button.p-button-outlined, +.p-splitbutton.p-button-success > .p-button.p-button-outlined { + background-color: transparent; + color: #689f38; + border: 1px solid; + } + .p-button.p-button-success.p-button-outlined:not(:disabled):hover, +.p-buttonset.p-button-success > .p-button.p-button-outlined:not(:disabled):hover, +.p-splitbutton.p-button-success > .p-button.p-button-outlined:not(:disabled):hover { + background: rgba(104, 159, 56, 0.04); + color: #689f38; + border: 1px solid; + } + .p-button.p-button-success.p-button-outlined:not(:disabled):active, +.p-buttonset.p-button-success > .p-button.p-button-outlined:not(:disabled):active, +.p-splitbutton.p-button-success > .p-button.p-button-outlined:not(:disabled):active { + background: rgba(104, 159, 56, 0.16); + color: #689f38; + border: 1px solid; + } + .p-button.p-button-success.p-button-text, +.p-buttonset.p-button-success > .p-button.p-button-text, +.p-splitbutton.p-button-success > .p-button.p-button-text { + background-color: transparent; + color: #689f38; + border-color: transparent; + } + .p-button.p-button-success.p-button-text:not(:disabled):hover, +.p-buttonset.p-button-success > .p-button.p-button-text:not(:disabled):hover, +.p-splitbutton.p-button-success > .p-button.p-button-text:not(:disabled):hover { + background: rgba(104, 159, 56, 0.04); + border-color: transparent; + color: #689f38; + } + .p-button.p-button-success.p-button-text:not(:disabled):active, +.p-buttonset.p-button-success > .p-button.p-button-text:not(:disabled):active, +.p-splitbutton.p-button-success > .p-button.p-button-text:not(:disabled):active { + background: rgba(104, 159, 56, 0.16); + border-color: transparent; + color: #689f38; + } + + .p-button.p-button-warning, +.p-buttonset.p-button-warning > .p-button, +.p-splitbutton.p-button-warning > .p-button { + color: #212529; + background: #fbc02d; + border: 1px solid #fbc02d; + } + .p-button.p-button-warning:not(:disabled):hover, +.p-buttonset.p-button-warning > .p-button:not(:disabled):hover, +.p-splitbutton.p-button-warning > .p-button:not(:disabled):hover { + background: #fab710; + color: #212529; + border-color: #fab710; + } + .p-button.p-button-warning:not(:disabled):focus, +.p-buttonset.p-button-warning > .p-button:not(:disabled):focus, +.p-splitbutton.p-button-warning > .p-button:not(:disabled):focus { + box-shadow: 0 0 0 0.2rem #fde6ab; + } + .p-button.p-button-warning:not(:disabled):active, +.p-buttonset.p-button-warning > .p-button:not(:disabled):active, +.p-splitbutton.p-button-warning > .p-button:not(:disabled):active { + background: #e8a704; + color: #212529; + border-color: #e8a704; + } + .p-button.p-button-warning.p-button-outlined, +.p-buttonset.p-button-warning > .p-button.p-button-outlined, +.p-splitbutton.p-button-warning > .p-button.p-button-outlined { + background-color: transparent; + color: #fbc02d; + border: 1px solid; + } + .p-button.p-button-warning.p-button-outlined:not(:disabled):hover, +.p-buttonset.p-button-warning > .p-button.p-button-outlined:not(:disabled):hover, +.p-splitbutton.p-button-warning > .p-button.p-button-outlined:not(:disabled):hover { + background: rgba(251, 192, 45, 0.04); + color: #fbc02d; + border: 1px solid; + } + .p-button.p-button-warning.p-button-outlined:not(:disabled):active, +.p-buttonset.p-button-warning > .p-button.p-button-outlined:not(:disabled):active, +.p-splitbutton.p-button-warning > .p-button.p-button-outlined:not(:disabled):active { + background: rgba(251, 192, 45, 0.16); + color: #fbc02d; + border: 1px solid; + } + .p-button.p-button-warning.p-button-text, +.p-buttonset.p-button-warning > .p-button.p-button-text, +.p-splitbutton.p-button-warning > .p-button.p-button-text { + background-color: transparent; + color: #fbc02d; + border-color: transparent; + } + .p-button.p-button-warning.p-button-text:not(:disabled):hover, +.p-buttonset.p-button-warning > .p-button.p-button-text:not(:disabled):hover, +.p-splitbutton.p-button-warning > .p-button.p-button-text:not(:disabled):hover { + background: rgba(251, 192, 45, 0.04); + border-color: transparent; + color: #fbc02d; + } + .p-button.p-button-warning.p-button-text:not(:disabled):active, +.p-buttonset.p-button-warning > .p-button.p-button-text:not(:disabled):active, +.p-splitbutton.p-button-warning > .p-button.p-button-text:not(:disabled):active { + background: rgba(251, 192, 45, 0.16); + border-color: transparent; + color: #fbc02d; + } + + .p-button.p-button-help, +.p-buttonset.p-button-help > .p-button, +.p-splitbutton.p-button-help > .p-button { + color: #ffffff; + background: #9c27b0; + border: 1px solid #9c27b0; + } + .p-button.p-button-help:not(:disabled):hover, +.p-buttonset.p-button-help > .p-button:not(:disabled):hover, +.p-splitbutton.p-button-help > .p-button:not(:disabled):hover { + background: #8c239e; + color: #ffffff; + border-color: #8c239e; + } + .p-button.p-button-help:not(:disabled):focus, +.p-buttonset.p-button-help > .p-button:not(:disabled):focus, +.p-splitbutton.p-button-help > .p-button:not(:disabled):focus { + box-shadow: 0 0 0 0.2rem #df9eea; + } + .p-button.p-button-help:not(:disabled):active, +.p-buttonset.p-button-help > .p-button:not(:disabled):active, +.p-splitbutton.p-button-help > .p-button:not(:disabled):active { + background: #7d1f8d; + color: #ffffff; + border-color: #7d1f8d; + } + .p-button.p-button-help.p-button-outlined, +.p-buttonset.p-button-help > .p-button.p-button-outlined, +.p-splitbutton.p-button-help > .p-button.p-button-outlined { + background-color: transparent; + color: #9c27b0; + border: 1px solid; + } + .p-button.p-button-help.p-button-outlined:not(:disabled):hover, +.p-buttonset.p-button-help > .p-button.p-button-outlined:not(:disabled):hover, +.p-splitbutton.p-button-help > .p-button.p-button-outlined:not(:disabled):hover { + background: rgba(156, 39, 176, 0.04); + color: #9c27b0; + border: 1px solid; + } + .p-button.p-button-help.p-button-outlined:not(:disabled):active, +.p-buttonset.p-button-help > .p-button.p-button-outlined:not(:disabled):active, +.p-splitbutton.p-button-help > .p-button.p-button-outlined:not(:disabled):active { + background: rgba(156, 39, 176, 0.16); + color: #9c27b0; + border: 1px solid; + } + .p-button.p-button-help.p-button-text, +.p-buttonset.p-button-help > .p-button.p-button-text, +.p-splitbutton.p-button-help > .p-button.p-button-text { + background-color: transparent; + color: #9c27b0; + border-color: transparent; + } + .p-button.p-button-help.p-button-text:not(:disabled):hover, +.p-buttonset.p-button-help > .p-button.p-button-text:not(:disabled):hover, +.p-splitbutton.p-button-help > .p-button.p-button-text:not(:disabled):hover { + background: rgba(156, 39, 176, 0.04); + border-color: transparent; + color: #9c27b0; + } + .p-button.p-button-help.p-button-text:not(:disabled):active, +.p-buttonset.p-button-help > .p-button.p-button-text:not(:disabled):active, +.p-splitbutton.p-button-help > .p-button.p-button-text:not(:disabled):active { + background: rgba(156, 39, 176, 0.16); + border-color: transparent; + color: #9c27b0; + } + + .p-button.p-button-danger, +.p-buttonset.p-button-danger > .p-button, +.p-splitbutton.p-button-danger > .p-button { + color: #ffffff; + background: #d32f2f; + border: 1px solid #d32f2f; + } + .p-button.p-button-danger:not(:disabled):hover, +.p-buttonset.p-button-danger > .p-button:not(:disabled):hover, +.p-splitbutton.p-button-danger > .p-button:not(:disabled):hover { + background: #c02929; + color: #ffffff; + border-color: #c02929; + } + .p-button.p-button-danger:not(:disabled):focus, +.p-buttonset.p-button-danger > .p-button:not(:disabled):focus, +.p-splitbutton.p-button-danger > .p-button:not(:disabled):focus { + box-shadow: 0 0 0 0.2rem #edacac; + } + .p-button.p-button-danger:not(:disabled):active, +.p-buttonset.p-button-danger > .p-button:not(:disabled):active, +.p-splitbutton.p-button-danger > .p-button:not(:disabled):active { + background: #aa2424; + color: #ffffff; + border-color: #aa2424; + } + .p-button.p-button-danger.p-button-outlined, +.p-buttonset.p-button-danger > .p-button.p-button-outlined, +.p-splitbutton.p-button-danger > .p-button.p-button-outlined { + background-color: transparent; + color: #d32f2f; + border: 1px solid; + } + .p-button.p-button-danger.p-button-outlined:not(:disabled):hover, +.p-buttonset.p-button-danger > .p-button.p-button-outlined:not(:disabled):hover, +.p-splitbutton.p-button-danger > .p-button.p-button-outlined:not(:disabled):hover { + background: rgba(211, 47, 47, 0.04); + color: #d32f2f; + border: 1px solid; + } + .p-button.p-button-danger.p-button-outlined:not(:disabled):active, +.p-buttonset.p-button-danger > .p-button.p-button-outlined:not(:disabled):active, +.p-splitbutton.p-button-danger > .p-button.p-button-outlined:not(:disabled):active { + background: rgba(211, 47, 47, 0.16); + color: #d32f2f; + border: 1px solid; + } + .p-button.p-button-danger.p-button-text, +.p-buttonset.p-button-danger > .p-button.p-button-text, +.p-splitbutton.p-button-danger > .p-button.p-button-text { + background-color: transparent; + color: #d32f2f; + border-color: transparent; + } + .p-button.p-button-danger.p-button-text:not(:disabled):hover, +.p-buttonset.p-button-danger > .p-button.p-button-text:not(:disabled):hover, +.p-splitbutton.p-button-danger > .p-button.p-button-text:not(:disabled):hover { + background: rgba(211, 47, 47, 0.04); + border-color: transparent; + color: #d32f2f; + } + .p-button.p-button-danger.p-button-text:not(:disabled):active, +.p-buttonset.p-button-danger > .p-button.p-button-text:not(:disabled):active, +.p-splitbutton.p-button-danger > .p-button.p-button-text:not(:disabled):active { + background: rgba(211, 47, 47, 0.16); + border-color: transparent; + color: #d32f2f; + } + + .p-button.p-button-link { + color: #d29d00; + background: transparent; + border: transparent; + } + .p-button.p-button-link:not(:disabled):hover { + background: transparent; + color: #d29d00; + border-color: transparent; + } + .p-button.p-button-link:not(:disabled):hover .p-button-label { + text-decoration: underline; + } + .p-button.p-button-link:not(:disabled):focus { + background: transparent; + box-shadow: 0 0 0 0.2rem #ffe69c; + border-color: transparent; + } + .p-button.p-button-link:not(:disabled):active { + background: transparent; + color: #d29d00; + border-color: transparent; + } + + .p-speeddial-button.p-button.p-button-icon-only { + width: 4rem; + height: 4rem; + } + .p-speeddial-button.p-button.p-button-icon-only .p-button-icon { + font-size: 1.3rem; + } + .p-speeddial-button.p-button.p-button-icon-only .p-icon { + width: 1.3rem; + height: 1.3rem; + } + + .p-speeddial-list { + outline: 0 none; + } + + .p-speeddial-item.p-focus > .p-speeddial-action { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + + .p-speeddial-action { + width: 3rem; + height: 3rem; + background: #495057; + color: #fff; + } + .p-speeddial-action:hover { + background: #343a40; + color: #fff; + } + + .p-speeddial-direction-up .p-speeddial-item { + margin: 0.25rem 0; + } + .p-speeddial-direction-up .p-speeddial-item:first-child { + margin-bottom: 0.5rem; + } + + .p-speeddial-direction-down .p-speeddial-item { + margin: 0.25rem 0; + } + .p-speeddial-direction-down .p-speeddial-item:first-child { + margin-top: 0.5rem; + } + + .p-speeddial-direction-left .p-speeddial-item { + margin: 0 0.25rem; + } + .p-speeddial-direction-left .p-speeddial-item:first-child { + margin-right: 0.5rem; + } + + .p-speeddial-direction-right .p-speeddial-item { + margin: 0 0.25rem; + } + .p-speeddial-direction-right .p-speeddial-item:first-child { + margin-left: 0.5rem; + } + + .p-speeddial-circle .p-speeddial-item, +.p-speeddial-semi-circle .p-speeddial-item, +.p-speeddial-quarter-circle .p-speeddial-item { + margin: 0; + } + .p-speeddial-circle .p-speeddial-item:first-child, .p-speeddial-circle .p-speeddial-item:last-child, +.p-speeddial-semi-circle .p-speeddial-item:first-child, +.p-speeddial-semi-circle .p-speeddial-item:last-child, +.p-speeddial-quarter-circle .p-speeddial-item:first-child, +.p-speeddial-quarter-circle .p-speeddial-item:last-child { + margin: 0; + } + + .p-speeddial-mask { + background-color: rgba(0, 0, 0, 0.4); + } + + .p-splitbutton { + border-radius: 3px; + } + .p-splitbutton.p-button-outlined > .p-button { + background-color: transparent; + color: #FFC107; + border: 1px solid; + } + .p-splitbutton.p-button-outlined > .p-button:not(:disabled):hover { + background: rgba(255, 193, 7, 0.04); + color: #FFC107; + } + .p-splitbutton.p-button-outlined > .p-button:not(:disabled):active { + background: rgba(255, 193, 7, 0.16); + color: #FFC107; + } + .p-splitbutton.p-button-outlined.p-button-plain > .p-button { + color: #6c757d; + border-color: #6c757d; + } + .p-splitbutton.p-button-outlined.p-button-plain > .p-button:not(:disabled):hover { + background: #e9ecef; + color: #6c757d; + } + .p-splitbutton.p-button-outlined.p-button-plain > .p-button:not(:disabled):active { + background: #dee2e6; + color: #6c757d; + } + .p-splitbutton.p-button-text > .p-button { + background-color: transparent; + color: #FFC107; + border-color: transparent; + } + .p-splitbutton.p-button-text > .p-button:not(:disabled):hover { + background: rgba(255, 193, 7, 0.04); + color: #FFC107; + border-color: transparent; + } + .p-splitbutton.p-button-text > .p-button:not(:disabled):active { + background: rgba(255, 193, 7, 0.16); + color: #FFC107; + border-color: transparent; + } + .p-splitbutton.p-button-text.p-button-plain > .p-button { + color: #6c757d; + } + .p-splitbutton.p-button-text.p-button-plain > .p-button:not(:disabled):hover { + background: #e9ecef; + color: #6c757d; + } + .p-splitbutton.p-button-text.p-button-plain > .p-button:not(:disabled):active { + background: #dee2e6; + color: #6c757d; + } + .p-splitbutton.p-button-raised { + box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + } + .p-splitbutton.p-button-rounded { + border-radius: 2rem; + } + .p-splitbutton.p-button-rounded > .p-button { + border-radius: 2rem; + } + .p-splitbutton.p-button-sm > .p-button { + font-size: 0.875rem; + padding: 0.4375rem 0.875rem; + } + .p-splitbutton.p-button-sm > .p-button .p-button-icon { + font-size: 0.875rem; + } + .p-splitbutton.p-button-lg > .p-button { + font-size: 1.25rem; + padding: 0.625rem 1.25rem; + } + .p-splitbutton.p-button-lg > .p-button .p-button-icon { + font-size: 1.25rem; + } + + .p-splitbutton.p-button-secondary.p-button-outlined > .p-button { + background-color: transparent; + color: #607d8b; + border: 1px solid; + } + .p-splitbutton.p-button-secondary.p-button-outlined > .p-button:not(:disabled):hover { + background: rgba(96, 125, 139, 0.04); + color: #607d8b; + } + .p-splitbutton.p-button-secondary.p-button-outlined > .p-button:not(:disabled):active { + background: rgba(96, 125, 139, 0.16); + color: #607d8b; + } + .p-splitbutton.p-button-secondary.p-button-text > .p-button { + background-color: transparent; + color: #607d8b; + border-color: transparent; + } + .p-splitbutton.p-button-secondary.p-button-text > .p-button:not(:disabled):hover { + background: rgba(96, 125, 139, 0.04); + border-color: transparent; + color: #607d8b; + } + .p-splitbutton.p-button-secondary.p-button-text > .p-button:not(:disabled):active { + background: rgba(96, 125, 139, 0.16); + border-color: transparent; + color: #607d8b; + } + + .p-splitbutton.p-button-info.p-button-outlined > .p-button { + background-color: transparent; + color: #0288d1; + border: 1px solid; + } + .p-splitbutton.p-button-info.p-button-outlined > .p-button:not(:disabled):hover { + background: rgba(2, 136, 209, 0.04); + color: #0288d1; + } + .p-splitbutton.p-button-info.p-button-outlined > .p-button:not(:disabled):active { + background: rgba(2, 136, 209, 0.16); + color: #0288d1; + } + .p-splitbutton.p-button-info.p-button-text > .p-button { + background-color: transparent; + color: #0288d1; + border-color: transparent; + } + .p-splitbutton.p-button-info.p-button-text > .p-button:not(:disabled):hover { + background: rgba(2, 136, 209, 0.04); + border-color: transparent; + color: #0288d1; + } + .p-splitbutton.p-button-info.p-button-text > .p-button:not(:disabled):active { + background: rgba(2, 136, 209, 0.16); + border-color: transparent; + color: #0288d1; + } + + .p-splitbutton.p-button-success.p-button-outlined > .p-button { + background-color: transparent; + color: #689f38; + border: 1px solid; + } + .p-splitbutton.p-button-success.p-button-outlined > .p-button:not(:disabled):hover { + background: rgba(104, 159, 56, 0.04); + color: #689f38; + } + .p-splitbutton.p-button-success.p-button-outlined > .p-button:not(:disabled):active { + background: rgba(104, 159, 56, 0.16); + color: #689f38; + } + .p-splitbutton.p-button-success.p-button-text > .p-button { + background-color: transparent; + color: #689f38; + border-color: transparent; + } + .p-splitbutton.p-button-success.p-button-text > .p-button:not(:disabled):hover { + background: rgba(104, 159, 56, 0.04); + border-color: transparent; + color: #689f38; + } + .p-splitbutton.p-button-success.p-button-text > .p-button:not(:disabled):active { + background: rgba(104, 159, 56, 0.16); + border-color: transparent; + color: #689f38; + } + + .p-splitbutton.p-button-warning.p-button-outlined > .p-button { + background-color: transparent; + color: #fbc02d; + border: 1px solid; + } + .p-splitbutton.p-button-warning.p-button-outlined > .p-button:not(:disabled):hover { + background: rgba(251, 192, 45, 0.04); + color: #fbc02d; + } + .p-splitbutton.p-button-warning.p-button-outlined > .p-button:not(:disabled):active { + background: rgba(251, 192, 45, 0.16); + color: #fbc02d; + } + .p-splitbutton.p-button-warning.p-button-text > .p-button { + background-color: transparent; + color: #fbc02d; + border-color: transparent; + } + .p-splitbutton.p-button-warning.p-button-text > .p-button:not(:disabled):hover { + background: rgba(251, 192, 45, 0.04); + border-color: transparent; + color: #fbc02d; + } + .p-splitbutton.p-button-warning.p-button-text > .p-button:not(:disabled):active { + background: rgba(251, 192, 45, 0.16); + border-color: transparent; + color: #fbc02d; + } + + .p-splitbutton.p-button-help.p-button-outlined > .p-button { + background-color: transparent; + color: #9c27b0; + border: 1px solid; + } + .p-splitbutton.p-button-help.p-button-outlined > .p-button:not(:disabled):hover { + background: rgba(156, 39, 176, 0.04); + color: #9c27b0; + } + .p-splitbutton.p-button-help.p-button-outlined > .p-button:not(:disabled):active { + background: rgba(156, 39, 176, 0.16); + color: #9c27b0; + } + .p-splitbutton.p-button-help.p-button-text > .p-button { + background-color: transparent; + color: #9c27b0; + border-color: transparent; + } + .p-splitbutton.p-button-help.p-button-text > .p-button:not(:disabled):hover { + background: rgba(156, 39, 176, 0.04); + border-color: transparent; + color: #9c27b0; + } + .p-splitbutton.p-button-help.p-button-text > .p-button:not(:disabled):active { + background: rgba(156, 39, 176, 0.16); + border-color: transparent; + color: #9c27b0; + } + + .p-splitbutton.p-button-danger.p-button-outlined > .p-button { + background-color: transparent; + color: #d32f2f; + border: 1px solid; + } + .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(:disabled):hover { + background: rgba(211, 47, 47, 0.04); + color: #d32f2f; + } + .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(:disabled):active { + background: rgba(211, 47, 47, 0.16); + color: #d32f2f; + } + .p-splitbutton.p-button-danger.p-button-text > .p-button { + background-color: transparent; + color: #d32f2f; + border-color: transparent; + } + .p-splitbutton.p-button-danger.p-button-text > .p-button:not(:disabled):hover { + background: rgba(211, 47, 47, 0.04); + border-color: transparent; + color: #d32f2f; + } + .p-splitbutton.p-button-danger.p-button-text > .p-button:not(:disabled):active { + background: rgba(211, 47, 47, 0.16); + border-color: transparent; + color: #d32f2f; + } + + .p-carousel .p-carousel-content .p-carousel-prev, +.p-carousel .p-carousel-content .p-carousel-next { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + margin: 0.5rem; + } + .p-carousel .p-carousel-content .p-carousel-prev:enabled:hover, +.p-carousel .p-carousel-content .p-carousel-next:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-carousel .p-carousel-content .p-carousel-prev:focus-visible, +.p-carousel .p-carousel-content .p-carousel-next:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-carousel .p-carousel-indicators { + padding: 1rem; + } + .p-carousel .p-carousel-indicators .p-carousel-indicator { + margin-right: 0.5rem; + margin-bottom: 0.5rem; + } + .p-carousel .p-carousel-indicators .p-carousel-indicator button { + background-color: #e9ecef; + width: 2rem; + height: 0.5rem; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + border-radius: 0; + } + .p-carousel .p-carousel-indicators .p-carousel-indicator button:hover { + background: #dee2e6; + } + .p-carousel .p-carousel-indicators .p-carousel-indicator.p-highlight button { + background: #FFF3E0; + color: #495057; + } + + .p-datatable .p-paginator-top { + border-width: 0 0 1px 0; + border-radius: 0; + } + .p-datatable .p-paginator-bottom { + border-width: 0 0 1px 0; + border-radius: 0; + } + .p-datatable .p-datatable-header { + background: #f8f9fa; + color: #495057; + border: 1px solid #e9ecef; + border-width: 1px 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; + } + .p-datatable .p-datatable-footer { + background: #f8f9fa; + color: #495057; + border: 1px solid #e9ecef; + border-width: 0 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; + } + .p-datatable .p-datatable-thead > tr > th { + text-align: left; + padding: 1rem 1rem; + border: 1px solid #e9ecef; + border-width: 0 0 1px 0; + font-weight: 600; + color: #495057; + background: #f8f9fa; + transition: box-shadow 0.2s; + } + .p-datatable .p-datatable-tfoot > tr > td { + text-align: left; + padding: 1rem 1rem; + border: 1px solid #e9ecef; + border-width: 0 0 1px 0; + font-weight: 600; + color: #495057; + background: #f8f9fa; + } + .p-datatable .p-sortable-column .p-sortable-column-icon { + color: #6c757d; + margin-left: 0.5rem; + } + .p-datatable .p-sortable-column .p-sortable-column-badge { + border-radius: 50%; + height: 1.143rem; + min-width: 1.143rem; + line-height: 1.143rem; + color: #495057; + background: #FFF3E0; + margin-left: 0.5rem; + } + .p-datatable .p-sortable-column:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-datatable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon { + color: #6c757d; + } + .p-datatable .p-sortable-column.p-highlight { + background: #f8f9fa; + color: #FFC107; + } + .p-datatable .p-sortable-column.p-highlight .p-sortable-column-icon { + color: #FFC107; + } + .p-datatable .p-sortable-column.p-highlight:hover { + background: #e9ecef; + color: #FFC107; + } + .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon { + color: #FFC107; + } + .p-datatable .p-sortable-column:focus-visible { + box-shadow: inset 0 0 0 0.15rem #ffe69c; + outline: 0 none; + } + .p-datatable .p-datatable-tbody > tr { + background: #ffffff; + color: #495057; + transition: box-shadow 0.2s; + } + .p-datatable .p-datatable-tbody > tr > td { + text-align: left; + border: 1px solid #e9ecef; + border-width: 0 0 1px 0; + padding: 1rem 1rem; + } + .p-datatable .p-datatable-tbody > tr > td .p-row-toggler, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-datatable .p-datatable-tbody > tr > td .p-row-toggler:enabled:hover, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init:enabled:hover, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save:enabled:hover, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-datatable .p-datatable-tbody > tr > td .p-row-toggler:focus-visible, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init:focus-visible, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save:focus-visible, +.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-datatable .p-datatable-tbody > tr > td .p-row-editor-save { + margin-right: 0.5rem; + } + .p-datatable .p-datatable-tbody > tr:focus-visible { + outline: 0.15rem solid #ffe69c; + outline-offset: -0.15rem; + } + .p-datatable .p-datatable-tbody > tr.p-highlight { + background: #FFF3E0; + color: #495057; + } + .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-top > td { + box-shadow: inset 0 2px 0 0 #FFF3E0; + } + .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-bottom > td { + box-shadow: inset 0 -2px 0 0 #FFF3E0; + } + .p-datatable.p-datatable-hoverable-rows .p-datatable-tbody > tr:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-datatable .p-column-resizer-helper { + background: #FFC107; + } + .p-datatable .p-datatable-scrollable-header, +.p-datatable .p-datatable-scrollable-footer { + background: #f8f9fa; + } + .p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-datatable-table > .p-datatable-thead, +.p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-datatable-table > .p-datatable-tfoot, .p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-scroller-viewport > .p-scroller > .p-datatable-table > .p-datatable-thead, +.p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-scroller-viewport > .p-scroller > .p-datatable-table > .p-datatable-tfoot { + background-color: #f8f9fa; + } + .p-datatable .p-datatable-loading-icon { + font-size: 2rem; + } + .p-datatable.p-datatable-gridlines .p-datatable-header { + border-width: 1px 1px 0 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-footer { + border-width: 0 1px 1px 1px; + } + .p-datatable.p-datatable-gridlines .p-paginator-top { + border-width: 0 1px 0 1px; + } + .p-datatable.p-datatable-gridlines .p-paginator-bottom { + border-width: 0 1px 1px 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-thead > tr > th { + border-width: 1px 0 1px 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-thead > tr > th:last-child { + border-width: 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr > td { + border-width: 1px 0 0 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr > td:last-child { + border-width: 1px 1px 0 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr:last-child > td { + border-width: 1px 0 1px 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr:last-child > td:last-child { + border-width: 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-tfoot > tr > td { + border-width: 1px 0 1px 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-tfoot > tr > td:last-child { + border-width: 1px 1px 1px 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-thead + .p-datatable-tfoot > tr > td { + border-width: 0 0 1px 1px; + } + .p-datatable.p-datatable-gridlines .p-datatable-thead + .p-datatable-tfoot > tr > td:last-child { + border-width: 0 1px 1px 1px; + } + .p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody > tr > td { + border-width: 0 0 1px 1px; + } + .p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody > tr > td:last-child { + border-width: 0 1px 1px 1px; + } + .p-datatable.p-datatable-gridlines:has(.p-datatable-tbody):has(.p-datatable-tfoot) .p-datatable-tbody > tr:last-child > td { + border-width: 0 0 0 1px; + } + .p-datatable.p-datatable-gridlines:has(.p-datatable-tbody):has(.p-datatable-tfoot) .p-datatable-tbody > tr:last-child > td:last-child { + border-width: 0 1px 0 1px; + } + .p-datatable.p-datatable-striped .p-datatable-tbody > tr:nth-child(even) { + background: #fcfcfc; + } + .p-datatable.p-datatable-striped .p-datatable-tbody > tr:nth-child(even).p-highlight { + background: #FFF3E0; + color: #495057; + } + .p-datatable.p-datatable-striped .p-datatable-tbody > tr:nth-child(even).p-highlight .p-row-toggler { + color: #495057; + } + .p-datatable.p-datatable-striped .p-datatable-tbody > tr:nth-child(even).p-highlight .p-row-toggler:hover { + color: #495057; + } + .p-datatable.p-datatable-sm .p-datatable-header { + padding: 0.5rem 0.5rem; + } + .p-datatable.p-datatable-sm .p-datatable-thead > tr > th { + padding: 0.5rem 0.5rem; + } + .p-datatable.p-datatable-sm .p-datatable-tbody > tr > td { + padding: 0.5rem 0.5rem; + } + .p-datatable.p-datatable-sm .p-datatable-tfoot > tr > td { + padding: 0.5rem 0.5rem; + } + .p-datatable.p-datatable-sm .p-datatable-footer { + padding: 0.5rem 0.5rem; + } + .p-datatable.p-datatable-lg .p-datatable-header { + padding: 1.25rem 1.25rem; + } + .p-datatable.p-datatable-lg .p-datatable-thead > tr > th { + padding: 1.25rem 1.25rem; + } + .p-datatable.p-datatable-lg .p-datatable-tbody > tr > td { + padding: 1.25rem 1.25rem; + } + .p-datatable.p-datatable-lg .p-datatable-tfoot > tr > td { + padding: 1.25rem 1.25rem; + } + .p-datatable.p-datatable-lg .p-datatable-footer { + padding: 1.25rem 1.25rem; + } + + .p-dataview .p-paginator-top { + border-width: 0 0 1px 0; + border-radius: 0; + } + .p-dataview .p-paginator-bottom { + border-width: 0 0 1px 0; + border-radius: 0; + } + .p-dataview .p-dataview-header { + background: #f8f9fa; + color: #495057; + border: 1px solid #e9ecef; + border-width: 1px 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; + } + .p-dataview .p-dataview-content { + background: #ffffff; + color: #495057; + border: 0 none; + padding: 0; + } + .p-dataview .p-dataview-footer { + background: #f8f9fa; + color: #495057; + border: 1px solid #e9ecef; + border-width: 0 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + } + .p-dataview .p-dataview-loading-icon { + font-size: 2rem; + } + .p-dataview .p-dataview-emptymessage { + padding: 1rem; + } + + .p-column-filter-row .p-column-filter-menu-button, +.p-column-filter-row .p-column-filter-clear-button { + margin-left: 0.5rem; + } + + .p-column-filter-menu-button { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-column-filter-menu-button:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-column-filter-menu-button.p-column-filter-menu-button-open, .p-column-filter-menu-button.p-column-filter-menu-button-open:hover { + background: #e9ecef; + color: #495057; + } + .p-column-filter-menu-button.p-column-filter-menu-button-active, .p-column-filter-menu-button.p-column-filter-menu-button-active:hover { + background: #FFF3E0; + color: #495057; + } + .p-column-filter-menu-button:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + + .p-column-filter-clear-button { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-column-filter-clear-button:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-column-filter-clear-button:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + + .p-column-filter-overlay { + background: #ffffff; + color: #495057; + border: 0 none; + border-radius: 3px; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + min-width: 12.5rem; + } + .p-column-filter-overlay .p-column-filter-row-items { + padding: 0.5rem 0; + } + .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item { + margin: 0; + padding: 0.5rem 1rem; + border: 0 none; + color: #495057; + background: transparent; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:not(.p-highlight):not(.p-disabled):hover { + color: #495057; + background: #e9ecef; + } + .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem #ffe69c; + } + .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-separator { + border-top: 1px solid #dee2e6; + margin: 0.25rem 0; + } + + .p-column-filter-overlay-menu .p-column-filter-operator { + padding: 0.5rem 1rem; + border-bottom: 0 none; + color: #495057; + background: #f8f9fa; + margin: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-column-filter-overlay-menu .p-column-filter-constraint { + padding: 1rem; + border-bottom: 1px solid #dee2e6; + } + .p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-matchmode-dropdown { + margin-bottom: 0.5rem; + } + .p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-remove-button { + margin-top: 0.5rem; + } + .p-column-filter-overlay-menu .p-column-filter-constraint:last-child { + border-bottom: 0 none; + } + .p-column-filter-overlay-menu .p-column-filter-add-rule { + padding: 0.5rem 1rem; + } + .p-column-filter-overlay-menu .p-column-filter-buttonbar { + padding: 1rem; + } + + .p-orderlist .p-orderlist-controls { + padding: 1rem; + } + .p-orderlist .p-orderlist-controls .p-button { + margin-bottom: 0.5rem; + } + .p-orderlist .p-orderlist-header { + background: #f8f9fa; + color: #495057; + border: 1px solid #dee2e6; + padding: 1rem; + border-bottom: 0 none; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-orderlist .p-orderlist-header .p-orderlist-title { + font-weight: 600; + } + .p-orderlist .p-orderlist-filter-container { + padding: 1rem; + background: #ffffff; + border: 1px solid #dee2e6; + border-bottom: 0 none; + } + .p-orderlist .p-orderlist-filter-container .p-orderlist-filter-input { + padding-right: 1.5rem; + } + .p-orderlist .p-orderlist-filter-container .p-orderlist-filter-icon { + right: 0.5rem; + color: #6c757d; + } + .p-orderlist .p-orderlist-list { + border: 1px solid #dee2e6; + background: #ffffff; + color: #495057; + padding: 0.5rem 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + outline: 0 none; + } + .p-orderlist .p-orderlist-list .p-orderlist-item { + padding: 0.5rem 1rem; + margin: 0; + border: 0 none; + color: #495057; + background: transparent; + transition: box-shadow 0.2s; + } + .p-orderlist .p-orderlist-list .p-orderlist-item:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-orderlist .p-orderlist-list .p-orderlist-item.p-focus { + color: #495057; + background: #dee2e6; + } + .p-orderlist .p-orderlist-list .p-orderlist-item.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-orderlist .p-orderlist-list .p-orderlist-item.p-highlight.p-focus { + background: #ebe0ce; + } + .p-orderlist .p-orderlist-list .p-orderlist-empty-message { + padding: 0.5rem 1rem; + color: #495057; + } + .p-orderlist .p-orderlist-list:not(.cdk-drop-list-dragging) .p-orderlist-item:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-orderlist.p-orderlist-striped .p-orderlist-list .p-orderlist-item:nth-child(even) { + background: #e9ecef; + } + .p-orderlist.p-orderlist-striped .p-orderlist-list .p-orderlist-item:nth-child(even):hover { + background: #e9ecef; + } + + .p-orderlist-item.cdk-drag-preview { + padding: 0.5rem 1rem; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + border: 0 none; + color: #495057; + background: #ffffff; + margin: 0; + } + + .p-organizationchart .p-organizationchart-node-content.p-organizationchart-selectable-node:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-organizationchart .p-organizationchart-node-content.p-highlight { + background: #FFF3E0; + color: #495057; + } + .p-organizationchart .p-organizationchart-node-content.p-highlight .p-node-toggler i { + color: #ffc261; + } + .p-organizationchart .p-organizationchart-line-down { + background: #dee2e6; + } + .p-organizationchart .p-organizationchart-line-left { + border-right: 1px solid #dee2e6; + border-color: #dee2e6; + } + .p-organizationchart .p-organizationchart-line-top { + border-top: 1px solid #dee2e6; + border-color: #dee2e6; + } + .p-organizationchart .p-organizationchart-node-content { + border: 1px solid #dee2e6; + background: #ffffff; + color: #495057; + padding: 1rem; + } + .p-organizationchart .p-organizationchart-node-content .p-node-toggler { + background: inherit; + color: inherit; + border-radius: 50%; + } + .p-organizationchart .p-organizationchart-node-content .p-node-toggler:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + + .p-paginator { + background: #ffffff; + color: #6c757d; + border: solid #e9ecef; + border-width: 0; + padding: 0.5rem 1rem; + border-radius: 3px; + } + .p-paginator .p-paginator-first, +.p-paginator .p-paginator-prev, +.p-paginator .p-paginator-next, +.p-paginator .p-paginator-last { + background-color: transparent; + border: 0 none; + color: #6c757d; + min-width: 2.357rem; + height: 2.357rem; + margin: 0.143rem; + transition: box-shadow 0.2s; + border-radius: 3px; + } + .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover, +.p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover, +.p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover, +.p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover { + background: #e9ecef; + border-color: transparent; + color: #495057; + } + .p-paginator .p-paginator-first { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + } + .p-paginator .p-paginator-last { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + .p-paginator .p-dropdown { + margin-left: 0.5rem; + margin-right: 0.5rem; + height: 2.357rem; + } + .p-paginator .p-dropdown .p-dropdown-label { + padding-right: 0; + } + .p-paginator .p-paginator-page-input { + margin-left: 0.5rem; + margin-right: 0.5rem; + } + .p-paginator .p-paginator-page-input .p-inputtext { + max-width: 2.357rem; + } + .p-paginator .p-paginator-current { + background-color: transparent; + border: 0 none; + color: #6c757d; + min-width: 2.357rem; + height: 2.357rem; + margin: 0.143rem; + padding: 0 0.5rem; + } + .p-paginator .p-paginator-pages .p-paginator-page { + background-color: transparent; + border: 0 none; + color: #6c757d; + min-width: 2.357rem; + height: 2.357rem; + margin: 0.143rem; + transition: box-shadow 0.2s; + border-radius: 3px; + } + .p-paginator .p-paginator-pages .p-paginator-page.p-highlight { + background: #FFF3E0; + border-color: #FFF3E0; + color: #495057; + } + .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover { + background: #e9ecef; + border-color: transparent; + color: #495057; + } + + .p-picklist .p-picklist-buttons { + padding: 1rem; + } + .p-picklist .p-picklist-buttons .p-button { + margin-bottom: 0.5rem; + } + .p-picklist .p-picklist-header { + background: #f8f9fa; + color: #495057; + border: 1px solid #dee2e6; + padding: 1rem; + border-bottom: 0 none; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-picklist .p-picklist-header .p-picklist-title { + font-weight: 600; + } + .p-picklist .p-picklist-filter-container { + padding: 1rem; + background: #ffffff; + border: 1px solid #dee2e6; + border-bottom: 0 none; + } + .p-picklist .p-picklist-filter-container .p-picklist-filter-input { + padding-right: 1.5rem; + } + .p-picklist .p-picklist-filter-container .p-picklist-filter-icon { + right: 0.5rem; + color: #6c757d; + } + .p-picklist .p-picklist-list { + border: 1px solid #dee2e6; + background: #ffffff; + color: #495057; + padding: 0.5rem 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + outline: 0 none; + } + .p-picklist .p-picklist-list .p-picklist-item { + padding: 0.5rem 1rem; + margin: 0; + border: 0 none; + color: #495057; + background: transparent; + transition: box-shadow 0.2s; + } + .p-picklist .p-picklist-list .p-picklist-item:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-picklist .p-picklist-list .p-picklist-item.p-focus { + color: #495057; + background: #dee2e6; + } + .p-picklist .p-picklist-list .p-picklist-item.p-highlight { + color: #495057; + background: #FFF3E0; + } + .p-picklist .p-picklist-list .p-picklist-item.p-highlight.p-focus { + background: #ebe0ce; + } + .p-picklist .p-picklist-list .p-picklist-empty-message { + padding: 0.5rem 1rem; + color: #495057; + } + .p-picklist .p-picklist-list:not(.cdk-drop-list-dragging) .p-picklist-item:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-picklist.p-picklist-striped .p-picklist-list .p-picklist-item:nth-child(even) { + background: #e9ecef; + } + .p-picklist.p-picklist-striped .p-picklist-list .p-picklist-item:nth-child(even):hover { + background: #e9ecef; + } + + .p-picklist-item.cdk-drag-preview { + padding: 0.5rem 1rem; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + border: 0 none; + color: #495057; + background: #ffffff; + margin: 0; + } + + .p-timeline .p-timeline-event-marker { + border: 2px solid #FFC107; + border-radius: 50%; + width: 1rem; + height: 1rem; + background-color: #ffffff; + } + .p-timeline .p-timeline-event-connector { + background-color: #dee2e6; + } + .p-timeline.p-timeline-vertical .p-timeline-event-opposite, +.p-timeline.p-timeline-vertical .p-timeline-event-content { + padding: 0 1rem; + } + .p-timeline.p-timeline-vertical .p-timeline-event-connector { + width: 2px; + } + .p-timeline.p-timeline-horizontal .p-timeline-event-opposite, +.p-timeline.p-timeline-horizontal .p-timeline-event-content { + padding: 1rem 0; + } + .p-timeline.p-timeline-horizontal .p-timeline-event-connector { + height: 2px; + } + + .p-tree { + border: 1px solid #dee2e6; + background: #ffffff; + color: #495057; + padding: 1rem; + border-radius: 3px; + } + .p-tree .p-tree-container .p-treenode { + padding: 0.143rem; + outline: 0 none; + } + .p-tree .p-tree-container .p-treenode:focus > .p-treenode-content { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem #ffe69c; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content { + border-radius: 3px; + transition: box-shadow 0.2s; + padding: 0; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler { + margin-right: 0.5rem; + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content .p-treenode-icon { + margin-right: 0.5rem; + color: #6c757d; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content .p-checkbox { + margin-right: 0.5rem; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content .p-checkbox .p-indeterminate .p-checkbox-icon { + color: #495057; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight { + background: #FFF3E0; + color: #495057; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler, +.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-treenode-icon { + color: #495057; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler:hover, +.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-treenode-icon:hover { + color: #495057; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content.p-treenode-selectable:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-tree .p-tree-container .p-treenode .p-treenode-content.p-treenode-dragover { + background: #e9ecef; + color: #495057; + } + .p-tree .p-tree-filter-container { + margin-bottom: 0.5rem; + } + .p-tree .p-tree-filter-container .p-tree-filter { + width: 100%; + padding-right: 1.5rem; + } + .p-tree .p-tree-filter-container .p-tree-filter-icon { + right: 0.5rem; + color: #6c757d; + } + .p-tree .p-treenode-children { + padding: 0 0 0 1rem; + } + .p-tree .p-tree-loading-icon { + font-size: 2rem; + } + .p-tree .p-tree-loading-icon.p-icon { + width: 2rem; + height: 2rem; + } + .p-tree .p-treenode-droppoint.p-treenode-droppoint-active { + background-color: #ffce80; + } + .p-tree.p-tree-horizontal .p-treenode .p-treenode-content { + border-radius: 3px; + border: 1px solid #dee2e6; + background-color: #ffffff; + color: #495057; + padding: 0; + transition: box-shadow 0.2s; + } + .p-tree.p-tree-horizontal .p-treenode .p-treenode-content.p-highlight { + background-color: #FFF3E0; + color: #495057; + } + .p-tree.p-tree-horizontal .p-treenode .p-treenode-content.p-highlight .p-treenode-icon { + color: #495057; + } + .p-tree.p-tree-horizontal .p-treenode .p-treenode-content .p-tree-toggler { + margin-right: 0.5rem; + } + .p-tree.p-tree-horizontal .p-treenode .p-treenode-content .p-treenode-icon { + color: #6c757d; + margin-right: 0.5rem; + } + .p-tree.p-tree-horizontal .p-treenode .p-treenode-content .p-checkbox { + margin-right: 0.5rem; + } + .p-tree.p-tree-horizontal .p-treenode .p-treenode-content .p-treenode-label:not(.p-highlight):hover { + background-color: inherit; + color: inherit; + } + .p-tree.p-tree-horizontal .p-treenode .p-treenode-content.p-treenode-selectable:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-tree.p-tree-horizontal .p-treenode .p-treenode-content:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + + .p-treetable .p-paginator-top { + border-width: 0 0 1px 0; + border-radius: 0; + } + .p-treetable .p-paginator-bottom { + border-width: 0 0 1px 0; + border-radius: 0; + } + .p-treetable .p-treetable-header { + background: #f8f9fa; + color: #495057; + border: 1px solid #e9ecef; + border-width: 1px 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; + } + .p-treetable .p-treetable-footer { + background: #f8f9fa; + color: #495057; + border: 1px solid #e9ecef; + border-width: 0 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; + } + .p-treetable .p-treetable-thead > tr > th { + text-align: left; + padding: 1rem 1rem; + border: 1px solid #e9ecef; + border-width: 0 0 1px 0; + font-weight: 600; + color: #495057; + background: #f8f9fa; + transition: box-shadow 0.2s; + } + .p-treetable .p-treetable-tfoot > tr > td { + text-align: left; + padding: 1rem 1rem; + border: 1px solid #e9ecef; + border-width: 0 0 1px 0; + font-weight: 600; + color: #495057; + background: #f8f9fa; + } + .p-treetable .p-sortable-column { + outline-color: #ffe69c; + } + .p-treetable .p-sortable-column .p-sortable-column-icon { + color: #6c757d; + margin-left: 0.5rem; + } + .p-treetable .p-sortable-column .p-sortable-column-badge { + border-radius: 50%; + height: 1.143rem; + min-width: 1.143rem; + line-height: 1.143rem; + color: #495057; + background: #FFF3E0; + margin-left: 0.5rem; + } + .p-treetable .p-sortable-column:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-treetable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon { + color: #6c757d; + } + .p-treetable .p-sortable-column.p-highlight { + background: #f8f9fa; + color: #FFC107; + } + .p-treetable .p-sortable-column.p-highlight .p-sortable-column-icon { + color: #FFC107; + } + .p-treetable .p-treetable-tbody > tr { + background: #ffffff; + color: #495057; + transition: box-shadow 0.2s; + } + .p-treetable .p-treetable-tbody > tr > td { + text-align: left; + border: 1px solid #e9ecef; + border-width: 0 0 1px 0; + padding: 1rem 1rem; + } + .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + margin-right: 0.5rem; + } + .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler.p-icon { + width: 2rem; + height: 2rem; + } + .p-treetable .p-treetable-tbody > tr > td p-treetablecheckbox .p-checkbox { + margin-right: 0.5rem; + } + .p-treetable .p-treetable-tbody > tr > td p-treetablecheckbox .p-checkbox .p-indeterminate .p-checkbox-icon { + color: #495057; + } + .p-treetable .p-treetable-tbody > tr:focus-visible { + outline: 0.15rem solid #ffe69c; + outline-offset: -0.15rem; + } + .p-treetable .p-treetable-tbody > tr.p-highlight { + background: #FFF3E0; + color: #495057; + } + .p-treetable .p-treetable-tbody > tr.p-highlight .p-treetable-toggler { + color: #495057; + } + .p-treetable .p-treetable-tbody > tr.p-highlight .p-treetable-toggler:hover { + color: #495057; + } + .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover { + background: #e9ecef; + color: #495057; + } + .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover .p-treetable-toggler { + color: #495057; + } + .p-treetable .p-column-resizer-helper { + background: #FFC107; + } + .p-treetable .p-treetable-scrollable-header, +.p-treetable .p-treetable-scrollable-footer { + background: #f8f9fa; + } + .p-treetable .p-treetable-loading-icon { + font-size: 2rem; + } + .p-treetable .p-treetable-loading-icon.p-icon { + width: 2rem; + height: 2rem; + } + .p-treetable.p-treetable-gridlines .p-datatable-header { + border-width: 1px 1px 0 1px; + } + .p-treetable.p-treetable-gridlines .p-treetable-footer { + border-width: 0 1px 1px 1px; + } + .p-treetable.p-treetable-gridlines .p-treetable-top { + border-width: 0 1px 0 1px; + } + .p-treetable.p-treetable-gridlines .p-treetable-bottom { + border-width: 0 1px 1px 1px; + } + .p-treetable.p-treetable-gridlines .p-treetable-thead > tr > th { + border-width: 1px; + } + .p-treetable.p-treetable-gridlines .p-treetable-tbody > tr > td { + border-width: 1px; + } + .p-treetable.p-treetable-gridlines .p-treetable-tfoot > tr > td { + border-width: 1px; + } + .p-treetable.p-treetable-sm .p-treetable-header { + padding: 0.875rem 0.875rem; + } + .p-treetable.p-treetable-sm .p-treetable-thead > tr > th { + padding: 0.5rem 0.5rem; + } + .p-treetable.p-treetable-sm .p-treetable-tbody > tr > td { + padding: 0.5rem 0.5rem; + } + .p-treetable.p-treetable-sm .p-treetable-tfoot > tr > td { + padding: 0.5rem 0.5rem; + } + .p-treetable.p-treetable-sm .p-treetable-footer { + padding: 0.5rem 0.5rem; + } + .p-treetable.p-treetable-lg .p-treetable-header { + padding: 1.25rem 1.25rem; + } + .p-treetable.p-treetable-lg .p-treetable-thead > tr > th { + padding: 1.25rem 1.25rem; + } + .p-treetable.p-treetable-lg .p-treetable-tbody > tr > td { + padding: 1.25rem 1.25rem; + } + .p-treetable.p-treetable-lg .p-treetable-tfoot > tr > td { + padding: 1.25rem 1.25rem; + } + .p-treetable.p-treetable-lg .p-treetable-footer { + padding: 1.25rem 1.25rem; + } + + .p-virtualscroller .p-virtualscroller-header { + background: #f8f9fa; + color: #495057; + border: 1px solid #e9ecef; + border-width: 1px 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; + } + .p-virtualscroller .p-virtualscroller-content { + background: #ffffff; + color: #495057; + border: 0 none; + padding: 0; + } + .p-virtualscroller .p-virtualscroller-footer { + background: #f8f9fa; + color: #495057; + border: 1px solid #e9ecef; + border-width: 0 0 1px 0; + padding: 1rem 1rem; + font-weight: 600; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + } + + .p-accordion .p-accordion-header .p-accordion-header-link { + padding: 1rem; + border: 1px solid #dee2e6; + color: #495057; + background: #f8f9fa; + font-weight: 600; + border-radius: 3px; + transition: box-shadow 0.2s; + } + .p-accordion .p-accordion-header .p-accordion-header-link .p-accordion-toggle-icon { + margin-right: 0.5rem; + } + .p-accordion .p-accordion-header:not(.p-disabled) .p-accordion-header-link:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2rem #ffe69c; + } + .p-accordion .p-accordion-header:not(.p-highlight):not(.p-disabled):hover .p-accordion-header-link { + background: #e9ecef; + border-color: #dee2e6; + color: #495057; + } + .p-accordion .p-accordion-header:not(.p-disabled).p-highlight .p-accordion-header-link { + background: #f8f9fa; + border-color: #dee2e6; + color: #495057; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + .p-accordion .p-accordion-header:not(.p-disabled).p-highlight:hover .p-accordion-header-link { + border-color: #dee2e6; + background: #e9ecef; + color: #495057; + } + .p-accordion .p-accordion-content { + padding: 1rem; + border: 1px solid #dee2e6; + background: #ffffff; + color: #495057; + border-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + .p-accordion p-accordiontab .p-accordion-tab { + margin-bottom: 0; + } + .p-accordion p-accordiontab .p-accordion-header .p-accordion-header-link { + border-radius: 0; + } + .p-accordion p-accordiontab .p-accordion-content { + border-radius: 0; + } + .p-accordion p-accordiontab:not(:first-child) .p-accordion-header .p-accordion-header-link { + border-top: 0 none; + } + .p-accordion p-accordiontab:not(:first-child) .p-accordion-header:not(.p-highlight):not(.p-disabled):hover .p-accordion-header-link, .p-accordion p-accordiontab:not(:first-child) .p-accordion-header:not(.p-disabled).p-highlight:hover .p-accordion-header-link { + border-top: 0 none; + } + .p-accordion p-accordiontab:first-child .p-accordion-header .p-accordion-header-link { + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-accordion p-accordiontab:last-child .p-accordion-header:not(.p-highlight) .p-accordion-header-link { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + .p-accordion p-accordiontab:last-child .p-accordion-content { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + + .p-card { + background: #ffffff; + color: #495057; + box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 1px 3px 0 rgba(0, 0, 0, 0.12); + border-radius: 3px; + } + .p-card .p-card-body { + padding: 1rem; + } + .p-card .p-card-title { + font-size: 1.5rem; + font-weight: 700; + margin-bottom: 0.5rem; + } + .p-card .p-card-subtitle { + font-weight: 400; + margin-bottom: 0.5rem; + color: #6c757d; + } + .p-card .p-card-content { + padding: 1rem 0; + } + .p-card .p-card-footer { + padding: 1rem 0 0 0; + } + + .p-divider .p-divider-content { + background-color: #ffffff; + } + .p-divider.p-divider-horizontal { + margin: 1rem 0; + padding: 0 1rem; + } + .p-divider.p-divider-horizontal:before { + border-top: 1px #dee2e6; + } + .p-divider.p-divider-horizontal .p-divider-content { + padding: 0 0.5rem; + } + .p-divider.p-divider-vertical { + margin: 0 1rem; + padding: 1rem 0; + } + .p-divider.p-divider-vertical:before { + border-left: 1px #dee2e6; + } + .p-divider.p-divider-vertical .p-divider-content { + padding: 0.5rem 0; + } + + .p-fieldset { + border: 1px solid #dee2e6; + background: #ffffff; + color: #495057; + border-radius: 3px; + } + .p-fieldset .p-fieldset-legend { + padding: 1rem; + border: 1px solid #dee2e6; + color: #495057; + background: #f8f9fa; + font-weight: 600; + border-radius: 3px; + } + .p-fieldset.p-fieldset-toggleable .p-fieldset-legend { + padding: 0; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a { + padding: 1rem; + color: #495057; + border-radius: 3px; + transition: box-shadow 0.2s; + } + .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a .p-fieldset-toggler { + margin-right: 0.5rem; + } + .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-fieldset.p-fieldset-toggleable .p-fieldset-legend:hover { + background: #e9ecef; + border-color: #dee2e6; + color: #495057; + } + .p-fieldset .p-fieldset-content { + padding: 1rem; + } + + .p-panel .p-panel-header { + border: 1px solid #dee2e6; + padding: 1rem; + background: #f8f9fa; + color: #495057; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-panel .p-panel-header .p-panel-title { + font-weight: 600; + } + .p-panel .p-panel-header .p-panel-header-icon { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-panel .p-panel-header .p-panel-header-icon:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-panel .p-panel-header .p-panel-header-icon:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-panel.p-panel-toggleable .p-panel-header { + padding: 0.5rem 1rem; + } + .p-panel .p-panel-content { + padding: 1rem; + border: 1px solid #dee2e6; + background: #ffffff; + color: #495057; + border-top: 0 none; + } + .p-panel .p-panel-content:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + .p-panel .p-panel-footer { + padding: 0.5rem 1rem; + border: 1px solid #dee2e6; + background: #ffffff; + color: #495057; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-top: 0 none; + } + .p-panel .p-panel-icons-end { + order: 2; + margin-left: auto; + } + .p-panel .p-panel-icons-start { + order: 0; + margin-right: 0.5rem; + } + .p-panel .p-panel-icons-center { + order: 2; + width: 100%; + text-align: center; + } + + .p-scrollpanel .p-scrollpanel-bar { + background: #f8f9fa; + border: 0 none; + } + + .p-splitter { + border: 1px solid #dee2e6; + background: #ffffff; + border-radius: 3px; + color: #495057; + } + .p-splitter .p-splitter-gutter { + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + background: #f8f9fa; + } + .p-splitter .p-splitter-gutter .p-splitter-gutter-handle { + background: #dee2e6; + } + .p-splitter .p-splitter-gutter-resizing { + background: #dee2e6; + } + + .p-tabview .p-tabview-nav-content { + scroll-padding-inline: 2.357rem; + } + .p-tabview .p-tabview-nav { + background: #ffffff; + border: 1px solid #dee2e6; + border-width: 0 0 2px 0; + } + .p-tabview .p-tabview-nav li { + margin-right: 0; + } + .p-tabview .p-tabview-nav li .p-tabview-nav-link { + border: solid #dee2e6; + border-width: 0 0 2px 0; + border-color: transparent transparent #dee2e6 transparent; + background: #ffffff; + color: #6c757d; + padding: 1rem; + font-weight: 600; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + transition: box-shadow 0.2s; + margin: 0 0 -2px 0; + } + .p-tabview .p-tabview-nav li .p-tabview-nav-link:not(.p-disabled):focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2rem #ffe69c; + } + .p-tabview .p-tabview-nav li:not(.p-highlight):not(.p-disabled):hover .p-tabview-nav-link { + background: #ffffff; + border-color: #6c757d; + color: #6c757d; + } + .p-tabview .p-tabview-nav li.p-highlight .p-tabview-nav-link { + background: #ffffff; + border-color: #FFC107; + color: #FFC107; + } + .p-tabview .p-tabview-left-icon { + margin-right: 0.5rem; + } + .p-tabview .p-tabview-right-icon { + margin-left: 0.5rem; + } + .p-tabview .p-tabview-close { + margin-left: 0.5rem; + } + .p-tabview .p-tabview-nav-btn.p-link { + background: #ffffff; + color: #FFC107; + width: 2.357rem; + box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + border-radius: 0; + } + .p-tabview .p-tabview-nav-btn.p-link:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2rem #ffe69c; + } + .p-tabview .p-tabview-panels { + background: #ffffff; + padding: 1rem; + border: 0 none; + color: #495057; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + + .p-toolbar { + background: #f8f9fa; + border: 1px solid #dee2e6; + padding: 1rem; + border-radius: 3px; + gap: 0.5rem; + } + .p-toolbar .p-toolbar-separator { + margin: 0 0.5rem; + } + + .p-confirm-popup { + background: #ffffff; + color: #495057; + border: 0 none; + border-radius: 3px; + box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12); + } + .p-confirm-popup .p-confirm-popup-content { + padding: 1rem; + } + .p-confirm-popup .p-confirm-popup-footer { + text-align: right; + padding: 0.5rem 1rem; + } + .p-confirm-popup .p-confirm-popup-footer button { + margin: 0 0.5rem 0 0; + width: auto; + } + .p-confirm-popup .p-confirm-popup-footer button:last-child { + margin: 0; + } + .p-confirm-popup:after { + border: solid transparent; + border-color: rgba(255, 255, 255, 0); + border-bottom-color: #ffffff; + } + .p-confirm-popup:before { + border: solid transparent; + border-color: rgba(255, 255, 255, 0); + border-bottom-color: #ffffff; + } + .p-confirm-popup.p-confirm-popup-flipped:after { + border-top-color: #ffffff; + } + .p-confirm-popup.p-confirm-popup-flipped:before { + border-top-color: #ffffff; + } + .p-confirm-popup .p-confirm-popup-icon { + font-size: 1.5rem; + } + .p-confirm-popup .p-confirm-popup-icon.p-icon { + width: 1.5rem; + height: 1.5rem; + } + .p-confirm-popup .p-confirm-popup-message { + margin-left: 1rem; + } + + .p-dialog { + border-radius: 3px; + box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12); + border: 0 none; + } + .p-dialog .p-dialog-header { + border-bottom: 0 none; + background: #ffffff; + color: #495057; + padding: 1.5rem; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-dialog .p-dialog-header .p-dialog-title { + font-weight: 600; + font-size: 1.25rem; + } + .p-dialog .p-dialog-header .p-dialog-header-icon { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + margin-right: 0.5rem; + } + .p-dialog .p-dialog-header .p-dialog-header-icon:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-dialog .p-dialog-header .p-dialog-header-icon:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-dialog .p-dialog-header .p-dialog-header-icon:last-child { + margin-right: 0; + } + .p-dialog .p-dialog-content { + background: #ffffff; + color: #495057; + padding: 0 1.5rem 2rem 1.5rem; + } + .p-dialog .p-dialog-content:last-of-type { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + .p-dialog .p-dialog-footer { + border-top: 0 none; + background: #ffffff; + color: #495057; + padding: 0 1.5rem 1.5rem 1.5rem; + text-align: right; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + .p-dialog .p-dialog-footer button { + margin: 0 0.5rem 0 0; + width: auto; + } + .p-dialog.p-confirm-dialog .p-confirm-dialog-icon { + font-size: 2rem; + } + .p-dialog.p-confirm-dialog .p-confirm-dialog-icon.p-icon { + width: 2rem; + height: 2rem; + } + .p-dialog.p-confirm-dialog .p-confirm-dialog-message { + margin-left: 1rem; + } + + .p-overlaypanel { + background: #ffffff; + color: #495057; + border: 0 none; + border-radius: 3px; + box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12); + } + .p-overlaypanel .p-overlaypanel-content { + padding: 1rem; + } + .p-overlaypanel .p-overlaypanel-close { + background: #FFC107; + color: #212529; + width: 2rem; + height: 2rem; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + border-radius: 50%; + position: absolute; + top: -1rem; + right: -1rem; + } + .p-overlaypanel .p-overlaypanel-close:enabled:hover { + background: #ecb100; + color: #212529; + } + .p-overlaypanel:after { + border: solid transparent; + border-color: rgba(255, 255, 255, 0); + border-bottom-color: #ffffff; + } + .p-overlaypanel:before { + border: solid transparent; + border-color: rgba(255, 255, 255, 0); + border-bottom-color: #f2f2f2; + } + .p-overlaypanel.p-overlaypanel-flipped:after { + border-top-color: #ffffff; + } + .p-overlaypanel.p-overlaypanel-flipped:before { + border-top-color: #ffffff; + } + + .p-sidebar { + background: #ffffff; + color: #495057; + border: 0 none; + box-shadow: 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12); + } + .p-sidebar .p-sidebar-header { + padding: 1rem; + } + .p-sidebar .p-sidebar-header .p-sidebar-close, +.p-sidebar .p-sidebar-header .p-sidebar-icon { + width: 2rem; + height: 2rem; + color: #6c757d; + border: 0 none; + background: transparent; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-sidebar .p-sidebar-header .p-sidebar-close:enabled:hover, +.p-sidebar .p-sidebar-header .p-sidebar-icon:enabled:hover { + color: #495057; + border-color: transparent; + background: #e9ecef; + } + .p-sidebar .p-sidebar-header .p-sidebar-close:focus-visible, +.p-sidebar .p-sidebar-header .p-sidebar-icon:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-sidebar .p-sidebar-header + .p-sidebar-content { + padding-top: 0; + } + .p-sidebar .p-sidebar-content { + padding: 1rem; + } + .p-sidebar .p-sidebar-footer { + padding: 1rem; + } + + .p-tooltip .p-tooltip-text { + background: #495057; + color: #ffffff; + padding: 0.5rem 0.5rem; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + border-radius: 3px; + } + .p-tooltip.p-tooltip-right .p-tooltip-arrow { + border-right-color: #495057; + } + .p-tooltip.p-tooltip-left .p-tooltip-arrow { + border-left-color: #495057; + } + .p-tooltip.p-tooltip-top .p-tooltip-arrow { + border-top-color: #495057; + } + .p-tooltip.p-tooltip-bottom .p-tooltip-arrow { + border-bottom-color: #495057; + } + + .p-fileupload .p-fileupload-buttonbar { + background: #f8f9fa; + padding: 1rem; + border: 1px solid #dee2e6; + color: #495057; + border-bottom: 0 none; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-fileupload .p-fileupload-buttonbar .p-button { + margin-right: 0.5rem; + } + .p-fileupload .p-fileupload-buttonbar .p-button.p-fileupload-choose.p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-fileupload .p-fileupload-content { + background: #ffffff; + padding: 2rem 1rem; + border: 1px solid #dee2e6; + color: #495057; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + .p-fileupload .p-fileupload-content.p-fileupload-highlight { + border-color: 1px dashed #FFC107; + border-style: dashed; + background-color: #FFF3E0; + } + .p-fileupload .p-progressbar { + height: 0.25rem; + } + .p-fileupload .p-fileupload-row > div { + padding: 1rem 1rem; + } + .p-fileupload.p-fileupload-advanced .p-message { + margin-top: 0; + } + + .p-fileupload-choose:not(.p-disabled):hover { + background: #ecb100; + color: #212529; + border-color: #ecb100; + } + .p-fileupload-choose:not(.p-disabled):active { + background: #d29d00; + color: #212529; + border-color: #d29d00; + } + + .p-breadcrumb { + background: #ffffff; + border: 1px solid #dee2e6; + border-radius: 3px; + padding: 1rem; + } + .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link { + transition: box-shadow 0.2s; + border-radius: 3px; + } + .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link .p-menuitem-icon { + color: #6c757d; + } + .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator { + margin: 0 0.5rem 0 0.5rem; + color: #495057; + } + .p-breadcrumb .p-breadcrumb-list li:last-child .p-menuitem-text { + color: #495057; + } + .p-breadcrumb .p-breadcrumb-list li:last-child .p-menuitem-icon { + color: #6c757d; + } + + .p-contextmenu { + padding: 0.25rem 0; + background: #ffffff; + color: #495057; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + border-radius: 3px; + width: 12.5rem; + } + .p-contextmenu .p-contextmenu-root-list { + outline: 0 none; + } + .p-contextmenu .p-submenu-list { + padding: 0.25rem 0; + background: #ffffff; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + border-radius: 3px; + } + .p-contextmenu .p-menuitem > .p-menuitem-content { + color: #495057; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link { + color: #495057; + padding: 0.75rem 1rem; + user-select: none; + } + .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { + color: #6c757d; + margin-right: 0.5rem; + } + .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content { + color: #495057; + background: #e9ecef; + } + .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-contextmenu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { + background: #e9ecef; + } + .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { + color: #495057; + background: #dee2e6; + } + .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #495057; + } + .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { + color: #495057; + background: #e9ecef; + } + .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, +.p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-contextmenu .p-menuitem-separator { + border-top: 1px solid #dee2e6; + margin: 0.25rem 0; + } + .p-contextmenu .p-submenu-icon { + font-size: 0.875rem; + } + .p-contextmenu .p-submenu-icon.p-icon { + width: 0.875rem; + height: 0.875rem; + } + + .p-dock .p-dock-list-container { + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.2); + padding: 0.5rem 0.5rem; + border-radius: 0.5rem; + } + .p-dock .p-dock-list-container .p-dock-list { + outline: 0 none; + } + .p-dock .p-dock-item { + padding: 0.5rem; + border-radius: 3px; + } + .p-dock .p-dock-item.p-focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.15rem #ffe69c; + } + .p-dock .p-dock-link { + width: 4rem; + height: 4rem; + } + .p-dock.p-dock-top .p-dock-item-second-prev, +.p-dock.p-dock-top .p-dock-item-second-next, .p-dock.p-dock-bottom .p-dock-item-second-prev, +.p-dock.p-dock-bottom .p-dock-item-second-next { + margin: 0 0.9rem; + } + .p-dock.p-dock-top .p-dock-item-prev, +.p-dock.p-dock-top .p-dock-item-next, .p-dock.p-dock-bottom .p-dock-item-prev, +.p-dock.p-dock-bottom .p-dock-item-next { + margin: 0 1.3rem; + } + .p-dock.p-dock-top .p-dock-item-current, .p-dock.p-dock-bottom .p-dock-item-current { + margin: 0 1.5rem; + } + .p-dock.p-dock-left .p-dock-item-second-prev, +.p-dock.p-dock-left .p-dock-item-second-next, .p-dock.p-dock-right .p-dock-item-second-prev, +.p-dock.p-dock-right .p-dock-item-second-next { + margin: 0.9rem 0; + } + .p-dock.p-dock-left .p-dock-item-prev, +.p-dock.p-dock-left .p-dock-item-next, .p-dock.p-dock-right .p-dock-item-prev, +.p-dock.p-dock-right .p-dock-item-next { + margin: 1.3rem 0; + } + .p-dock.p-dock-left .p-dock-item-current, .p-dock.p-dock-right .p-dock-item-current { + margin: 1.5rem 0; + } + + @media screen and (max-width: 960px) { + .p-dock.p-dock-top .p-dock-list-container, .p-dock.p-dock-bottom .p-dock-list-container { + overflow-x: auto; + width: 100%; + } + .p-dock.p-dock-top .p-dock-list-container .p-dock-list, .p-dock.p-dock-bottom .p-dock-list-container .p-dock-list { + margin: 0 auto; + } + .p-dock.p-dock-left .p-dock-list-container, .p-dock.p-dock-right .p-dock-list-container { + overflow-y: auto; + height: 100%; + } + .p-dock.p-dock-left .p-dock-list-container .p-dock-list, .p-dock.p-dock-right .p-dock-list-container .p-dock-list { + margin: auto 0; + } + .p-dock .p-dock-list .p-dock-item { + transform: none; + margin: 0; + } + } + .p-megamenu { + padding: 0.5rem; + background: #f8f9fa; + color: #495057; + border: 1px solid #dee2e6; + border-radius: 3px; + } + .p-megamenu .p-megamenu-root-list { + outline: 0 none; + } + .p-megamenu .p-menuitem > .p-menuitem-content { + color: #495057; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link { + color: #495057; + padding: 0.75rem 1rem; + user-select: none; + } + .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { + color: #6c757d; + margin-right: 0.5rem; + } + .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content { + color: #495057; + background: #e9ecef; + } + .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-megamenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-megamenu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { + background: #e9ecef; + } + .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { + color: #495057; + background: #dee2e6; + } + .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #495057; + } + .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { + color: #495057; + background: #e9ecef; + } + .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, +.p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-megamenu .p-megamenu-panel { + background: #ffffff; + color: #495057; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-megamenu .p-submenu-header { + margin: 0; + padding: 0.75rem 1rem; + color: #495057; + background: #ffffff; + font-weight: 600; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-megamenu .p-submenu-list { + padding: 0.25rem 0; + width: 12.5rem; + } + .p-megamenu .p-submenu-list .p-menuitem-separator { + border-top: 1px solid #dee2e6; + margin: 0.25rem 0; + } + .p-megamenu.p-megamenu-vertical { + width: 12.5rem; + padding: 0.25rem 0; + } + .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content { + color: #495057; + transition: box-shadow 0.2s; + border-radius: 3px; + } + .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link { + padding: 0.75rem 1rem; + user-select: none; + } + .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { + color: #6c757d; + margin-right: 0.5rem; + } + .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + margin-left: 0.5rem; + } + .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { + color: #495057; + background: #e9ecef; + } + .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, +.p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + + .p-menu { + padding: 0.25rem 0; + background: #ffffff; + color: #495057; + border: 1px solid #dee2e6; + border-radius: 3px; + width: 12.5rem; + } + .p-menu .p-menuitem > .p-menuitem-content { + color: #495057; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link { + color: #495057; + padding: 0.75rem 1rem; + user-select: none; + } + .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { + color: #6c757d; + margin-right: 0.5rem; + } + .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-menu .p-menuitem.p-highlight > .p-menuitem-content { + color: #495057; + background: #e9ecef; + } + .p-menu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-menu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-menu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-menu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { + background: #e9ecef; + } + .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { + color: #495057; + background: #dee2e6; + } + .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #495057; + } + .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { + color: #495057; + background: #e9ecef; + } + .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, +.p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-menu.p-menu-overlay { + background: #ffffff; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-menu .p-submenu-header { + margin: 0; + padding: 0.75rem 1rem; + color: #495057; + background: #ffffff; + font-weight: 600; + border-top-right-radius: 0; + border-top-left-radius: 0; + } + .p-menu .p-menuitem-separator { + border-top: 1px solid #dee2e6; + margin: 0.25rem 0; + } + .p-menu .p-menuitem-badge { + background: #FFC107; + color: #212529; + font-size: 0.75rem; + font-weight: 700; + min-width: 1.5rem; + height: 1.5rem; + line-height: 1.5rem; + border-radius: 3px; + margin-left: 0.5rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + } + + .p-menubar { + padding: 0.5rem; + background: #f8f9fa; + color: #495057; + border: 1px solid #dee2e6; + border-radius: 3px; + } + .p-menubar .p-menubar-root-list { + outline: 0 none; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content { + color: #495057; + transition: box-shadow 0.2s; + border-radius: 3px; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link { + padding: 0.75rem 1rem; + user-select: none; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { + color: #6c757d; + margin-right: 0.5rem; + } + .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + margin-left: 0.5rem; + } + .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { + color: #495057; + background: #e9ecef; + } + .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, +.p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-menubar .p-menuitem > .p-menuitem-content { + color: #495057; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link { + color: #495057; + padding: 0.75rem 1rem; + user-select: none; + } + .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { + color: #6c757d; + margin-right: 0.5rem; + } + .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-menubar .p-menuitem.p-highlight > .p-menuitem-content { + color: #495057; + background: #e9ecef; + } + .p-menubar .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-menubar .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-menubar .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-menubar .p-menuitem.p-highlight.p-focus > .p-menuitem-content { + background: #e9ecef; + } + .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { + color: #495057; + background: #dee2e6; + } + .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #495057; + } + .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { + color: #495057; + background: #e9ecef; + } + .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, +.p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-menubar .p-submenu-list { + padding: 0.25rem 0; + background: #ffffff; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + width: 12.5rem; + } + .p-menubar .p-submenu-list .p-menuitem-separator { + border-top: 1px solid #dee2e6; + margin: 0.25rem 0; + } + .p-menubar .p-submenu-list .p-submenu-icon { + font-size: 0.875rem; + } + + @media screen and (max-width: 960px) { + .p-menubar { + position: relative; + } + .p-menubar .p-menubar-button { + display: flex; + width: 2rem; + height: 2rem; + color: #6c757d; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-menubar .p-menubar-button:hover { + color: #6c757d; + background: #e9ecef; + } + .p-menubar .p-menubar-button:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-menubar .p-menubar-root-list { + position: absolute; + display: none; + padding: 0.25rem 0; + background: #ffffff; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + width: 100%; + } + .p-menubar .p-menubar-root-list .p-menuitem-separator { + border-top: 1px solid #dee2e6; + margin: 0.25rem 0; + } + .p-menubar .p-menubar-root-list .p-submenu-icon { + font-size: 0.875rem; + } + .p-menubar .p-menubar-root-list .p-menuitem { + width: 100%; + position: static; + } + .p-menubar .p-menubar-root-list .p-menuitem .p-menuitem-content .p-menuitem-link .p-submenu-icon { + margin-left: auto; + transition: transform 0.2s; + } + .p-menubar .p-menubar-root-list .p-menuitem.p-menuitem-active > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { + transform: rotate(-180deg); + } + .p-menubar .p-menubar-root-list .p-submenu-list { + width: 100%; + position: static; + box-shadow: none; + border: 0 none; + } + .p-menubar .p-menubar-root-list .p-submenu-list .p-submenu-icon { + transition: transform 0.2s; + transform: rotate(90deg); + } + .p-menubar .p-menubar-root-list .p-submenu-list .p-menuitem-active > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { + transform: rotate(-90deg); + } + .p-menubar .p-menubar-root-list .p-menuitem { + width: 100%; + position: static; + } + .p-menubar .p-menubar-root-list .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { + padding-left: 2.25rem; + } + .p-menubar .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { + padding-left: 3.75rem; + } + .p-menubar .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { + padding-left: 5.25rem; + } + .p-menubar .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { + padding-left: 6.75rem; + } + .p-menubar .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { + padding-left: 8.25rem; + } + .p-menubar.p-menubar-mobile-active .p-menubar-root-list { + display: flex; + flex-direction: column; + top: 100%; + left: 0; + z-index: 1; + } + } + .p-panelmenu .p-panelmenu-header { + outline: 0 none; + } + .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content { + border: 1px solid #dee2e6; + color: #495057; + background: #f8f9fa; + border-radius: 3px; + transition: box-shadow 0.2s; + } + .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action { + color: #495057; + padding: 1rem; + font-weight: 600; + } + .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-submenu-icon { + margin-right: 0.5rem; + } + .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-icon { + margin-right: 0.5rem; + } + .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2rem #ffe69c; + } + .p-panelmenu .p-panelmenu-header:not(.p-highlight):not(.p-disabled):hover .p-panelmenu-header-content { + background: #e9ecef; + border-color: #dee2e6; + color: #495057; + } + .p-panelmenu .p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content { + background: #f8f9fa; + border-color: #dee2e6; + color: #495057; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + margin-bottom: 0; + } + .p-panelmenu .p-panelmenu-header:not(.p-disabled).p-highlight:hover .p-panelmenu-header-content { + border-color: #dee2e6; + background: #e9ecef; + color: #495057; + } + .p-panelmenu .p-panelmenu-content { + padding: 0.25rem 0; + border: 1px solid #dee2e6; + background: #ffffff; + color: #495057; + border-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + .p-panelmenu .p-panelmenu-content .p-panelmenu-root-list { + outline: 0 none; + } + .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content { + color: #495057; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link { + color: #495057; + padding: 0.75rem 1rem; + user-select: none; + } + .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { + color: #6c757d; + margin-right: 0.5rem; + } + .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content { + color: #495057; + background: #e9ecef; + } + .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight.p-focus > .p-menuitem-content { + background: #e9ecef; + } + .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { + color: #495057; + background: #dee2e6; + } + .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #495057; + } + .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { + color: #495057; + background: #e9ecef; + } + .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, +.p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-content .p-menuitem-link .p-submenu-icon { + margin-right: 0.5rem; + } + .p-panelmenu .p-panelmenu-content .p-menuitem-separator { + border-top: 1px solid #dee2e6; + margin: 0.25rem 0; + } + .p-panelmenu .p-panelmenu-content .p-submenu-list:not(.p-panelmenu-root-list) { + padding: 0 0 0 1rem; + } + .p-panelmenu .p-panelmenu-panel { + margin-bottom: 0; + } + .p-panelmenu .p-panelmenu-panel .p-panelmenu-header .p-panelmenu-header-content { + border-radius: 0; + } + .p-panelmenu .p-panelmenu-panel .p-panelmenu-content { + border-radius: 0; + } + .p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header .p-panelmenu-header-content { + border-top: 0 none; + } + .p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header:not(.p-highlight):not(.p-disabled):hover .p-panelmenu-header-content, .p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header:not(.p-disabled).p-highlight:hover .p-panelmenu-header-content { + border-top: 0 none; + } + .p-panelmenu .p-panelmenu-panel:first-child .p-panelmenu-header .p-panelmenu-header-content { + border-top-right-radius: 3px; + border-top-left-radius: 3px; + } + .p-panelmenu .p-panelmenu-panel:last-child .p-panelmenu-header:not(.p-highlight) .p-panelmenu-header-content { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + .p-panelmenu .p-panelmenu-panel:last-child .p-panelmenu-content { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + } + + .p-slidemenu { + padding: 0.25rem 0; + background: #ffffff; + color: #495057; + border: 1px solid #dee2e6; + border-radius: 3px; + width: 12.5rem; + } + .p-slidemenu .p-slidemenu-root-list { + outline: 0 none; + } + .p-slidemenu .p-submenu-list { + outline: 0 none; + } + .p-slidemenu .p-menuitem > .p-menuitem-content { + color: #495057; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-slidemenu .p-menuitem > .p-menuitem-content .p-menuitem-link { + color: #495057; + padding: 0.75rem 1rem; + user-select: none; + } + .p-slidemenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-slidemenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { + color: #6c757d; + margin-right: 0.5rem; + } + .p-slidemenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-slidemenu .p-menuitem.p-highlight > .p-menuitem-content { + color: #495057; + background: #e9ecef; + } + .p-slidemenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-slidemenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-slidemenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-slidemenu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { + background: #e9ecef; + } + .p-slidemenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { + color: #495057; + background: #dee2e6; + } + .p-slidemenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-slidemenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-slidemenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #495057; + } + .p-slidemenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { + color: #495057; + background: #e9ecef; + } + .p-slidemenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-slidemenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, +.p-slidemenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-slidemenu.p-slidemenu-overlay { + background: #ffffff; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-slidemenu .p-slidemenu-list { + padding: 0.25rem 0; + background: #ffffff; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-slidemenu .p-menuitem-separator { + border-top: 1px solid #dee2e6; + margin: 0.25rem 0; + } + .p-slidemenu .p-slidemenu-icon { + font-size: 0.875rem; + } + .p-slidemenu .p-icon { + width: 0.875rem; + height: 0.875rem; + } + .p-slidemenu .p-slidemenu-backward { + padding: 0.75rem 1rem; + color: #495057; + } + .p-slidemenu .p-slidemenu-backward:not(.p-disabled):focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2rem #ffe69c; + } + .p-slidemenu .p-menuitem-badge { + background: #FFC107; + color: #212529; + font-size: 0.75rem; + font-weight: 700; + min-width: 1.5rem; + height: 1.5rem; + line-height: 1.5rem; + border-radius: 3px; + margin-left: 0.5rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + } + + .p-steps .p-steps-item .p-menuitem-link { + background: transparent; + transition: box-shadow 0.2s; + border-radius: 3px; + background: #ffffff; + } + .p-steps .p-steps-item .p-menuitem-link .p-steps-number { + color: #495057; + border: 1px solid #e9ecef; + background: #ffffff; + min-width: 2rem; + height: 2rem; + line-height: 2rem; + font-size: 1.143rem; + z-index: 1; + border-radius: 50%; + } + .p-steps .p-steps-item .p-menuitem-link .p-steps-title { + margin-top: 0.5rem; + color: #6c757d; + } + .p-steps .p-steps-item .p-menuitem-link:not(.p-disabled):focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-steps .p-steps-item.p-highlight .p-steps-number { + background: #FFF3E0; + color: #495057; + } + .p-steps .p-steps-item.p-highlight .p-steps-title { + font-weight: 600; + color: #495057; + } + .p-steps .p-steps-item:before { + content: " "; + border-top: 1px solid #dee2e6; + width: 100%; + top: 50%; + left: 0; + display: block; + position: absolute; + margin-top: -1rem; + } + + .p-tabmenu .p-tabmenu-nav { + background: #ffffff; + border: 1px solid #dee2e6; + border-width: 0 0 2px 0; + } + .p-tabmenu .p-tabmenu-nav .p-menuitem-badge { + background: #FFC107; + color: #212529; + font-size: 0.75rem; + font-weight: 700; + min-width: 1.5rem; + height: 1.5rem; + line-height: 1.5rem; + border-radius: 3px; + margin-left: 0.5rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + } + .p-tabmenu .p-tabmenu-nav .p-tabmenuitem { + margin-right: 0; + } + .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link { + border: solid #dee2e6; + border-width: 0 0 2px 0; + border-color: transparent transparent #dee2e6 transparent; + background: #ffffff; + color: #6c757d; + padding: 1rem; + font-weight: 600; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + transition: box-shadow 0.2s; + margin: 0 0 -2px 0; + } + .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link .p-menuitem-icon { + margin-right: 0.5rem; + } + .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link:not(.p-disabled):focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2rem #ffe69c; + } + .p-tabmenu .p-tabmenu-nav .p-tabmenuitem:not(.p-highlight):not(.p-disabled):hover .p-menuitem-link { + background: #ffffff; + border-color: #6c757d; + color: #6c757d; + } + .p-tabmenu .p-tabmenu-nav .p-tabmenuitem.p-highlight .p-menuitem-link { + background: #ffffff; + border-color: #FFC107; + color: #FFC107; + } + .p-tabmenu .p-tabmenu-left-icon { + margin-right: 0.5rem; + } + .p-tabmenu .p-tabmenu-right-icon { + margin-left: 0.5rem; + } + .p-tabmenu .p-tabmenu-nav-btn.p-link { + background: #ffffff; + color: #FFC107; + width: 2.357rem; + box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + border-radius: 0; + } + .p-tabmenu .p-tabmenu-nav-btn.p-link:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: inset 0 0 0 0.2rem #ffe69c; + } + + .p-tieredmenu { + padding: 0.25rem 0; + background: #ffffff; + color: #495057; + border: 1px solid #dee2e6; + border-radius: 3px; + width: 12.5rem; + } + .p-tieredmenu.p-tieredmenu-overlay { + background: #ffffff; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-tieredmenu .p-tieredmenu-root-list { + outline: 0 none; + } + .p-tieredmenu .p-submenu-list { + padding: 0.25rem 0; + background: #ffffff; + border: 0 none; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + } + .p-tieredmenu .p-menuitem > .p-menuitem-content { + color: #495057; + transition: box-shadow 0.2s; + border-radius: 0; + } + .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link { + color: #495057; + padding: 0.75rem 1rem; + user-select: none; + } + .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { + color: #6c757d; + margin-right: 0.5rem; + } + .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content { + color: #495057; + background: #e9ecef; + } + .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-tieredmenu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { + background: #e9ecef; + } + .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { + color: #495057; + background: #dee2e6; + } + .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, +.p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { + color: #495057; + } + .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { + color: #495057; + background: #e9ecef; + } + .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { + color: #495057; + } + .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, +.p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { + color: #6c757d; + } + .p-tieredmenu .p-menuitem-separator { + border-top: 1px solid #dee2e6; + margin: 0.25rem 0; + } + .p-tieredmenu .p-submenu-icon { + font-size: 0.875rem; + } + .p-tieredmenu .p-submenu-icon.p-icon { + width: 0.875rem; + height: 0.875rem; + } + + .p-inline-message { + padding: 0.5rem 0.5rem; + margin: 0; + border-radius: 3px; + } + .p-inline-message.p-inline-message-info { + background: #b3e5fc; + border: solid #0891cf; + border-width: 0px; + color: #044868; + } + .p-inline-message.p-inline-message-info .p-inline-message-icon { + color: #044868; + } + .p-inline-message.p-inline-message-success { + background: #c8e6c9; + border: solid #439446; + border-width: 0px; + color: #224a23; + } + .p-inline-message.p-inline-message-success .p-inline-message-icon { + color: #224a23; + } + .p-inline-message.p-inline-message-warn { + background: #ffecb3; + border: solid #d9a300; + border-width: 0px; + color: #6d5100; + } + .p-inline-message.p-inline-message-warn .p-inline-message-icon { + color: #6d5100; + } + .p-inline-message.p-inline-message-error { + background: #ffcdd2; + border: solid #e60017; + border-width: 0px; + color: #73000c; + } + .p-inline-message.p-inline-message-error .p-inline-message-icon { + color: #73000c; + } + .p-inline-message .p-inline-message-icon { + font-size: 1rem; + margin-right: 0.5rem; + } + .p-inline-message .p-icon { + width: 1rem; + height: 1rem; + } + .p-inline-message .p-inline-message-text { + font-size: 1rem; + } + .p-inline-message.p-inline-message-icon-only .p-inline-message-icon { + margin-right: 0; + } + + .p-message { + margin: 1rem 0; + border-radius: 3px; + } + .p-message .p-message-wrapper { + padding: 1rem 1.5rem; + } + .p-message .p-message-close { + width: 2rem; + height: 2rem; + border-radius: 50%; + background: transparent; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-message .p-message-close:hover { + background: rgba(255, 255, 255, 0.5); + } + .p-message .p-message-close:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-message.p-message-info { + background: #b3e5fc; + border: solid #0891cf; + border-width: 0 0 0 6px; + color: #044868; + } + .p-message.p-message-info .p-message-icon { + color: #044868; + } + .p-message.p-message-info .p-message-close { + color: #044868; + } + .p-message.p-message-success { + background: #c8e6c9; + border: solid #439446; + border-width: 0 0 0 6px; + color: #224a23; + } + .p-message.p-message-success .p-message-icon { + color: #224a23; + } + .p-message.p-message-success .p-message-close { + color: #224a23; + } + .p-message.p-message-warn { + background: #ffecb3; + border: solid #d9a300; + border-width: 0 0 0 6px; + color: #6d5100; + } + .p-message.p-message-warn .p-message-icon { + color: #6d5100; + } + .p-message.p-message-warn .p-message-close { + color: #6d5100; + } + .p-message.p-message-error { + background: #ffcdd2; + border: solid #e60017; + border-width: 0 0 0 6px; + color: #73000c; + } + .p-message.p-message-error .p-message-icon { + color: #73000c; + } + .p-message.p-message-error .p-message-close { + color: #73000c; + } + .p-message .p-message-text { + font-size: 1rem; + font-weight: 500; + } + .p-message .p-message-icon { + font-size: 1.5rem; + margin-right: 0.5rem; + } + .p-message .p-icon { + width: 1.5rem; + height: 1.5rem; + } + .p-message .p-message-summary { + font-weight: 700; + } + .p-message .p-message-detail { + margin-left: 0.5rem; + } + + .p-toast { + opacity: 0.9; + } + .p-toast .p-toast-message { + margin: 0 0 1rem 0; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + border-radius: 3px; + } + .p-toast .p-toast-message .p-toast-message-content { + padding: 1rem; + border-width: 0 0 0 6px; + } + .p-toast .p-toast-message .p-toast-message-content .p-toast-message-text { + margin: 0 0 0 1rem; + } + .p-toast .p-toast-message .p-toast-message-content .p-toast-message-icon { + font-size: 2rem; + } + .p-toast .p-toast-message .p-toast-message-content .p-icon:not(.p-toast-icon-close-icon) { + width: 2rem; + height: 2rem; + } + .p-toast .p-toast-message .p-toast-message-content .p-toast-summary { + font-weight: 700; + } + .p-toast .p-toast-message .p-toast-message-content .p-toast-detail { + margin: 0.5rem 0 0 0; + } + .p-toast .p-toast-message .p-toast-icon-close { + width: 2rem; + height: 2rem; + border-radius: 50%; + background: transparent; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-toast .p-toast-message .p-toast-icon-close:hover { + background: rgba(255, 255, 255, 0.5); + } + .p-toast .p-toast-message .p-toast-icon-close:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-toast .p-toast-message.p-toast-message-info { + background: #b3e5fc; + border: solid #0891cf; + border-width: 0 0 0 6px; + color: #044868; + } + .p-toast .p-toast-message.p-toast-message-info .p-toast-message-icon, +.p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close { + color: #044868; + } + .p-toast .p-toast-message.p-toast-message-success { + background: #c8e6c9; + border: solid #439446; + border-width: 0 0 0 6px; + color: #224a23; + } + .p-toast .p-toast-message.p-toast-message-success .p-toast-message-icon, +.p-toast .p-toast-message.p-toast-message-success .p-toast-icon-close { + color: #224a23; + } + .p-toast .p-toast-message.p-toast-message-warn { + background: #ffecb3; + border: solid #d9a300; + border-width: 0 0 0 6px; + color: #6d5100; + } + .p-toast .p-toast-message.p-toast-message-warn .p-toast-message-icon, +.p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close { + color: #6d5100; + } + .p-toast .p-toast-message.p-toast-message-error { + background: #ffcdd2; + border: solid #e60017; + border-width: 0 0 0 6px; + color: #73000c; + } + .p-toast .p-toast-message.p-toast-message-error .p-toast-message-icon, +.p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close { + color: #73000c; + } + + .p-galleria .p-galleria-close { + margin: 0.5rem; + background: transparent; + color: #f8f9fa; + width: 4rem; + height: 4rem; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + border-radius: 50%; + } + .p-galleria .p-galleria-close .p-galleria-close-icon { + font-size: 2rem; + } + .p-galleria .p-galleria-close .p-icon-wrapper .p-icon { + width: 2rem; + height: 2rem; + } + .p-galleria .p-galleria-close:hover { + background: rgba(255, 255, 255, 0.1); + color: #f8f9fa; + } + .p-galleria .p-galleria-item-nav { + background: transparent; + color: #f8f9fa; + width: 4rem; + height: 4rem; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + border-radius: 3px; + margin: 0 0.5rem; + } + .p-galleria .p-galleria-item-nav .p-galleria-item-prev-icon, +.p-galleria .p-galleria-item-nav .p-galleria-item-next-icon { + font-size: 2rem; + } + .p-galleria .p-galleria-item-nav .p-icon-wrapper .p-icon { + width: 2rem; + height: 2rem; + } + .p-galleria .p-galleria-item-nav:not(.p-disabled):hover { + background: rgba(255, 255, 255, 0.1); + color: #f8f9fa; + } + .p-galleria .p-galleria-caption { + background: rgba(0, 0, 0, 0.5); + color: #f8f9fa; + padding: 1rem; + } + .p-galleria .p-galleria-indicators { + padding: 1rem; + } + .p-galleria .p-galleria-indicators .p-galleria-indicator button { + background-color: #e9ecef; + width: 1rem; + height: 1rem; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + border-radius: 50%; + } + .p-galleria .p-galleria-indicators .p-galleria-indicator button:hover { + background: #dee2e6; + } + .p-galleria .p-galleria-indicators .p-galleria-indicator.p-highlight button { + background: #FFF3E0; + color: #495057; + } + .p-galleria.p-galleria-indicators-bottom .p-galleria-indicator, .p-galleria.p-galleria-indicators-top .p-galleria-indicator { + margin-right: 0.5rem; + } + .p-galleria.p-galleria-indicators-left .p-galleria-indicator, .p-galleria.p-galleria-indicators-right .p-galleria-indicator { + margin-bottom: 0.5rem; + } + .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators { + background: rgba(0, 0, 0, 0.5); + } + .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator button { + background: rgba(255, 255, 255, 0.4); + } + .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator button:hover { + background: rgba(255, 255, 255, 0.6); + } + .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator.p-highlight button { + background: #FFF3E0; + color: #495057; + } + .p-galleria .p-galleria-thumbnail-container { + background: rgba(0, 0, 0, 0.9); + padding: 1rem 0.25rem; + } + .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-prev, +.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-next { + margin: 0.5rem; + background-color: transparent; + color: #f8f9fa; + width: 2rem; + height: 2rem; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + border-radius: 50%; + } + .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-prev:hover, +.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-next:hover { + background: rgba(255, 255, 255, 0.1); + color: #f8f9fa; + } + .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-item-content:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + + .p-galleria-mask { + --maskbg: rgba(0, 0, 0, 0.9); + } + + .p-image-mask { + --maskbg: rgba(0, 0, 0, 0.9); + } + + .p-image-preview-indicator { + background-color: transparent; + color: #f8f9fa; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + + .p-image-preview-container:hover > .p-image-preview-indicator { + background-color: rgba(0, 0, 0, 0.5); + } + + .p-image-toolbar { + padding: 1rem; + } + + .p-image-action.p-link { + color: #f8f9fa; + background-color: transparent; + width: 3rem; + height: 3rem; + border-radius: 50%; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + margin-right: 0.5rem; + } + .p-image-action.p-link:last-child { + margin-right: 0; + } + .p-image-action.p-link:hover { + color: #f8f9fa; + background-color: rgba(255, 255, 255, 0.1); + } + .p-image-action.p-link i { + font-size: 1.5rem; + } + .p-image-action.p-link .p-icon { + width: 1.5rem; + height: 1.5rem; + } + + .p-avatar { + background-color: #dee2e6; + border-radius: 3px; + } + .p-avatar.p-avatar-lg { + width: 3rem; + height: 3rem; + font-size: 1.5rem; + } + .p-avatar.p-avatar-lg .p-avatar-icon { + font-size: 1.5rem; + } + .p-avatar.p-avatar-xl { + width: 4rem; + height: 4rem; + font-size: 2rem; + } + .p-avatar.p-avatar-xl .p-avatar-icon { + font-size: 2rem; + } + + .p-avatar-group .p-avatar { + border: 2px solid #ffffff; + } + + .p-badge { + background: #FFC107; + color: #212529; + font-size: 0.75rem; + font-weight: 700; + min-width: 1.5rem; + height: 1.5rem; + line-height: 1.5rem; + } + .p-badge.p-badge-secondary { + background-color: #607d8b; + color: #ffffff; + } + .p-badge.p-badge-success { + background-color: #689f38; + color: #ffffff; + } + .p-badge.p-badge-info { + background-color: #0288d1; + color: #ffffff; + } + .p-badge.p-badge-warning { + background-color: #fbc02d; + color: #212529; + } + .p-badge.p-badge-danger { + background-color: #d32f2f; + color: #ffffff; + } + .p-badge.p-badge-lg { + font-size: 1.125rem; + min-width: 2.25rem; + height: 2.25rem; + line-height: 2.25rem; + } + .p-badge.p-badge-xl { + font-size: 1.5rem; + min-width: 3rem; + height: 3rem; + line-height: 3rem; + } + + .p-chip { + background-color: #dee2e6; + color: #495057; + border-radius: 16px; + padding: 0 0.5rem; + } + .p-chip .p-chip-text { + line-height: 1.5; + margin-top: 0.25rem; + margin-bottom: 0.25rem; + } + .p-chip .p-chip-icon { + margin-right: 0.5rem; + } + .p-chip .pi-chip-remove-icon { + margin-left: 0.5rem; + } + .p-chip img { + width: 2rem; + height: 2rem; + margin-left: -0.5rem; + margin-right: 0.5rem; + } + .p-chip .pi-chip-remove-icon { + border-radius: 3px; + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-chip .pi-chip-remove-icon:focus-visible { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + .p-chip .pi-chip-remove-icon:focus { + outline: 0 none; + } + + .p-inplace .p-inplace-display { + padding: 0.5rem 0.5rem; + border-radius: 3px; + transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; + } + .p-inplace .p-inplace-display:not(.p-disabled):hover { + background: #e9ecef; + color: #495057; + } + .p-inplace .p-inplace-display:focus { + outline: 0 none; + outline-offset: 0; + box-shadow: 0 0 0 0.2rem #ffe69c; + } + + .p-progressbar { + border: 0 none; + height: 1.5rem; + background: #dee2e6; + border-radius: 3px; + } + .p-progressbar .p-progressbar-value { + border: 0 none; + margin: 0; + background: #FFC107; + } + .p-progressbar .p-progressbar-label { + color: #212529; + line-height: 1.5rem; + } + + .p-scrolltop { + width: 3rem; + height: 3rem; + border-radius: 50%; + box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); + transition: background-color 0.2s, color 0.2s, box-shadow 0.2s; + } + .p-scrolltop.p-link { + background: rgba(0, 0, 0, 0.7); + } + .p-scrolltop.p-link:hover { + background: rgba(0, 0, 0, 0.8); + } + .p-scrolltop .p-scrolltop-icon { + font-size: 1.5rem; + color: #f8f9fa; + } + .p-scrolltop .p-icon { + width: 1.5rem; + height: 1.5rem; + } + + .p-skeleton { + background-color: #e9ecef; + border-radius: 3px; + } + .p-skeleton:after { + background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0)); + } + + .p-tag { + background: #FFC107; + color: #212529; + font-size: 0.75rem; + font-weight: 700; + padding: 0.25rem 0.4rem; + border-radius: 3px; + } + .p-tag.p-tag-success { + background-color: #689f38; + color: #ffffff; + } + .p-tag.p-tag-info { + background-color: #0288d1; + color: #ffffff; + } + .p-tag.p-tag-warning { + background-color: #fbc02d; + color: #212529; + } + .p-tag.p-tag-danger { + background-color: #d32f2f; + color: #ffffff; + } + .p-tag .p-tag-icon { + margin-right: 0.25rem; + font-size: 0.75rem; + } + .p-tag .p-icon { + width: 0.75rem; + height: 0.75rem; + } + + .p-terminal { + background: #ffffff; + color: #495057; + border: 1px solid #dee2e6; + padding: 1rem; + } + .p-terminal .p-terminal-input { + font-family: var(--font-family); + font-feature-settings: var(--font-feature-settings, normal); + font-size: 1rem; + } +} +/* Customizations to the designer theme should be defined here */ +@layer primeng { + .p-carousel .p-carousel-indicators .p-carousel-indicator.p-highlight button { + background-color: #FFC107; + } + + .p-galleria .p-galleria-indicators .p-galleria-indicator.p-highlight button { + background-color: #FFC107; + } + + .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-top > td { + box-shadow: inset 0 2px 0 0 #FFC107; + } + .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-bottom > td { + box-shadow: inset 0 -2px 0 0 #FFC107; + } +} diff --git a/frontend/src/environments/environment.dev.ts b/frontend/src/environments/environment.dev.ts new file mode 100644 index 0000000..c35c67f --- /dev/null +++ b/frontend/src/environments/environment.dev.ts @@ -0,0 +1,4 @@ +export const environment = { + production: false, + apiUrl: 'http://localhost:8089/api/v1' +} diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts new file mode 100644 index 0000000..335a870 --- /dev/null +++ b/frontend/src/environments/environment.ts @@ -0,0 +1,4 @@ +export const environment = { + production: true, + apiUrl: 'http://localhost:8008/api/v1' +} diff --git a/frontend/src/index.html b/frontend/src/index.html new file mode 100644 index 0000000..b44430e --- /dev/null +++ b/frontend/src/index.html @@ -0,0 +1,14 @@ + + + + + Epsyl Prospects Service + + + + + + + + + diff --git a/frontend/src/main.server.ts b/frontend/src/main.server.ts new file mode 100644 index 0000000..4b9d4d1 --- /dev/null +++ b/frontend/src/main.server.ts @@ -0,0 +1,7 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { AppComponent } from './app/app.component'; +import { config } from './app/app.config.server'; + +const bootstrap = () => bootstrapApplication(AppComponent, config); + +export default bootstrap; diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..11e0868 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,12 @@ +/// + +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { AppComponent } from './app/app.component'; +import { registerLocaleData } from '@angular/common'; +import localeFr from '@angular/common/locales/fr'; + +registerLocaleData(localeFr, 'fr'); + +bootstrapApplication(AppComponent, appConfig) + .catch((err) => console.error(err)); diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss new file mode 100644 index 0000000..7ae99ab --- /dev/null +++ b/frontend/src/styles.scss @@ -0,0 +1,21 @@ +/* You can add global styles to this file, and also import other style files */ + +$gutter: 1rem; //for primeflex grid system +@import "assets/layout/layout.scss"; + +/* PrimeNG */ +@import "../node_modules/primeng/resources/primeng.min.css"; +@import "../node_modules/primeflex/primeflex.scss"; +@import "../node_modules/primeicons/primeicons.css"; + +.yesData { + background-color: greenyellow +} + +.noData { + background-color: red +} + +.message-error { + color: red; +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..3544763 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,19 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [ + "node", + "@angular/localize" + ] + }, + "files": [ + "src/main.ts", + "src/main.server.ts", + "server.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..4381c2d --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,38 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ], + "paths": { + "@eps/components/*": ["./src/app/components/*"], + "@eps/shared/*": ["./src/app/shared/*"], + "@eps/service/*": ["./src/app/services/*"], + "@eps/env/*": ["./src/environments/*"], + } + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/frontend/tsconfig.spec.json b/frontend/tsconfig.spec.json new file mode 100644 index 0000000..1ff6332 --- /dev/null +++ b/frontend/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "baseUrl": "./src", + "outDir": "./out-tsc/spec", + "types": [ + "jasmine", + "@angular/localize" + ], + "composite": true, + "declaration": true + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +}