diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a28509bab7..4bdd615eb2 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -6,6 +6,7 @@ * [ ] Have you run the linter (`npm run lint`) prior to submission? Enable the git hook on commit in your IDE to run it and format the code automatically. * [ ] Have you run the tests locally and added/updated them if needed? * [ ] Have you checked that app can be built (`npm run build`)? +* [ ] Have you checked that no new circular dependencies appreared with your changes? (the webpack plugin reports circular dependencies within the `dev` npm script) * [ ] Have you made sure that all the necessary pipelines has been successfully completed? * [ ] If the task requires translations to be updated, have you done this by running the `manage:translations` script? diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0f0a3236dc..b113bbed49 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -82,11 +82,3 @@ jobs: asset_path: '${{ github.workspace }}/${{ env.RELEASE_DIR }}/${{ env.UI_ARTIFACT_NAME }}' asset_name: ${{ env.UI_ARTIFACT_NAME }} asset_content_type: application/gzip - - - name: Commit version - run: | - echo ${{ github.event.inputs.version }} > ${{ github.workspace }}/VERSION - git add ${{ github.workspace }}/VERSION - export CHANGED=`git status | grep VERSION | xargs` - [ -z "${CHANGED}" ] || git commit -m 'Commit version' - git push diff --git a/Dockerfile b/Dockerfile index 3231286ee4..a692fe8b4e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ # Only for technical/build aims, built image will be with nginxinc/nginx-unprivileged:alpine according to the last step -FROM --platform=$BUILDPLATFORM alpine:3.20.3 AS generate-build-info + +FROM alpine:3.20.3 AS generate-build-info RUN mkdir -p /usr/src/app/build WORKDIR /usr/src ARG APP_VERSION=develop @@ -8,14 +9,14 @@ ARG BUILD_BRANCH ARG BUILD_DATE RUN echo {\"build\": { \"version\": \"${APP_VERSION}\", \"branch\": \"${BUILD_BRANCH}\", \"build_date\": \"${BUILD_DATE}\", \"name\": \"Service UI\", \"repo\": \"reportportal/service-ui\"}} > ./app/build/buildInfo.json -FROM --platform=$BUILDPLATFORM node:20-alpine AS build-frontend +FROM node:20-alpine AS build-frontend RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY ./app/ /usr/src/app/ RUN export NODE_OPTIONS="--max-old-space-size=4096" RUN npm ci --legacy-peer-deps && npm run build -FROM --platform=$BUILDPLATFORM nginxinc/nginx-unprivileged:alpine +FROM nginxinc/nginx-unprivileged:alpine USER root diff --git a/app/localization/translated/be.json b/app/localization/translated/be.json index 798e2d64af..2f19f06c8f 100644 --- a/app/localization/translated/be.json +++ b/app/localization/translated/be.json @@ -279,6 +279,7 @@ "Common.add": "Дадаць", "Common.analyzerDisabled": "Сэрвiс analyzer не запушчаны", "Common.april": "Красавік", + "Common.assign": "Прызначыць", "Common.august": "Жнівень", "Common.back": "Назад", "Common.cancel": "Адмяніць", @@ -647,7 +648,8 @@ "EditWidgetModal.editWidgetSuccess": "Віджэт абноўлены!", "EditWidgetModal.headerText": "Рэдагаваць віджэт", "EmailFormFields.authLabel": "Аўтарызацыя", - "EmailFormFields.fromLabel": "Імя адпраўніка па змаўчанні", + "EmailFormFields.fromEmailLabel": "From Email", + "EmailFormFields.fromNameLabel": "From name", "EmailFormFields.hostLabel": "Хост", "EmailFormFields.passwordLabel": "Пароль", "EmailFormFields.portFieldHint": "Магчымы толькі лічбы ад '1' да '65535'", @@ -1069,7 +1071,9 @@ "InvestigatedPercentageOfLaunchesControls.ItemsFieldLabel": "Элементы", "InvestigatedPercentageOfLaunchesControls.ItemsValidationError": "Колькасць элементаў павінна быць памерам ад '1' да '600'", "InviteUserModal.description": "Запрасіць карыстальніка на праект", + "InviteUserModal.descriptionAssign": "Прызначыць карыстальніка на праект", "InviteUserModal.emailLabel": "Электронная пошта", + "InviteUserModal.headerAssignUserModal": "Прызначыць карыстальніка", "InviteUserModal.headerInviteUserModal": "Запрасіць карыстальніка", "InviteUserModal.inputPlaceholder": "Калі ласка, увядзіце лагін або адрас электроннай пошты", "InviteUserModal.inviteExternalMember": "Запрашэнне ўдзельніка было паспяхова зарэгістравана. Якая пацвярджае інфармацыя будзе адпраўлена на прадстаўлены электронны адрас. Тэрмін дзеяння: 1 дзень.", @@ -1372,6 +1376,7 @@ "MembersGrid.roleCol": "Праектная ролю", "MembersPage.notFound": "Не знойдзена удзельнікаў па фільтру ''{filter}''", "MembersPage.title": "Удзельнікі праекта", + "MembersPageToolbar.assignUser": "Прызначыць карыстальніка", "MembersPageToolbar.inviteUser": "Запрасіць Карыстальніка", "MembersPageToolbar.membersSearchHint": "Імя карыстальніка не павінна быць пустым", "MembersPageToolbar.permissionMap": "Карта Правоў", @@ -1839,6 +1844,12 @@ "SortingControl.sortByFailedItems": "Няўдалыя пункты", "SortingControl.sortByPassingRate": "Прахадны бал", "SortingControl.sortByTotal": "Агульная колькасць", + "SsoUsersForm.errorNotification": "Не ўдалося абнавіць налады SSO", + "SsoUsersForm.formHeader": "Запрашэнне карыстальнікаў", + "SsoUsersForm.manualInvitesDescription": "Карыстальнікі могуць адпраўляць запрашэнні іншым карыстальнікам. Калі ўключана, новыя карыстальнікі могуць быць ствараны толькі праз SSO.", + "SsoUsersForm.ssoOnlyDescription": "Новыя карыстальнікі могуць быць створаны толькі праз SSO.", + "SsoUsersForm.successNotification": "Налады SSO паспяхова абноўлены", + "SsoUsersForm.switcherLabel": "Толькі SSO карыстальнікі", "StackTrace.jumpTo": "Перайсці", "StackTrace.linkText": "Адкрыць логі", "StackTrace.loadLabel": "Загрузіць яшчэ", diff --git a/app/localization/translated/es.json b/app/localization/translated/es.json index a94647513c..c802a1dd1f 100644 --- a/app/localization/translated/es.json +++ b/app/localization/translated/es.json @@ -279,6 +279,7 @@ "Common.add": "Agregar", "Common.analyzerDisabled": "El servicio del analizador no está disponible", "Common.april": "Abril", + "Common.assign": "Assign", "Common.august": "Agosto", "Common.back": "Atrás", "Common.cancel": "Cancelar", @@ -647,7 +648,8 @@ "EditWidgetModal.editWidgetSuccess": "¡Widget actualizado!", "EditWidgetModal.headerText": "Editar widget", "EmailFormFields.authLabel": "Autorización", - "EmailFormFields.fromLabel": "Nombre del remitente predeterminado", + "EmailFormFields.fromEmailLabel": "From Email", + "EmailFormFields.fromNameLabel": "From name", "EmailFormFields.hostLabel": "Host", "EmailFormFields.passwordLabel": "Contraseña", "EmailFormFields.portFieldHint": "Solo se permiten números del '1' al '65535'", @@ -1069,7 +1071,9 @@ "InvestigatedPercentageOfLaunchesControls.ItemsFieldLabel": "Elementos", "InvestigatedPercentageOfLaunchesControls.ItemsValidationError": "El número de elementos debe estar entre '1' y '600'", "InviteUserModal.description": "Invitar usuario al proyecto", + "InviteUserModal.descriptionAssign": "Assign user to the project", "InviteUserModal.emailLabel": "Correo electrónico", + "InviteUserModal.headerAssignUserModal": "Assign user", "InviteUserModal.headerInviteUserModal": "Invitar usuario", "InviteUserModal.inputPlaceholder": "Ingrese nombre de usuario o correo electrónico", "InviteUserModal.inviteExternalMember": "La invitación del miembro se ha registrado correctamente. La información de confirmación será enviada a la dirección de correo electrónico proporcionada. Validez: 1 día.", @@ -1372,6 +1376,7 @@ "MembersGrid.roleCol": "Rol de proyecto", "MembersPage.notFound": "No se encontraron miembros para ''{filter}''", "MembersPage.title": "Miembros del proyecto", + "MembersPageToolbar.assignUser": "Assign User", "MembersPageToolbar.inviteUser": "Invitar Usuario", "MembersPageToolbar.membersSearchHint": "El nombre de usuario no debe estar vacío", "MembersPageToolbar.permissionMap": "Mapa de permisos", @@ -1839,6 +1844,12 @@ "SortingControl.sortByFailedItems": "Elementos fallidos", "SortingControl.sortByPassingRate": "Porcentaje de aprobados", "SortingControl.sortByTotal": "Cantidad total", + "SsoUsersForm.errorNotification": "Failed to update SSO settings", + "SsoUsersForm.formHeader": "Instance Invitations", + "SsoUsersForm.manualInvitesDescription": "Users can manually send invitations for other users. If enabled new users can be created via SSO only.", + "SsoUsersForm.ssoOnlyDescription": "New users can be created via SSO only.", + "SsoUsersForm.successNotification": "SSO settings have been updated successfully", + "SsoUsersForm.switcherLabel": "SSO users only", "StackTrace.jumpTo": "Ir a", "StackTrace.linkText": "Abrir registros", "StackTrace.loadLabel": "Cargar más", diff --git a/app/localization/translated/ru.json b/app/localization/translated/ru.json index 22a9fd9425..79e0b450ba 100644 --- a/app/localization/translated/ru.json +++ b/app/localization/translated/ru.json @@ -279,6 +279,7 @@ "Common.add": "Добавить", "Common.analyzerDisabled": "Сервис analyzer не запущен", "Common.april": "Апрель", + "Common.assign": "Назначить", "Common.august": "Август", "Common.back": "Назад", "Common.cancel": "Отменить", @@ -647,7 +648,8 @@ "EditWidgetModal.editWidgetSuccess": "Виджет обновлен!", "EditWidgetModal.headerText": "Редактировать виджет", "EmailFormFields.authLabel": "Авторизация", - "EmailFormFields.fromLabel": "Имя отправителя по умолчанию", + "EmailFormFields.fromEmailLabel": "From Email", + "EmailFormFields.fromNameLabel": "From name", "EmailFormFields.hostLabel": "Хост", "EmailFormFields.passwordLabel": "Пароль", "EmailFormFields.portFieldHint": "Возможны только цифры от '1' до '65535'", @@ -1069,7 +1071,9 @@ "InvestigatedPercentageOfLaunchesControls.ItemsFieldLabel": "Элементы", "InvestigatedPercentageOfLaunchesControls.ItemsValidationError": "Количество элементов принимает значения от '1' до '600'", "InviteUserModal.description": "Пригласить пользователя на проект", + "InviteUserModal.descriptionAssign": "Назначить пользователя на проект", "InviteUserModal.emailLabel": "Электронная почта", + "InviteUserModal.headerAssignUserModal": "Назначить пользователя", "InviteUserModal.headerInviteUserModal": "Пригласить пользователя", "InviteUserModal.inputPlaceholder": "Введите логин или адрес электронной почты", "InviteUserModal.inviteExternalMember": "Приглашение участника было успешно зарегистрировано. Подтверждающая информация будет отправлена на предоставленный электронный адрес. Срок действия: 1 день.", @@ -1372,6 +1376,7 @@ "MembersGrid.roleCol": "Проектная роль", "MembersPage.notFound": "No members found for ''{filter}''", "MembersPage.title": "Участники проекта", + "MembersPageToolbar.assignUser": "Назначить пользователя", "MembersPageToolbar.inviteUser": "Пригласить Пользователя", "MembersPageToolbar.membersSearchHint": "Имя пользователя не должно быть пустым", "MembersPageToolbar.permissionMap": "Карта Прав", @@ -1839,6 +1844,12 @@ "SortingControl.sortByFailedItems": "Неудачные пункты", "SortingControl.sortByPassingRate": "Проходной балл", "SortingControl.sortByTotal": "Общее количество", + "SsoUsersForm.errorNotification": "Не удалось обновить настройки SSO", + "SsoUsersForm.formHeader": "Приглашение пользователей", + "SsoUsersForm.manualInvitesDescription": "Пользователи могут вручную отправлять приглашения другим пользователям. Если включено, новых пользователей можно создавать только через SSO.", + "SsoUsersForm.ssoOnlyDescription": "Новых пользователей можно создавать только через SSO.", + "SsoUsersForm.successNotification": "Настройки SSO успешно обновлены", + "SsoUsersForm.switcherLabel": "Только SSO пользователи", "StackTrace.jumpTo": "Перейти", "StackTrace.linkText": "Открыть логи", "StackTrace.loadLabel": "Загрузить еще", diff --git a/app/localization/translated/uk.json b/app/localization/translated/uk.json index c645efe9dd..252dc7d193 100644 --- a/app/localization/translated/uk.json +++ b/app/localization/translated/uk.json @@ -279,6 +279,7 @@ "Common.add": "Додати", "Common.analyzerDisabled": "Сервіс analyzer не запущений", "Common.april": "Квітень", + "Common.assign": "Призначити", "Common.august": "Серпень", "Common.back": "Тому", "Common.cancel": "Скасувати", @@ -647,7 +648,8 @@ "EditWidgetModal.editWidgetSuccess": "Оновлений Віджет!", "EditWidgetModal.headerText": "Віджет Редагувати", "EmailFormFields.authLabel": "Авторизація", - "EmailFormFields.fromLabel": "Ім’я відправника за замовчуванням", + "EmailFormFields.fromEmailLabel": "From Email", + "EmailFormFields.fromNameLabel": "From name", "EmailFormFields.hostLabel": "Хост", "EmailFormFields.passwordLabel": "Пароль", "EmailFormFields.portFieldHint": "Можливі тільки цифри від '1' до '65535'", @@ -1069,7 +1071,9 @@ "InvestigatedPercentageOfLaunchesControls.ItemsFieldLabel": "Елементи", "InvestigatedPercentageOfLaunchesControls.ItemsValidationError": "Кількість елементів приймає значення від '1' до '600'", "InviteUserModal.description": "Запросити користувача на проект", + "InviteUserModal.descriptionAssign": "Долучити користувача до проєкту", "InviteUserModal.emailLabel": "Адреса електронної пошти", + "InviteUserModal.headerAssignUserModal": "Призначити користувача", "InviteUserModal.headerInviteUserModal": "Запросити користувача", "InviteUserModal.inputPlaceholder": "Введіть логін або адресу електронної пошти", "InviteUserModal.inviteExternalMember": "Запрошення учасника було успішно зареєстровано. Підтверджуюча інформація буде відправлена на наданий електронну адресу. Термін дії: 1 день.", @@ -1372,6 +1376,7 @@ "MembersGrid.roleCol": "Проектна роль", "MembersPage.notFound": "No members found for ''{filter}''", "MembersPage.title": "Учасники проекту", + "MembersPageToolbar.assignUser": "Призначити користувача", "MembersPageToolbar.inviteUser": "Запросити Користувача", "MembersPageToolbar.membersSearchHint": "Ім’я користувача не повинно бути порожнім", "MembersPageToolbar.permissionMap": "Карта Прав", @@ -1839,6 +1844,12 @@ "SortingControl.sortByFailedItems": "Невдалі пункти", "SortingControl.sortByPassingRate": "Прохідний бал", "SortingControl.sortByTotal": "Загальна кількість", + "SsoUsersForm.errorNotification": "Не вдалося оновити налаштування SSO", + "SsoUsersForm.formHeader": "Запрошення користувачів", + "SsoUsersForm.manualInvitesDescription": "Користувачі можуть самостійно надсилати запрошення іншим користувачам. Якщо ввімкнено, нові користувачі створюються виключно через SSO.", + "SsoUsersForm.ssoOnlyDescription": "Користувачі створюються виключно через SSO.", + "SsoUsersForm.successNotification": "Налаштування SSO успішно оновлено", + "SsoUsersForm.switcherLabel": "Тільки SSO користувачі", "StackTrace.jumpTo": "Перейти", "StackTrace.linkText": "Логи Відкрити", "StackTrace.loadLabel": "Завантажити", diff --git a/app/localization/translated/zh.json b/app/localization/translated/zh.json index 2ba04d183e..a098a91e53 100644 --- a/app/localization/translated/zh.json +++ b/app/localization/translated/zh.json @@ -279,6 +279,7 @@ "Common.add": "添加", "Common.analyzerDisabled": "服务分析器未运行", "Common.april": "四月", + "Common.assign": "Assign", "Common.august": "八月", "Common.back": "返回", "Common.cancel": "取消", @@ -647,7 +648,8 @@ "EditWidgetModal.editWidgetSuccess": "小部件已更新", "EditWidgetModal.headerText": "编辑小部件", "EmailFormFields.authLabel": "授权", - "EmailFormFields.fromLabel": "默认发件人姓名", + "EmailFormFields.fromEmailLabel": "From Email", + "EmailFormFields.fromNameLabel": "From name", "EmailFormFields.hostLabel": "服务器(Host)", "EmailFormFields.passwordLabel": "密码", "EmailFormFields.portFieldHint": "只允许输入从“1”到“65535”的数字", @@ -1069,7 +1071,9 @@ "InvestigatedPercentageOfLaunchesControls.ItemsFieldLabel": "测试项", "InvestigatedPercentageOfLaunchesControls.ItemsValidationError": "测试项的数量应为1到600个", "InviteUserModal.description": "为此项目邀请用户", + "InviteUserModal.descriptionAssign": "Assign user to the project", "InviteUserModal.emailLabel": "邮箱", + "InviteUserModal.headerAssignUserModal": "Assign user", "InviteUserModal.headerInviteUserModal": "邀请用户", "InviteUserModal.inputPlaceholder": "请输入登录名或邮箱", "InviteUserModal.inviteExternalMember": "会员邀请已登记。确认信息将通过提供的电子邮件发送。有效期:1天。", @@ -1372,6 +1376,7 @@ "MembersGrid.roleCol": "项目角色", "MembersPage.notFound": "未找到“{filter}”的成员", "MembersPage.title": "项目成员", + "MembersPageToolbar.assignUser": "Assign User", "MembersPageToolbar.inviteUser": "邀请用户", "MembersPageToolbar.membersSearchHint": "成员名不能为空", "MembersPageToolbar.permissionMap": "权限表", @@ -1839,6 +1844,12 @@ "SortingControl.sortByFailedItems": "失败的测试项", "SortingControl.sortByPassingRate": "通过率", "SortingControl.sortByTotal": "全部", + "SsoUsersForm.errorNotification": "Failed to update SSO settings", + "SsoUsersForm.formHeader": "Instance Invitations", + "SsoUsersForm.manualInvitesDescription": "Users can manually send invitations for other users. If enabled new users can be created via SSO only.", + "SsoUsersForm.ssoOnlyDescription": "New users can be created via SSO only.", + "SsoUsersForm.successNotification": "SSO settings have been updated successfully", + "SsoUsersForm.switcherLabel": "SSO users only", "StackTrace.jumpTo": "跳转至", "StackTrace.linkText": "在日志视图中打开", "StackTrace.loadLabel": "加载更多", diff --git a/app/package-lock.json b/app/package-lock.json index 34168a7694..678a1f73eb 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -24,7 +24,7 @@ "d3": "7.8.5", "d3-selection": "1.4.0", "date-fns": "2.29.3", - "dompurify": "2.0.17", + "dompurify": "2.5.4", "dotenv": "5.0.1", "downshift": "6.1.7", "fast-deep-equal": "3.1.3", @@ -78,7 +78,7 @@ "reset-css": "2.2.1", "semver-diff": "3.1.1", "simplemde": "1.11.2", - "swagger-ui-react": "5.9.4", + "swagger-ui-react": "5.17.12", "video.js": "7.17.0" }, "devDependencies": { @@ -105,8 +105,8 @@ "clean-webpack-plugin": "2.0.2", "compression-webpack-plugin": "9.2.0", "css-hot-loader": "1.4.4", - "css-loader": "6.8.1", - "css-minimizer-webpack-plugin": "3.4.1", + "css-loader": "7.1.2", + "css-minimizer-webpack-plugin": "7.0.0", "enzyme": "3.11.0", "enzyme-to-json": "3.4.2", "eslint": "7.32.0", @@ -127,19 +127,19 @@ "jest-environment-jsdom": "29.7.0", "jest-junit": "9.0.0", "lint-staged": "9.4.2", - "mini-css-extract-plugin": "2.5.2", - "node-sass": "9.0.0", - "postcss": "^8.4.5", - "postcss-loader": "7.3.3", + "mini-css-extract-plugin": "2.9.1", + "postcss": "8.4.47", + "postcss-loader": "8.1.1", "prettier": "1.19.1", "raw-loader": "4.0.2", "react-intl-translations-manager": "5.0.3", "react-refresh": "0.14.0", "regenerator-runtime": "0.13.3", - "sass-loader": "13.3.3", - "sass-resources-loader": "2.2.4", + "sass": "1.80.1", + "sass-loader": "16.0.2", + "sass-resources-loader": "2.2.5", "slnodejs": "6.1.533", - "style-loader": "3.3.1", + "style-loader": "3.3.4", "stylelint": "13.13.1", "stylelint-config-recommended-scss": "4.3.0", "stylelint-declaration-use-variable": "^1.7.3", @@ -2095,9 +2095,10 @@ "dev": true }, "node_modules/@braintree/sanitize-url": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", - "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==" + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.0.2.tgz", + "integrity": "sha512-NVf/1YycDMs6+FxS0Tb/W8MjJRDQdXF+tBfDtZ5UZeiRUkTmwKc4vmYCKZTyymfJk1gnMsauvZSX/HiV9jOABw==", + "license": "MIT" }, "node_modules/@cfaester/enzyme-adapter-react-18": { "version": "0.7.1", @@ -2379,12 +2380,6 @@ "integrity": "sha512-5D0C4tQgNFJNaJ17BYum0GfAcKNK3oa1VWzgkv/AN7i52fg4r69ZLcpEGpf6tZiX9Qld8CDwTQOeFt6fuOqgVw==", "deprecated": "the package is rather renamed to @formatjs/ecma-abstract with some changes in functionality (primarily selectUnit is removed and we don't plan to make any further changes to this package" }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -3322,71 +3317,289 @@ "node": ">= 8" } }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "node_modules/@parcel/watcher": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", + "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", "dev": true, "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", + "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", + "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "cpu": [ + "arm64" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", + "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", + "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", + "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", + "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "cpu": [ + "arm64" + ], "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", + "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", + "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "glob": "^7.1.3" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" }, - "bin": { - "rimraf": "bin.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", + "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", + "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", + "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", + "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { @@ -4836,11 +5049,6 @@ "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==" - }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -4868,10 +5076,11 @@ } }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4889,18 +5098,6 @@ "acorn-walk": "^8.0.2" } }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", @@ -4931,18 +5128,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-walk/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/add-px-to-style": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-px-to-style/-/add-px-to-style-1.0.0.tgz", @@ -4971,18 +5156,6 @@ "node": ">= 6.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -5165,46 +5338,12 @@ "node": ">=8" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/are-we-there-yet/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/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -5520,28 +5659,11 @@ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, - "node_modules/async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/attr-accept": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.3.tgz", @@ -6341,6 +6463,7 @@ "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" @@ -6350,6 +6473,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -6441,9 +6565,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "funding": [ { @@ -6460,9 +6584,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, "bin": { @@ -6816,171 +6940,6 @@ "node": ">=0.10.0" } }, - "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.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": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/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/cacache/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/cacache/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/cacache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/rimraf/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/cacache/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "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/cacache/node_modules/rimraf/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/caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -7132,9 +7091,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001644", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz", - "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==", + "version": "1.0.30001669", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", + "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", "dev": true, "funding": [ { @@ -7312,15 +7271,6 @@ "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.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", @@ -7684,15 +7634,6 @@ "simple-swizzle": "^0.2.2" } }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -7898,7 +7839,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/confusing-browser-globals": { "version": "1.0.11", @@ -7921,12 +7863,6 @@ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -8195,6 +8131,7 @@ "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", @@ -8236,12 +8173,12 @@ } }, "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "postcss": "^8.0.9" @@ -8285,29 +8222,38 @@ } }, "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.0.0" + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/css-loader/node_modules/semver": { @@ -8323,20 +8269,20 @@ } }, "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-niy66jxsQHqO+EYbhPuIhqRQ1mNcNVUHrMnkzzir9kFOERJUaQDDRhh7dKDz33kBpkWMF9M8Vx0QlDbc5AHOsw==", "dev": true, "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" + "@jridgewell/trace-mapping": "^0.3.25", + "cssnano": "^7.0.1", + "jest-worker": "^29.7.0", + "postcss": "^8.4.38", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -8349,6 +8295,9 @@ "@parcel/css": { "optional": true }, + "@swc/css": { + "optional": true + }, "clean-css": { "optional": true }, @@ -8357,6 +8306,9 @@ }, "esbuild": { "optional": true + }, + "lightningcss": { + "optional": true } } }, @@ -8388,6 +8340,30 @@ "ajv": "^8.8.2" } }, + "node_modules/css-minimizer-webpack-plugin/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/css-minimizer-webpack-plugin/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -8413,13 +8389,19 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/css-minimizer-webpack-plugin/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==", + "node_modules/css-minimizer-webpack-plugin/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": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/css-select": { @@ -8439,25 +8421,16 @@ } }, "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/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": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, "node_modules/css-what": { @@ -8508,93 +8481,114 @@ } }, "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", + "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", "dev": true, "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" + "cssnano-preset-default": "^7.0.6", + "lilconfig": "^3.1.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/cssnano" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", + "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.3", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.2", + "postcss-colormin": "^7.0.2", + "postcss-convert-values": "^7.0.4", + "postcss-discard-comments": "^7.0.3", + "postcss-discard-duplicates": "^7.0.1", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.4", + "postcss-merge-rules": "^7.0.4", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.2", + "postcss-minify-selectors": "^7.0.4", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.2", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.2", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, "dependencies": { - "css-tree": "^1.1.2" + "css-tree": "~2.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -9453,12 +9447,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -9694,9 +9682,10 @@ } }, "node_modules/dompurify": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.0.17.tgz", - "integrity": "sha512-nNwwJfW55r8akD8MSFz6k75bzyT2y6JEa1O3JrZFBf+Y5R9JXXU4OsRl0B9hKoPgHTw2b7ER5yJ5Md97MMUJPg==" + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.4.tgz", + "integrity": "sha512-l5NNozANzaLPPe0XaAwvg3uZcHtDBnziX/HjsY1UcDj1MxTK8Dd0Kv096jyPK5HRzs/XM5IMj20dW8Fk+HnbUA==", + "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/domutils": { "version": "3.1.0", @@ -9780,9 +9769,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz", - "integrity": "sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA==", + "version": "1.5.40", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.40.tgz", + "integrity": "sha512-LYm78o6if4zTasnYclgQzxEcgMoIcybWOhkATWepN95uwVVWV0/IW10v+2sIeHE+bIYWipLneTftVyQm45UY7g==", "dev": true }, "node_modules/elegant-spinner": { @@ -9857,16 +9846,6 @@ "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/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -10004,12 +9983,6 @@ "jkroso-type": "1" } }, - "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/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -10989,6 +10962,19 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/espree/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -11453,6 +11439,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -11529,14 +11516,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dependencies": { - "micromatch": "^4.0.2" - } - }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -11734,18 +11713,6 @@ "node": ">=6 <7 || >=8" } }, - "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/fs-monkey": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", @@ -11755,7 +11722,8 @@ "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==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -11811,67 +11779,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gauge/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/gauge/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/gauge/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/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "dependencies": { - "globule": "^1.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -11986,6 +11893,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -12122,53 +12030,6 @@ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, - "node_modules/globule": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", - "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", - "dev": true, - "dependencies": { - "glob": "~7.1.1", - "lodash": "^4.17.21", - "minimatch": "~3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/globule/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globule/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/gonzales-pe": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", @@ -12198,7 +12059,8 @@ "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==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/growly": { "version": "1.3.0", @@ -12350,12 +12212,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, "node_modules/hash-base": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", @@ -12745,12 +12601,6 @@ "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", @@ -12886,15 +12736,6 @@ "node": ">=10.17.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/husky": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.8.tgz", @@ -13197,17 +13038,12 @@ "resolved": "https://registry.npmjs.org/individual/-/individual-2.0.0.tgz", "integrity": "sha512-pWt8hBCqJsUWI/HtcfWod7+N9SgAqyPEaF7JQjwzjn5vGrpg6aQ5qeAFQ7dx//UH4J1O+7xqew+gCeeFt6xN/g==" }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, "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==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -13299,25 +13135,6 @@ "loose-envify": "^1.0.0" } }, - "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": "2.2.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", @@ -13538,6 +13355,7 @@ "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" }, @@ -13631,12 +13449,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "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-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -13665,6 +13477,7 @@ "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" } @@ -13952,6 +13765,7 @@ "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" }, @@ -13962,12 +13776,14 @@ "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isobject": { "version": "3.0.1", @@ -16141,12 +15957,6 @@ "resolved": "https://registry.npmjs.org/jkroso-type/-/jkroso-type-1.1.1.tgz", "integrity": "sha512-zZgay+fPG6PgMUrpyFADmQmvLo39+AZa7Gc5pZhev2RhDxwANEq2etwD8d0e6rTg5NkwOIlQmaEmns3draC6Ng==" }, - "node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true - }, "node_modules/js-file-download": { "version": "0.4.12", "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.12.tgz", @@ -16170,12 +15980,6 @@ "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/jsdom": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", @@ -16221,18 +16025,6 @@ } } }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -16279,6 +16071,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", + "dev": true, "dependencies": { "call-bind": "^1.0.5", "isarray": "^2.0.5", @@ -16329,6 +16122,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -16392,14 +16186,6 @@ "node": ">=0.10.0" } }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -16488,12 +16274,15 @@ "dev": true }, "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -17173,42 +16962,6 @@ "semver": "bin/semver" } }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -17336,9 +17089,9 @@ } }, "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, "node_modules/media-typer": { @@ -17538,6 +17291,7 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -17635,12 +17389,13 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.2.tgz", - "integrity": "sha512-Lwgq9qLNyBK6yNLgzssXnq4r2+mB9Mz3cJWlM8kseysHIvTicFhDNimFgY94jjqlwhNzLPsq8wv4X+vOHtMdYA==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz", + "integrity": "sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==", "dev": true, "dependencies": { - "schema-utils": "^4.0.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "engines": { "node": ">= 12.13.0" @@ -17706,6 +17461,15 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/mini-css-extract-plugin/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/minim": { "version": "0.23.8", "resolved": "https://registry.npmjs.org/minim/-/minim-0.23.8.tgz", @@ -17733,6 +17497,7 @@ "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" }, @@ -17744,6 +17509,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17762,108 +17528,6 @@ "node": ">= 6" } }, - "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-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.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-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-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/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/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", @@ -17948,7 +17612,7 @@ "version": "2.20.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", - "devOptional": true + "optional": true }, "node_modules/nanoid": { "version": "3.3.7", @@ -18068,6 +17732,12 @@ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true + }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -18130,267 +17800,6 @@ "node": ">= 6.13.0" } }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/node-gyp/node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/node-gyp/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/node-gyp/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/node-gyp/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/node-gyp/node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/node-gyp/node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/node-gyp/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/node-gyp/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/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/node-gyp/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-gyp/node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/node-gyp/node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/node-gyp/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/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -18504,124 +17913,6 @@ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, - "node_modules/node-sass": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz", - "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==", - "deprecated": "Node Sass is no longer supported. Please use `sass` or `sass-embedded` instead.", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "async-foreach": "^0.1.3", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "lodash": "^4.17.15", - "make-fetch-happen": "^10.0.4", - "meow": "^9.0.0", - "nan": "^2.17.0", - "node-gyp": "^8.4.1", - "sass-graph": "^4.0.1", - "stdout-stream": "^1.4.0", - "true-case-path": "^2.2.1" - }, - "bin": { - "node-sass": "bin/node-sass" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/node-sass/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/node-sass/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/node-sass/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/node-sass/node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-sass/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/node-sass/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/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/nopt-usage": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/nopt-usage/-/nopt-usage-0.1.0.tgz", @@ -18715,22 +18006,6 @@ "node": ">=4" } }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -19277,6 +18552,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "devOptional": true, "dependencies": { "wrappy": "1" } @@ -19302,21 +18578,6 @@ "node": ">=4" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/openapi-path-templating": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/openapi-path-templating/-/openapi-path-templating-1.6.0.tgz", @@ -19371,14 +18632,6 @@ "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -19601,171 +18854,6 @@ "tslib": "^2.0.3" } }, - "node_modules/patch-package": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", - "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "ci-info": "^3.7.0", - "cross-spawn": "^7.0.3", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", - "json-stable-stringify": "^1.0.2", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^7.5.3", - "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^2.2.2" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "node": ">=14", - "npm": ">5" - } - }, - "node_modules/patch-package/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/patch-package/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/patch-package/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/patch-package/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/patch-package/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/patch-package/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/patch-package/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/patch-package/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/patch-package/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/patch-package/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/patch-package/node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -19784,6 +18872,7 @@ "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" } @@ -19798,6 +18887,7 @@ "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" } @@ -19860,15 +18950,16 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "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" }, @@ -20028,9 +19119,9 @@ } }, "node_modules/postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dev": true, "funding": [ { @@ -20048,106 +19139,112 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", + "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.9", + "postcss-selector-parser": "^6.1.2", "postcss-value-parser": "^4.2.0" }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, "peerDependencies": { - "postcss": "^8.2.2" + "postcss": "^8.4.38" } }, "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", + "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", + "browserslist": "^4.23.3", "caniuse-api": "^3.0.0", - "colord": "^2.9.1", + "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", + "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", + "browserslist": "^4.23.3", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", + "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.1.2" + }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", + "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-html": { @@ -20298,25 +19395,34 @@ } }, "node_modules/postcss-loader": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", - "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", + "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": "^8.2.0", - "jiti": "^1.18.2", - "semver": "^7.3.8" + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" }, "engines": { - "node": ">= 14.15.0" + "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-loader/node_modules/argparse": { @@ -20326,15 +19432,15 @@ "dev": true }, "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "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", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -20400,101 +19506,102 @@ "dev": true }, "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", + "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" + "stylehacks": "^7.0.4" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", + "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", + "browserslist": "^4.23.3", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", "dev": true, "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", + "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", + "browserslist": "^4.23.3", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", + "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.5" + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-modules-extract-imports": { @@ -20557,196 +19664,183 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", + "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", + "browserslist": "^4.23.3", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", "dev": true, "dependencies": { - "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url/node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", + "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", "dev": true, "dependencies": { - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", + "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", + "browserslist": "^4.23.3", "caniuse-api": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-resolve-nested-selector": { @@ -20886,9 +19980,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -20899,19 +19993,19 @@ } }, "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", + "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "svgo": "^3.3.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >= 18" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-syntax": { @@ -20924,18 +20018,18 @@ } }, "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", + "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.5" + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-value-parser": { @@ -21105,25 +20199,6 @@ "asap": "~2.0.3" } }, - "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/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -22992,15 +22067,6 @@ "node": ">=0.12" } }, - "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", @@ -23016,6 +22082,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -23210,48 +22277,48 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/sass-graph": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz", - "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==", + "node_modules/sass": { + "version": "1.80.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.1.tgz", + "integrity": "sha512-9lBwDZ7j3y/1DKj5Ec249EVGo5CVpwnzIyIj+cqlCjKkApLnzsJ/l9SnV4YnORvW9dQwQN+gQvh/mFZ8CnDs7Q==", "dev": true, "dependencies": { - "glob": "^7.0.0", - "lodash": "^4.17.11", - "scss-tokenizer": "^0.4.3", - "yargs": "^17.2.1" + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { - "sassgraph": "bin/sassgraph" + "sass": "sass.js" }, "engines": { - "node": ">=12" + "node": ">=14.0.0" } }, "node_modules/sass-loader": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", - "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.2.tgz", + "integrity": "sha512-Ll6iXZ1EYwYT19SqW4mSBb76vSSi8JgzElmzIerhEGgzB5hRjDQIWsPmuk1UrAXkR16KJHqVY0eH+5/uw9Tmfw==", "dev": true, "dependencies": { "neo-async": "^2.6.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "fibers": ">= 3.1.0", + "@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": { - "fibers": { + "@rspack/core": { "optional": true }, "node-sass": { @@ -23262,16 +22329,19 @@ }, "sass-embedded": { "optional": true + }, + "webpack": { + "optional": true } } }, "node_modules/sass-resources-loader": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.4.tgz", - "integrity": "sha512-hIQhBygYky+rLf+4cuoGYONZ623CEH4Swo1fs1WRJkukbqdvN1VIu2KCL59du6vX92bNELzNkGPLx+NorN73xA==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz", + "integrity": "sha512-po8rfETH9cOQACWxubT/1CCu77KjxwRtCDm6QAXZH99aUHBydwSoxdIjC40SGp/dcS/FkSNJl0j1VEojGZqlvQ==", "dev": true, "dependencies": { - "async": "^3.2.0", + "async": "^3.2.3", "chalk": "^4.1.0", "glob": "^7.1.6", "loader-utils": "^2.0.0" @@ -23341,6 +22411,40 @@ "node": ">=8" } }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -23379,16 +22483,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/scss-tokenizer": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz", - "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==", - "dev": true, - "dependencies": { - "js-base64": "^2.4.9", - "source-map": "^0.7.3" - } - }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -23681,6 +22775,7 @@ "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" }, @@ -23692,6 +22787,7 @@ "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" } @@ -24370,16 +23466,6 @@ "uuid": "bin/uuid" } }, - "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/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -24400,34 +23486,6 @@ "uuid": "dist/bin/uuid" } }, - "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": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -24450,9 +23508,9 @@ } }, "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -24655,25 +23713,6 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, - "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -24719,15 +23758,6 @@ "node": ">= 0.8" } }, - "node_modules/stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, "node_modules/stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -24979,9 +24009,9 @@ } }, "node_modules/style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", "dev": true, "engines": { "node": ">= 12.13.0" @@ -25017,19 +24047,19 @@ } }, "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", + "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" + "browserslist": "^4.23.3", + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/stylelint": { @@ -25525,24 +24555,28 @@ "dev": true }, "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", "dev": true, "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" }, "bin": { "svgo": "bin/svgo" }, "engines": { - "node": ">=10.13.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, "node_modules/svgo/node_modules/commander": { @@ -25554,74 +24588,6 @@ "node": ">= 10" } }, - "node_modules/svgo/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/swagger-client": { "version": "3.28.2", "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.28.2.tgz", @@ -25677,23 +24643,23 @@ } }, "node_modules/swagger-ui-react": { - "version": "5.9.4", - "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.9.4.tgz", - "integrity": "sha512-VEY+QuNtRkidR/Os81zq22TpbXkfFDJ2pB6UF+J5sgrf2zksPr2oQGADpWn6RkYXXudZcalXUjcUqgx8WgIfaA==", + "version": "5.17.12", + "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.17.12.tgz", + "integrity": "sha512-qkDBOx9c3v1m8LyUgyc+Idz8UXLmz7RMDYX0Xlry0kwBQYxkw6AXfQ1bemgkna1sRQCvASmucdm2TYAdx6nlaA==", + "license": "Apache-2.0", "dependencies": { - "@babel/runtime-corejs3": "^7.23.2", - "@braintree/sanitize-url": "=6.0.4", + "@babel/runtime-corejs3": "^7.24.5", + "@braintree/sanitize-url": "=7.0.2", "base64-js": "^1.5.1", - "classnames": "^2.3.1", + "classnames": "^2.5.1", "css.escape": "1.5.1", "deep-extend": "0.6.0", - "dompurify": "=3.0.6", + "dompurify": "=3.1.4", "ieee754": "^1.2.1", "immutable": "^3.x.x", "js-file-download": "^0.4.12", "js-yaml": "=4.1.0", "lodash": "^4.17.21", - "patch-package": "^8.0.0", "prop-types": "^15.8.1", "randexp": "^0.5.3", "randombytes": "^2.1.0", @@ -25702,23 +24668,23 @@ "react-immutable-proptypes": "2.2.0", "react-immutable-pure-component": "^2.2.0", "react-inspector": "^6.0.1", - "react-redux": "^8.1.3", + "react-redux": "^9.1.2", "react-syntax-highlighter": "^15.5.0", - "redux": "^4.1.2", + "redux": "^5.0.1", "redux-immutable": "^4.0.0", "remarkable": "^2.0.1", - "reselect": "^4.1.8", + "reselect": "^5.1.0", "serialize-error": "^8.1.0", "sha.js": "^2.4.11", - "swagger-client": "^3.24.5", + "swagger-client": "^3.28.1", "url-parse": "^1.5.10", "xml": "=1.0.1", "xml-but-prettier": "^1.0.1", "zenscroll": "^4.0.2" }, "peerDependencies": { - "react": ">=17.0.0", - "react-dom": ">=17.0.0" + "react": ">=16.8.0 <19", + "react-dom": ">=16.8.0 <19" } }, "node_modules/swagger-ui-react/node_modules/argparse": { @@ -25726,10 +24692,17 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/swagger-ui-react/node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/swagger-ui-react/node_modules/dompurify": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", - "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.4.tgz", + "integrity": "sha512-2gnshi6OshmuKil8rMZuQCGiUF3cUxHY3NGDzUAdUx/NPEe5DVnO8BDoAQouvgwnx0R/+a6jUn36Z0FSdq8vww==", + "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/swagger-ui-react/node_modules/js-yaml": { "version": "4.1.0", @@ -25754,10 +24727,40 @@ "node": ">=4" } }, + "node_modules/swagger-ui-react/node_modules/react-redux": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz", + "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.3", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25", + "react": "^18.0", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/swagger-ui-react/node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, "node_modules/swagger-ui-react/node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" }, "node_modules/swagger-ui-react/node_modules/ret": { "version": "0.2.2", @@ -25907,23 +24910,6 @@ "node": ">=0.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-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -25972,33 +24958,6 @@ "node": ">= 6" } }, - "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.31.3", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", @@ -26060,18 +25019,6 @@ "node": ">=0.10.0" } }, - "node_modules/terser/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -26133,17 +25080,6 @@ "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -26182,6 +25118,7 @@ "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" }, @@ -26332,12 +25269,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, "node_modules/ts-mixer": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", @@ -26673,30 +25604,6 @@ "node": ">=8" } }, - "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/unist-util-find-all-after": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", @@ -27537,18 +26444,6 @@ } } }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/webpack/node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", @@ -27666,6 +26561,7 @@ "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" }, @@ -27775,15 +26671,6 @@ "react": ">=16" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -27933,7 +26820,8 @@ "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==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "devOptional": true }, "node_modules/write-file-atomic": { "version": "4.0.2", diff --git a/app/package.json b/app/package.json index 86ae7c609b..e93d55af76 100644 --- a/app/package.json +++ b/app/package.json @@ -37,7 +37,7 @@ "d3": "7.8.5", "d3-selection": "1.4.0", "date-fns": "2.29.3", - "dompurify": "2.0.17", + "dompurify": "2.5.4", "dotenv": "5.0.1", "downshift": "6.1.7", "fast-deep-equal": "3.1.3", @@ -91,7 +91,7 @@ "reset-css": "2.2.1", "semver-diff": "3.1.1", "simplemde": "1.11.2", - "swagger-ui-react": "5.9.4", + "swagger-ui-react": "5.17.12", "video.js": "7.17.0" }, "devDependencies": { @@ -118,8 +118,8 @@ "clean-webpack-plugin": "2.0.2", "compression-webpack-plugin": "9.2.0", "css-hot-loader": "1.4.4", - "css-loader": "6.8.1", - "css-minimizer-webpack-plugin": "3.4.1", + "css-loader": "7.1.2", + "css-minimizer-webpack-plugin": "7.0.0", "enzyme": "3.11.0", "enzyme-to-json": "3.4.2", "eslint": "7.32.0", @@ -140,19 +140,19 @@ "jest-environment-jsdom": "29.7.0", "jest-junit": "9.0.0", "lint-staged": "9.4.2", - "mini-css-extract-plugin": "2.5.2", - "node-sass": "9.0.0", - "postcss": "^8.4.5", - "postcss-loader": "7.3.3", + "mini-css-extract-plugin": "2.9.1", + "postcss": "8.4.47", + "postcss-loader": "8.1.1", "prettier": "1.19.1", "raw-loader": "4.0.2", "react-intl-translations-manager": "5.0.3", "react-refresh": "0.14.0", "regenerator-runtime": "0.13.3", - "sass-loader": "13.3.3", - "sass-resources-loader": "2.2.4", + "sass": "1.80.1", + "sass-loader": "16.0.2", + "sass-resources-loader": "2.2.5", "slnodejs": "6.1.533", - "style-loader": "3.3.1", + "style-loader": "3.3.4", "stylelint": "13.13.1", "stylelint-config-recommended-scss": "4.3.0", "stylelint-declaration-use-variable": "^1.7.3", diff --git a/app/src/common/constants/localization.js b/app/src/common/constants/localization.js index 75d344d9cf..0fa1c52c43 100644 --- a/app/src/common/constants/localization.js +++ b/app/src/common/constants/localization.js @@ -291,6 +291,10 @@ export const COMMON_LOCALE_KEYS = defineMessages({ id: 'Common.value', defaultMessage: 'Value', }, + ASSIGN: { + id: 'Common.assign', + defaultMessage: 'Assign', + }, }); export const months = [ diff --git a/app/src/common/urls.js b/app/src/common/urls.js index 6d277a057c..40eb9817ea 100644 --- a/app/src/common/urls.js +++ b/app/src/common/urls.js @@ -311,4 +311,5 @@ export const URLS = { clusterByLaunchId: (activeProject, launchId, query) => `${urlBase}${activeProject}/launch/cluster/${launchId}${getQueryParams(query)}`, onboarding: (page = 'GENERAL') => `${urlBase}onboarding?page=${page}`, + instanceSettings: () => `${urlBase}settings`, }; diff --git a/app/src/common/utils/fieldTransformer.js b/app/src/common/utils/fieldTransformer.js new file mode 100644 index 0000000000..71544612c9 --- /dev/null +++ b/app/src/common/utils/fieldTransformer.js @@ -0,0 +1,35 @@ +export function combineNameAndEmailToFrom(inputObj) { + const obj = { ...inputObj }; + if (obj.fromName && obj.fromEmail) { + obj.from = `${obj.fromName} <${obj.fromEmail}>`; + delete obj.fromName; + delete obj.fromEmail; + } else { + obj.from = obj.fromName || obj.fromEmail; + delete obj.fromName; + delete obj.fromEmail; + } + return obj; +} + +export function separateFromIntoNameAndEmail(inputObj) { + const obj = { ...inputObj }; + if (obj.from) { + const match = obj.from.match(/^(.*) <(.*)>$/); + if (match) { + obj.fromName = match[1]; + obj.fromEmail = match[2]; + } else if (obj.from.includes('@')) { + obj.fromName = ''; + obj.fromEmail = obj.from; + } else { + obj.fromName = obj.from; + obj.fromEmail = ''; + } + delete obj.from; + } else { + obj.fromName = ''; + obj.fromEmail = ''; + } + return obj; +} diff --git a/app/src/common/utils/fieldTransformer.test.js b/app/src/common/utils/fieldTransformer.test.js new file mode 100644 index 0000000000..6bd9d9a7f5 --- /dev/null +++ b/app/src/common/utils/fieldTransformer.test.js @@ -0,0 +1,73 @@ +import { separateFromIntoNameAndEmail, combineNameAndEmailToFrom } from './fieldTransformer'; + +describe('separateFromIntoNameAndEmail', () => { + it('should split "from" into "fromName" and "fromEmail" when valid format is provided', () => { + const input = { from: 'John Doe <john.doe@example.com>' }; + const result = separateFromIntoNameAndEmail(input); + expect(result).toEqual({ + fromName: 'John Doe', + fromEmail: 'john.doe@example.com', + }); + }); + + it('should set "fromName" and empty "fromEmail" when "from" does not include <email>', () => { + const input = { from: 'John Doe' }; + const result = separateFromIntoNameAndEmail(input); + expect(result).toEqual({ + fromName: 'John Doe', + fromEmail: '', + }); + }); + + it('should set "fromName" and "fromEmail" to empty strings when "from" is not provided', () => { + const input = {}; + const result = separateFromIntoNameAndEmail(input); + expect(result).toEqual({ + fromName: '', + fromEmail: '', + }); + }); + + it('should leave unrelated fields in the object unchanged', () => { + const input = { from: 'John Doe <john.doe@example.com>', otherField: 'value' }; + const result = separateFromIntoNameAndEmail(input); + expect(result).toEqual({ + fromName: 'John Doe', + fromEmail: 'john.doe@example.com', + otherField: 'value', + }); + }); +}); + +describe('combineNameAndEmailToFrom', () => { + it('should combine "fromName" and "fromEmail" into "from"', () => { + const input = { fromName: 'John Doe', fromEmail: 'john.doe@example.com' }; + const result = combineNameAndEmailToFrom(input); + expect(result).toEqual({ + from: 'John Doe <john.doe@example.com>', + }); + }); + + it('should leave unrelated fields in the object unchanged', () => { + const input = { fromName: 'John Doe', fromEmail: 'john.doe@example.com', otherField: 'value' }; + const result = combineNameAndEmailToFrom(input); + expect(result).toEqual({ + from: 'John Doe <john.doe@example.com>', + otherField: 'value', + }); + }); + + it('should set "from" to "fromName" or "fromEmail" if only one is provided', () => { + const input1 = { fromName: 'John Doe' }; + const input2 = { fromEmail: 'john.doe@example.com' }; + const input3 = {}; + + const result1 = combineNameAndEmailToFrom(input1); + const result2 = combineNameAndEmailToFrom(input2); + const result3 = combineNameAndEmailToFrom(input3); + + expect(result1).toEqual({ from: 'John Doe' }); + expect(result2).toEqual({ from: 'john.doe@example.com' }); + expect(result3).toEqual({}); + }); +}); diff --git a/app/src/common/utils/index.js b/app/src/common/utils/index.js index 1034e83098..eae2ebb044 100644 --- a/app/src/common/utils/index.js +++ b/app/src/common/utils/index.js @@ -57,3 +57,4 @@ export { createNamespacedActionPredicate } from './createNamespacedActionPredica export { omit } from './omit'; export { calculateFontColor } from './calculateFontColor'; export { createExternalLink } from './createExternalLink'; +export { combineNameAndEmailToFrom, separateFromIntoNameAndEmail } from './fieldTransformer'; diff --git a/app/src/common/utils/validation/validate.js b/app/src/common/utils/validation/validate.js index 02d8086714..0fd5d4ea90 100644 --- a/app/src/common/utils/validation/validate.js +++ b/app/src/common/utils/validation/validate.js @@ -117,7 +117,7 @@ export const createNotificationRecipientsValidator = (informOwner) => (value = [ if (informOwner && !value.length) { return true; } - const checkIsStringWithEmailParts = regex(/[.@]/); + const checkIsStringWithEmailParts = regex(/@/); if (value.some(checkIsStringWithEmailParts)) { return value.filter(checkIsStringWithEmailParts).every(email); } diff --git a/app/src/componentLibrary/tooltip/withTooltip.scss b/app/src/componentLibrary/tooltip/withTooltip.scss index a11a78d620..d195ff69fb 100644 --- a/app/src/componentLibrary/tooltip/withTooltip.scss +++ b/app/src/componentLibrary/tooltip/withTooltip.scss @@ -84,7 +84,7 @@ $triangle-color: rgba($COLOR--almost-black, 0.75); &::before, &::after { - border-width: 0 $ARROW_WIDTH/2 $ARROW_HEIGHT; + border-width: 0 $ARROW_WIDTH*0.5 $ARROW_HEIGHT; } &::before { @@ -104,7 +104,7 @@ $triangle-color: rgba($COLOR--almost-black, 0.75); &::before, &::after { - border-width: $ARROW_HEIGHT $ARROW_WIDTH/2 0; + border-width: $ARROW_HEIGHT $ARROW_WIDTH*0.5 0; } &::before { @@ -124,7 +124,7 @@ $triangle-color: rgba($COLOR--almost-black, 0.75); &::before, &::after { - border-width: $ARROW_WIDTH/2 0 $ARROW_WIDTH/2 $ARROW_HEIGHT; + border-width: $ARROW_WIDTH*0.5 0 $ARROW_WIDTH*0.5 $ARROW_HEIGHT; } &::before { @@ -145,7 +145,7 @@ $triangle-color: rgba($COLOR--almost-black, 0.75); &::before, &::after { - border-width: $ARROW_WIDTH/2 $ARROW_HEIGHT $ARROW_WIDTH/2 0; + border-width: $ARROW_WIDTH*0.5 $ARROW_HEIGHT $ARROW_WIDTH*0.5 0; } &::before { diff --git a/app/src/components/buttons/bigButton/bigButton.scss b/app/src/components/buttons/bigButton/bigButton.scss index e7ea07da4e..be88fe3036 100644 --- a/app/src/components/buttons/bigButton/bigButton.scss +++ b/app/src/components/buttons/bigButton/bigButton.scss @@ -1,3 +1,4 @@ +@use "sass:color"; /*! * Copyright 2019 EPAM Systems * @@ -45,12 +46,12 @@ border-color: $COLOR--booger; &:hover:not(.disabled) { - background-color: darken($COLOR--booger, 15%); - border-color: darken($COLOR--booger, 15%); + background-color: color.adjust($COLOR--booger, $lightness: -15%); + border-color: color.adjust($COLOR--booger, $lightness: -15%); } &:active:not(.disabled) { - background-color: darken($COLOR--booger, 30%); - border-color: darken($COLOR--booger, 30%); + background-color: color.adjust($COLOR--booger, $lightness: -30%); + border-color: color.adjust($COLOR--booger, $lightness: -30%); } } &.color-organish { @@ -58,12 +59,12 @@ border-color: $COLOR--organish; &:hover:not(.disabled) { - background-color: darken($COLOR--organish, 15%); - border-color: darken($COLOR--organish, 15%); + background-color: color.adjust($COLOR--organish, $lightness: -15%); + border-color: color.adjust($COLOR--organish, $lightness: -15%); } &:active:not(.disabled) { - background-color: darken($COLOR--organish, 30%); - border-color: darken($COLOR--organish, 30%); + background-color: color.adjust($COLOR--organish, $lightness: -30%); + border-color: color.adjust($COLOR--organish, $lightness: -30%); } } &.color-gray-60 { @@ -71,12 +72,12 @@ border-color: $COLOR--gray-60; &:hover:not(.disabled) { - background-color: darken($COLOR--gray-60, 15%); - border-color: darken($COLOR--gray-60, 15%); + background-color: color.adjust($COLOR--gray-60, $lightness: -15%); + border-color: color.adjust($COLOR--gray-60, $lightness: -15%); } &:active:not(.disabled) { - background-color: darken($COLOR--gray-60, 30%); - border-color: darken($COLOR--gray-60, 30%); + background-color: color.adjust($COLOR--gray-60, $lightness: -30%); + border-color: color.adjust($COLOR--gray-60, $lightness: -30%); } } &.color-tomato { @@ -84,12 +85,12 @@ border-color: $COLOR--tomato; &:hover:not(.disabled) { - background-color: darken($COLOR--tomato, 15%); - border-color: darken($COLOR--tomato, 15%); + background-color: color.adjust($COLOR--tomato, $lightness: -15%); + border-color: color.adjust($COLOR--tomato, $lightness: -15%); } &:active:not(.disabled) { - background-color: darken($COLOR--tomato, 30%); - border-color: darken($COLOR--tomato, 30%); + background-color: color.adjust($COLOR--tomato, $lightness: -30%); + border-color: color.adjust($COLOR--tomato, $lightness: -30%); } } &.color-white-two { @@ -110,12 +111,12 @@ border-color: $COLOR--topaz; &:hover:not(.disabled) { - background-color: darken($COLOR--topaz, 15%); - border-color: darken($COLOR--topaz, 15%); + background-color: color.adjust($COLOR--topaz, $lightness: -15%); + border-color: color.adjust($COLOR--topaz, $lightness: -15%); } &:active:not(.disabled) { - background-color: darken($COLOR--topaz, 30%); - border-color: darken($COLOR--topaz, 30%); + background-color: color.adjust($COLOR--topaz, $lightness: -30%); + border-color: color.adjust($COLOR--topaz, $lightness: -30%); } } } diff --git a/app/src/components/buttons/ghostButton/ghostButton.scss b/app/src/components/buttons/ghostButton/ghostButton.scss index 56e89f1fe7..fde3072ba9 100644 --- a/app/src/components/buttons/ghostButton/ghostButton.scss +++ b/app/src/components/buttons/ghostButton/ghostButton.scss @@ -1,3 +1,4 @@ +@use "sass:color"; /*! * Copyright 2019 EPAM Systems * @@ -64,7 +65,7 @@ } } - &.color-white { + &.color-white:not(.disabled) { background-color: $COLOR--topaz; border-color: $COLOR--topaz; color: $COLOR--white-two; @@ -160,8 +161,8 @@ } &:hover { - background-color: lighten($COLOR--topaz, 10%); - border-color: lighten($COLOR--topaz, 10%); + background-color: color.adjust($COLOR--topaz, $lightness: 10%); + border-color: color.adjust($COLOR--topaz, $lightness: 10%); color: $COLOR--white-two; } diff --git a/app/src/components/buttons/ghostMenuButton/ghostMenuButton.scss b/app/src/components/buttons/ghostMenuButton/ghostMenuButton.scss index ee59fdae3d..547f67abe1 100644 --- a/app/src/components/buttons/ghostMenuButton/ghostMenuButton.scss +++ b/app/src/components/buttons/ghostMenuButton/ghostMenuButton.scss @@ -1,3 +1,4 @@ +@use "sass:color"; /*! * Copyright 2019 EPAM Systems * @@ -60,8 +61,8 @@ } &:hover { - background-color: lighten($COLOR--topaz, 10%); - border-color: lighten($COLOR--topaz, 10%); + background-color: color.adjust($COLOR--topaz, $lightness: 10%); + border-color: color.adjust($COLOR--topaz, $lightness: 10%); color: $COLOR--white-two; .hamburger-icon-part { diff --git a/app/src/components/inputs/inputUserSearch/inputUserSearch.jsx b/app/src/components/inputs/inputUserSearch/inputUserSearch.jsx index b8fe827620..d7095786ea 100644 --- a/app/src/components/inputs/inputUserSearch/inputUserSearch.jsx +++ b/app/src/components/inputs/inputUserSearch/inputUserSearch.jsx @@ -65,6 +65,7 @@ export const InputUserSearch = ({ error, touched, placeholder, + creatable, }) => ( <AsyncAutocomplete getURI={getURI(isAdmin, projectId)} @@ -79,7 +80,7 @@ export const InputUserSearch = ({ renderOption={renderOption} placeholder={placeholder} isOptionUnique={isOptionUnique} - creatable + creatable={creatable} showDynamicSearchPrompt /> ); @@ -92,7 +93,9 @@ InputUserSearch.propTypes = { value: PropTypes.object, error: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), touched: PropTypes.bool, + creatable: PropTypes.bool, }; + InputUserSearch.defaultProps = { isAdmin: false, projectId: '', @@ -101,4 +104,5 @@ InputUserSearch.defaultProps = { value: null, error: false, touched: false, + creatable: true, }; diff --git a/app/src/components/integrations/containers/integrationInfoContainer/instancesSection/instancesSection.jsx b/app/src/components/integrations/containers/integrationInfoContainer/instancesSection/instancesSection.jsx index becc0a33f1..1a99f639f9 100644 --- a/app/src/components/integrations/containers/integrationInfoContainer/instancesSection/instancesSection.jsx +++ b/app/src/components/integrations/containers/integrationInfoContainer/instancesSection/instancesSection.jsx @@ -42,7 +42,8 @@ import { isPluginBuiltin, } from 'components/integrations/utils'; import { PLUGIN_NAME_TITLES } from 'components/integrations/constants'; -import { LDAP } from 'common/constants/pluginNames'; +import { EMAIL, LDAP } from 'common/constants/pluginNames'; +import { combineNameAndEmailToFrom } from 'common/utils'; import { InstancesList } from './instancesList'; import styles from './instancesSection.scss'; @@ -192,10 +193,11 @@ export class InstancesSection extends Component { createIntegration = (formData, metaData) => { const { isGlobal, instanceType } = this.props; + const updatedFormData = instanceType === EMAIL ? combineNameAndEmailToFrom(formData) : formData; const data = { enabled: true, - integrationParameters: formData, - name: formData.integrationName || PLUGIN_NAME_TITLES[instanceType], + integrationParameters: updatedFormData, + name: updatedFormData.integrationName || PLUGIN_NAME_TITLES[instanceType], }; this.props.addIntegrationAction( diff --git a/app/src/components/integrations/containers/integrationSettingsContainer/integrationSettingsContainer.jsx b/app/src/components/integrations/containers/integrationSettingsContainer/integrationSettingsContainer.jsx index 813a5e2390..660c354458 100644 --- a/app/src/components/integrations/containers/integrationSettingsContainer/integrationSettingsContainer.jsx +++ b/app/src/components/integrations/containers/integrationSettingsContainer/integrationSettingsContainer.jsx @@ -22,6 +22,8 @@ import { updateIntegrationAction } from 'controllers/plugins'; import { uiExtensionIntegrationSettingsSelector } from 'controllers/plugins/uiExtensions/selectors'; import { INTEGRATIONS_SETTINGS_COMPONENTS_MAP } from 'components/integrations/settingsComponentsMap'; import { ExtensionLoader, extensionType } from 'components/extensionLoader'; +import { EMAIL } from 'common/constants/pluginNames'; +import { combineNameAndEmailToFrom } from 'common/utils'; import styles from './integrationSettingsContainer.scss'; const cx = classNames.bind(styles); @@ -61,13 +63,14 @@ export class IntegrationSettingsContainer extends Component { }, isGlobal, } = this.props; + const updatedFormData = pluginName === EMAIL ? combineNameAndEmailToFrom(formData) : formData; const data = { enabled: true, - integrationParameters: formData, + integrationParameters: updatedFormData, }; - if (formData.integrationName) { - data.name = formData.integrationName; + if (updatedFormData.integrationName) { + data.name = updatedFormData.integrationName; } this.props.updateIntegrationAction( diff --git a/app/src/components/integrations/integrationProviders/emailIntegration/constants.js b/app/src/components/integrations/integrationProviders/emailIntegration/constants.js index b3198eaa16..c233e51d7d 100644 --- a/app/src/components/integrations/integrationProviders/emailIntegration/constants.js +++ b/app/src/components/integrations/integrationProviders/emailIntegration/constants.js @@ -18,7 +18,8 @@ export const AUTH_ENABLED_KEY = 'authEnabled'; export const PROTOCOL_KEY = 'protocol'; export const SSL_KEY = 'sslEnabled'; export const TLS_KEY = 'starTlsEnabled'; -export const FROM_KEY = 'from'; +export const FROM_NAME_KEY = 'fromName'; +export const FROM_EMAIL_KEY = 'fromEmail'; export const HOST_KEY = 'host'; export const PORT_KEY = 'port'; export const USERNAME_KEY = 'username'; diff --git a/app/src/components/integrations/integrationProviders/emailIntegration/emailFormFields/emailFormFields.jsx b/app/src/components/integrations/integrationProviders/emailIntegration/emailFormFields/emailFormFields.jsx index efa1c22c95..8976d81e8c 100644 --- a/app/src/components/integrations/integrationProviders/emailIntegration/emailFormFields/emailFormFields.jsx +++ b/app/src/components/integrations/integrationProviders/emailIntegration/emailFormFields/emailFormFields.jsx @@ -33,17 +33,19 @@ import { INTEGRATION_FORM } from 'components/integrations/elements'; import { FieldElement } from 'pages/inside/projectSettingsPageContainer/content/elements'; import { FieldText } from 'componentLibrary/fieldText'; import { Dropdown } from 'componentLibrary/dropdown'; +import { separateFromIntoNameAndEmail } from 'common/utils'; import { DEFAULT_FORM_CONFIG, AUTH_ENABLED_KEY, PROTOCOL_KEY, SSL_KEY, TLS_KEY, - FROM_KEY, + FROM_NAME_KEY, HOST_KEY, PORT_KEY, USERNAME_KEY, PASSWORD_KEY, + FROM_EMAIL_KEY, } from '../constants'; import styles from './emailFormFields.scss'; @@ -58,9 +60,13 @@ const messages = defineMessages({ id: 'EmailFormFields.protocolLabel', defaultMessage: 'Protocol', }, - fromLabel: { - id: 'EmailFormFields.fromLabel', - defaultMessage: 'Default sender name', + fromNameLabel: { + id: 'EmailFormFields.fromNameLabel', + defaultMessage: 'From name', + }, + fromEmailLabel: { + id: 'EmailFormFields.fromEmailLabel', + defaultMessage: 'From Email', }, portLabel: { id: 'EmailFormFields.portLabel', @@ -72,7 +78,7 @@ const messages = defineMessages({ }, usernameLabel: { id: 'EmailFormFields.usernameLabel', - defaultMessage: 'Sender email', + defaultMessage: 'Username', }, passwordLabel: { id: 'EmailFormFields.passwordLabel', @@ -115,7 +121,9 @@ export class EmailFormFields extends Component { } componentDidMount() { - this.props.initialize(this.props.initialData); + const { initialData } = this.props; + const preparedData = separateFromIntoNameAndEmail(initialData); + this.props.initialize(preparedData); } onChangeAuthAvailability = (event, value) => { @@ -160,8 +168,8 @@ export class EmailFormFields extends Component { </FieldErrorHint> </FieldElement> <FieldElement - name={FROM_KEY} - label={formatMessage(messages.fromLabel)} + name={FROM_NAME_KEY} + label={formatMessage(messages.fromNameLabel)} disabled={disabled} className={cx('fields')} > @@ -170,13 +178,11 @@ export class EmailFormFields extends Component { </FieldErrorHint> </FieldElement> <FieldElement - name={PORT_KEY} - label={formatMessage(messages.portLabel)} - validate={portValidator} + name={FROM_EMAIL_KEY} + label={formatMessage(messages.fromEmailLabel)} disabled={disabled} - format={this.formatPortValue} - normalize={this.normalizeValue} className={cx('fields')} + validate={commonValidators.email} isRequired > <FieldErrorHint provideHint={false}> @@ -184,10 +190,12 @@ export class EmailFormFields extends Component { </FieldErrorHint> </FieldElement> <FieldElement - name={USERNAME_KEY} - label={formatMessage(messages.usernameLabel)} - validate={commonValidators.email} + name={PORT_KEY} + label={formatMessage(messages.portLabel)} + validate={portValidator} disabled={disabled} + format={this.formatPortValue} + normalize={this.normalizeValue} className={cx('fields')} isRequired > @@ -207,17 +215,31 @@ export class EmailFormFields extends Component { </FieldErrorHint> </FieldElement> {authEnabled && ( - <FieldElement - name={PASSWORD_KEY} - label={formatMessage(messages.passwordLabel)} - disabled={disabled} - className={cx('fields')} - isRequired - > - <FieldErrorHint provideHint={false}> - <FieldText defaultWidth={false} type="password" /> - </FieldErrorHint> - </FieldElement> + <> + <FieldElement + name={USERNAME_KEY} + label={formatMessage(messages.usernameLabel)} + disabled={disabled} + className={cx('fields')} + validate={commonValidators.requiredField} + isRequired + > + <FieldErrorHint provideHint={false}> + <FieldText defaultWidth={false} /> + </FieldErrorHint> + </FieldElement> + <FieldElement + name={PASSWORD_KEY} + label={formatMessage(messages.passwordLabel)} + disabled={disabled} + className={cx('fields')} + isRequired + > + <FieldErrorHint provideHint={false}> + <FieldText defaultWidth={false} type="password" /> + </FieldErrorHint> + </FieldElement> + </> )} <div className={cx('checkboxes-container')}> <div className={cx('checkbox-wrapper')}> diff --git a/app/src/components/main/analytics/events/adminServerSettingsPageEvents.js b/app/src/components/main/analytics/events/adminServerSettingsPageEvents.js index 5fdca71142..c290f7527b 100644 --- a/app/src/components/main/analytics/events/adminServerSettingsPageEvents.js +++ b/app/src/components/main/analytics/events/adminServerSettingsPageEvents.js @@ -29,15 +29,21 @@ export const submitAnalyticsBtn = (status) => ({ }); export const ADMIN_SERVER_SETTINGS_PAGE_EVENTS = { + toggleSsoUsers: (switcherValue) => ({ + ...basicClickEventParametersAdminServerSettingsPage, + element_name: 'sso', + switcher: switcherValue ? 'on' : 'off', + }), + ANALYTICS_TAB: { + ...basicClickEventParametersAdminServerSettingsPage, + element_name: 'analytics', + }, + // GA3 events AUTHORIZATION_CONFIGURATION_TAB: { category: ADMIN_SERVER_SETTINGS_PAGE, action: 'Click on tab Authorization Configuration', label: 'Open tab Authorization Configuration', }, - ANALYTICS_TAB: { - ...basicClickEventParametersAdminServerSettingsPage, - element_name: 'analytics', - }, ACTIVATE_GITHUB_SWITCHER: { category: ADMIN_SERVER_SETTINGS_PAGE, action: 'Click on switcher Activate Github authorization on tab Authorization Configuration', diff --git a/app/src/components/main/grid/gridHeader/headerCell/headerCell.jsx b/app/src/components/main/grid/gridHeader/headerCell/headerCell.jsx index cc5afcd644..cf34d82f46 100644 --- a/app/src/components/main/grid/gridHeader/headerCell/headerCell.jsx +++ b/app/src/components/main/grid/gridHeader/headerCell/headerCell.jsx @@ -82,7 +82,10 @@ export const HeaderCell = track()( className={cx('header-cell', computedClassName)} style={customProps.rawHeaderCellStylesConfig} > - <div className={cx('title-container')} onClick={sortable ? sortingClickHandler : null}> + <div + className={cx('title-container', customProps.titleClassName)} + onClick={sortable ? sortingClickHandler : null} + > <div className={cx('filter')} onClick={filterClickHandler}> {Parser(FilterIcon)} </div> diff --git a/app/src/components/main/notification/notificationList/notificationListItem/notificationItem.scss b/app/src/components/main/notification/notificationList/notificationListItem/notificationItem.scss index 9c50ceef4d..8a524c3766 100644 --- a/app/src/components/main/notification/notificationList/notificationListItem/notificationItem.scss +++ b/app/src/components/main/notification/notificationList/notificationListItem/notificationItem.scss @@ -1,3 +1,4 @@ +@use "sass:color"; /*! * Copyright 2019 EPAM Systems * @@ -23,14 +24,14 @@ color: $COLOR--white; padding: 10px; background: $COLOR--topaz; - text-shadow: 0 1px 1px darken($COLOR--topaz, 10%); + text-shadow: 0 1px 1px color.adjust($COLOR--topaz, $lightness: -10%); &.success { background: $COLOR--dark-pastel-green; - text-shadow: 0 1px 1px darken($COLOR--dark-pastel-green, 10%); + text-shadow: 0 1px 1px color.adjust($COLOR--dark-pastel-green, $lightness: -10%); } &.error { background: $COLOR--tomato; - text-shadow: 0 1px 1px darken($COLOR--tomato, 10%); + text-shadow: 0 1px 1px color.adjust($COLOR--tomato, $lightness: -10%); } &.opacity-enter-active { opacity: 1; diff --git a/app/src/components/main/scrollWrapper/scrollWrapper.scss b/app/src/components/main/scrollWrapper/scrollWrapper.scss index c484b8cc56..4d209f61d7 100644 --- a/app/src/components/main/scrollWrapper/scrollWrapper.scss +++ b/app/src/components/main/scrollWrapper/scrollWrapper.scss @@ -1,3 +1,4 @@ +@use "sass:color"; /*! * Copyright 2019 EPAM Systems * @@ -102,7 +103,7 @@ .back-to-top-button { border: none; - color: darken($COLOR--gray-91, 25%); + color: color.adjust($COLOR--gray-91, $lightness: -25%); cursor: pointer; outline: none; background: none; diff --git a/app/src/components/main/tooltips/tooltip/tooltip.scss b/app/src/components/main/tooltips/tooltip/tooltip.scss index 96ca1c4ca9..d4d14bb9bf 100644 --- a/app/src/components/main/tooltips/tooltip/tooltip.scss +++ b/app/src/components/main/tooltips/tooltip/tooltip.scss @@ -91,7 +91,7 @@ $ARROW_WIDTH: 16px; &::before, &::after { - border-width: 0 $ARROW_WIDTH/2 $ARROW_HEIGHT; + border-width: 0 $ARROW_WIDTH*0.5 $ARROW_HEIGHT; } &::before { @@ -111,7 +111,7 @@ $ARROW_WIDTH: 16px; &::before, &::after { - border-width: $ARROW_HEIGHT $ARROW_WIDTH/2 0; + border-width: $ARROW_HEIGHT $ARROW_WIDTH*0.5 0; } &::before { @@ -131,7 +131,7 @@ $ARROW_WIDTH: 16px; &::before, &::after { - border-width: $ARROW_WIDTH/2 0 $ARROW_WIDTH/2 $ARROW_HEIGHT; + border-width: $ARROW_WIDTH*0.5 0 $ARROW_WIDTH*0.5 $ARROW_HEIGHT; } &::before { @@ -152,7 +152,7 @@ $ARROW_WIDTH: 16px; &::before, &::after { - border-width: $ARROW_WIDTH/2 $ARROW_HEIGHT $ARROW_WIDTH/2 0; + border-width: $ARROW_WIDTH*0.5 $ARROW_HEIGHT $ARROW_WIDTH*0.5 0; } &::before { diff --git a/app/src/components/widgets/singleLevelWidgets/charts/investigatedTrendChart/config/launchModeConfig.js b/app/src/components/widgets/singleLevelWidgets/charts/investigatedTrendChart/config/launchModeConfig.js index 126d975501..0525eb05ab 100644 --- a/app/src/components/widgets/singleLevelWidgets/charts/investigatedTrendChart/config/launchModeConfig.js +++ b/app/src/components/widgets/singleLevelWidgets/charts/investigatedTrendChart/config/launchModeConfig.js @@ -33,8 +33,11 @@ export const getLaunchModeConfig = ({ }) => { const colors = {}; const columns = []; - - const sortedResult = content.sort((item) => -item.number); + const sortedResult = content.sort((a, b) => { + const startTimeA = new Date(a.startTime); + const startTimeB = new Date(b.startTime); + return startTimeA - startTimeB; + }); const itemsData = sortedResult.map((item) => ({ id: item.id, name: item.name, diff --git a/app/src/components/widgets/singleLevelWidgets/charts/launchStatisticsChart/config/utils.js b/app/src/components/widgets/singleLevelWidgets/charts/launchStatisticsChart/config/utils.js index 3ad998c5cd..0914ac570d 100644 --- a/app/src/components/widgets/singleLevelWidgets/charts/launchStatisticsChart/config/utils.js +++ b/app/src/components/widgets/singleLevelWidgets/charts/launchStatisticsChart/config/utils.js @@ -39,7 +39,11 @@ export const getConfigData = ( }); widgetData - .sort((a, b) => a.startTime - b.startTime) + .sort((a, b) => { + const startTimeA = new Date(a.startTime); + const startTimeB = new Date(b.startTime); + return startTimeA - startTimeB; + }) .forEach((item) => { const currentItemData = { ...item, diff --git a/app/src/controllers/appInfo/constants.js b/app/src/controllers/appInfo/constants.js index cbd0668eda..8f77bdbc71 100644 --- a/app/src/controllers/appInfo/constants.js +++ b/app/src/controllers/appInfo/constants.js @@ -17,6 +17,7 @@ export const APP_INFO_NAMESPACE = 'appInfo'; export const ANALYTICS_INSTANCE_KEY = 'server.details.instance'; export const ANALYTICS_ALL_KEY = 'server.analytics.all'; +export const SSO_USERS_ONLY_KEY = 'server.users.sso'; export const OLD_HISTORY_KEY = 'history_old'; export const GA_MEASUREMENT_ID = 'ga_measurement_id'; export const INSTANCE_TYPE = 'instance_type'; diff --git a/app/src/controllers/appInfo/index.js b/app/src/controllers/appInfo/index.js index 13b135d71c..76722080b9 100644 --- a/app/src/controllers/appInfo/index.js +++ b/app/src/controllers/appInfo/index.js @@ -29,5 +29,6 @@ export { isDemoInstanceSelector, areUserSuggestionsAllowedSelector, baseEventParametersSelector, + ssoUsersOnlySelector, } from './selectors'; export { ANALYTICS_ALL_KEY } from './constants'; diff --git a/app/src/controllers/appInfo/selectors.js b/app/src/controllers/appInfo/selectors.js index e19a3c4ad7..2cce1ff98d 100644 --- a/app/src/controllers/appInfo/selectors.js +++ b/app/src/controllers/appInfo/selectors.js @@ -31,6 +31,7 @@ import { NOT_PROVIDED, ALLOW_DELETE_ACCOUNT, USER_SUGGESTIONS, + SSO_USERS_ONLY_KEY, } from './constants'; export const appInfoSelector = (state) => state.appInfo || {}; @@ -57,6 +58,8 @@ export const analyticsEnabledSelector = (state) => extensionsConfigSelector(state)[ANALYTICS_ALL_KEY] === 'true'; export const analyzerExtensionsSelector = (state) => extensionsSelector(state).analyzers || []; export const authExtensionsSelector = (state) => uatInfoSelector(state).authExtensions || {}; +export const ssoUsersOnlySelector = (state) => + extensionsConfigSelector(state)[SSO_USERS_ONLY_KEY] === 'true'; export const isOldHistorySelector = (state) => environmentSelector(state)[OLD_HISTORY_KEY] === 'true'; export const isDemoInstanceSelector = (state) => !!apiJobsSelector(state).flushingDataTrigger; diff --git a/app/src/controllers/log/constants.js b/app/src/controllers/log/constants.js index beaee77e3c..aa471b9a2f 100644 --- a/app/src/controllers/log/constants.js +++ b/app/src/controllers/log/constants.js @@ -15,7 +15,8 @@ */ import * as logLevels from 'common/constants/logLevels'; -import { formatSortingString, SORTING_ASC } from 'controllers/sorting'; +import { SORTING_ASC } from 'controllers/sorting/constants'; +import { formatSortingString } from 'controllers/sorting/utils'; export const NAMESPACE = 'log'; export const LOG_ITEMS_NAMESPACE = `${NAMESPACE}/logItems`; diff --git a/app/src/controllers/log/sagas.js b/app/src/controllers/log/sagas.js index fa197e7bbe..efa0ab6656 100644 --- a/app/src/controllers/log/sagas.js +++ b/app/src/controllers/log/sagas.js @@ -44,7 +44,7 @@ import { } from 'controllers/log/nestedSteps/actionCreators'; import { createNamespacedQuery } from 'common/utils/routingUtils'; import { FAILED } from 'common/constants/testStatuses'; -import { ERROR, FATAL } from 'common/constants/logLevels'; +import { ERROR } from 'common/constants/logLevels'; import { fetchErrorLogs, clearLogPageStackTrace, @@ -130,9 +130,6 @@ function* fetchAllErrorLogs({ excludeLogContent = true, level, }) { - const logMessages = yield select(logItemsSelector); - const requiresErrorLogLocation = logMessages.some((log) => [ERROR, FATAL].includes(log.level)); - const { id } = logItem; const { activeProject, query, filterLevel } = yield call(collectLogPayload); let retryId = null; @@ -142,7 +139,7 @@ function* fetchAllErrorLogs({ } let cancelRequest = () => {}; try { - if (logViewMode === DETAILED_LOG_VIEW && requiresErrorLogLocation) { + if (logViewMode === DETAILED_LOG_VIEW) { yield put( fetchDataAction(namespace)( URLS.errorLogs(activeProject, retryId || id, level || filterLevel), diff --git a/app/src/controllers/log/storageUtils.js b/app/src/controllers/log/storageUtils.js index 1617425270..e6451001ac 100644 --- a/app/src/controllers/log/storageUtils.js +++ b/app/src/controllers/log/storageUtils.js @@ -14,7 +14,7 @@ * limitations under the License. */ -import { getStorageItem, updateStorageItem } from 'common/utils'; +import { getStorageItem, updateStorageItem } from 'common/utils/storageUtils'; import { MARKDOWN } from 'common/constants/logViewModes'; import { LOG_TIME_FORMAT_ABSOLUTE } from 'controllers/user/constants'; import { diff --git a/app/src/index.tpl.html b/app/src/index.tpl.html index 162d49cd86..cb0c019f6c 100644 --- a/app/src/index.tpl.html +++ b/app/src/index.tpl.html @@ -1,11 +1,28 @@ -<!doctype html> +<!DOCTYPE html> <html> <head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <meta charset="utf-8"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta charset="utf-8" /> <title>Report Portal</title> - <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"> - <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta + name="viewport" + content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" + /> + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + <script type="text/javascript"> + (function(c, l, a, r, i, t, y) { + c[a] = + c[a] || + function() { + (c[a].q = c[a].q || []).push(arguments); + }; + t = l.createElement(r); + t.async = 1; + t.src = 'https://www.clarity.ms/tag/' + i; + y = l.getElementsByTagName(r)[0]; + y.parentNode.insertBefore(t, y); + })(window, document, 'clarity', 'script', 'nxd6ydnqkg'); + </script> </head> <body> <div id="app" style="width: 100%; height: 100%;"></div> diff --git a/app/src/layouts/common/sidebar/supportBlock/supportBlock.scss b/app/src/layouts/common/sidebar/supportBlock/supportBlock.scss index 697c6957fc..d5c0b917e3 100644 --- a/app/src/layouts/common/sidebar/supportBlock/supportBlock.scss +++ b/app/src/layouts/common/sidebar/supportBlock/supportBlock.scss @@ -1,3 +1,4 @@ +@use "sass:color"; /*! * Copyright 2021 EPAM Systems * @@ -113,7 +114,7 @@ text-decoration: none; &:hover { - background-color: darken($COLOR--booger, 15%); + background-color: color.adjust($COLOR--booger, $lightness: -15%); } } diff --git a/app/src/pages/admin/allUsersPage/usersToolbar/actionPanel/actionPanel.jsx b/app/src/pages/admin/allUsersPage/usersToolbar/actionPanel/actionPanel.jsx index d0f80f9e01..49f3e38c55 100644 --- a/app/src/pages/admin/allUsersPage/usersToolbar/actionPanel/actionPanel.jsx +++ b/app/src/pages/admin/allUsersPage/usersToolbar/actionPanel/actionPanel.jsx @@ -27,6 +27,7 @@ import InviteUserIcon from 'common/img/invite-inline.svg'; import AddUserIcon from 'common/img/add-user-inline.svg'; import { URLS } from 'common/urls'; import { showModalAction } from 'controllers/modal'; +import { ssoUsersOnlySelector } from 'controllers/appInfo'; import { showNotification, showDefaultErrorNotification, @@ -65,6 +66,7 @@ const messages = defineMessages({ @connect( (state) => ({ filterEntities: collectFilterEntities(querySelector(state)), + ssoUsersOnly: ssoUsersOnlySelector(state), }), { showModalAction, @@ -86,10 +88,12 @@ export class ActionPanel extends Component { trackEvent: PropTypes.func, getTrackingData: PropTypes.func, }).isRequired, + ssoUsersOnly: PropTypes.bool, }; static defaultProps = { filterEntities: {}, + ssoUsersOnly: false, }; onExportUsers = () => { @@ -139,23 +143,28 @@ export class ActionPanel extends Component { }); }; - actionButtons = [ - { - key: EXPORT, - icon: ExportIcon, - onClick: this.onExportUsers, - }, - { - key: INVITE_USER, - icon: InviteUserIcon, - onClick: this.showInviteUserModal, - }, - { - key: ADD_USER, - icon: AddUserIcon, - onClick: this.showAddUserModal, - }, - ]; + get actionButtons() { + const { ssoUsersOnly } = this.props; + const allButtons = [ + { + key: EXPORT, + icon: ExportIcon, + onClick: this.onExportUsers, + }, + { + key: INVITE_USER, + icon: InviteUserIcon, + onClick: this.showInviteUserModal, + }, + { + key: ADD_USER, + icon: AddUserIcon, + onClick: this.showAddUserModal, + }, + ]; + + return ssoUsersOnly ? [allButtons[0]] : allButtons; + } renderHeaderButtons = () => { const { diff --git a/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/authConfigurationTab.jsx b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/authConfigurationTab.jsx index d19f22b93e..ae0d996bb0 100644 --- a/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/authConfigurationTab.jsx +++ b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/authConfigurationTab.jsx @@ -16,6 +16,7 @@ import classNames from 'classnames/bind'; import { GithubAuthForm } from './forms'; +import { SsoUsersForm } from './forms/ssoUsersForm'; import styles from './authConfigurationTab.scss'; const cx = classNames.bind(styles); @@ -23,5 +24,6 @@ const cx = classNames.bind(styles); export const AuthConfigurationTab = () => ( <div className={cx('auth-configuration-tab')}> <GithubAuthForm /> + <SsoUsersForm /> </div> ); diff --git a/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/githubAuthForm/githubAuthForm.scss b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/githubAuthForm/githubAuthForm.scss index b4cb423e6f..61cbacd31f 100644 --- a/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/githubAuthForm/githubAuthForm.scss +++ b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/githubAuthForm/githubAuthForm.scss @@ -16,5 +16,5 @@ .github-auth-form { position: relative; - margin-bottom: 20px; + margin-bottom: 30px; } diff --git a/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/index.js b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/index.js index 74c592c333..f8cf40deb8 100644 --- a/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/index.js +++ b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/index.js @@ -15,3 +15,4 @@ */ export { GithubAuthForm } from './githubAuthForm'; +export { SsoUsersForm } from './ssoUsersForm'; diff --git a/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/ssoUsersForm/index.js b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/ssoUsersForm/index.js new file mode 100644 index 0000000000..ad04edbd75 --- /dev/null +++ b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/ssoUsersForm/index.js @@ -0,0 +1,17 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { SsoUsersForm } from './ssoUsersForm'; diff --git a/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/ssoUsersForm/ssoUsersForm.jsx b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/ssoUsersForm/ssoUsersForm.jsx new file mode 100644 index 0000000000..44e92353cb --- /dev/null +++ b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/ssoUsersForm/ssoUsersForm.jsx @@ -0,0 +1,130 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React, { useEffect, useState } from 'react'; +import { defineMessages, useIntl } from 'react-intl'; +import classNames from 'classnames/bind'; +import { useSelector, useDispatch } from 'react-redux'; +import { InputBigSwitcher } from 'components/inputs/inputBigSwitcher'; +import { SectionHeader } from 'components/main/sectionHeader'; +import { ADMIN_SERVER_SETTINGS_PAGE_EVENTS } from 'components/main/analytics/events'; +import { ssoUsersOnlySelector, fetchAppInfoAction } from 'controllers/appInfo'; +import { showSuccessNotification, showErrorNotification } from 'controllers/notification'; +import formStyles from 'pages/admin/serverSettingsPage/common/formController/formController.scss'; +import { fetch } from 'common/utils/fetch'; +import { URLS } from 'common/urls'; +import { useTracking } from 'react-tracking'; +import styles from './ssoUsersForm.scss'; + +const formCx = classNames.bind(formStyles); +const cx = classNames.bind(styles); + +const messages = defineMessages({ + switcherLabel: { + id: 'SsoUsersForm.switcherLabel', + defaultMessage: 'SSO users only', + }, + formHeader: { + id: 'SsoUsersForm.formHeader', + defaultMessage: 'Instance Invitations', + }, + ssoOnlyDescription: { + id: 'SsoUsersForm.ssoOnlyDescription', + defaultMessage: 'New users can be created via SSO only.', + }, + manualInvitesDescription: { + id: 'SsoUsersForm.manualInvitesDescription', + defaultMessage: + 'Users can manually send invitations for other users. If enabled new users can be created via SSO only.', + }, + successNotification: { + id: 'SsoUsersForm.successNotification', + defaultMessage: 'SSO settings have been updated successfully', + }, + errorNotification: { + id: 'SsoUsersForm.errorNotification', + defaultMessage: 'Failed to update SSO settings', + }, +}); + +export const SsoUsersForm = () => { + const { formatMessage } = useIntl(); + const dispatch = useDispatch(); + const enabledFromStore = useSelector(ssoUsersOnlySelector); + const [enabled, setEnabled] = useState(enabledFromStore); + const inputId = 'ssoUsersToggle'; + const { trackEvent } = useTracking(); + + useEffect(() => { + dispatch(fetchAppInfoAction()); + }, [dispatch]); + + useEffect(() => { + setEnabled(enabledFromStore); + }, [enabledFromStore]); + + const getDescription = () => + formatMessage(enabled ? messages.ssoOnlyDescription : messages.manualInvitesDescription); + + const handleToggle = async (value) => { + setEnabled(value); + trackEvent(ADMIN_SERVER_SETTINGS_PAGE_EVENTS.toggleSsoUsers(value)); + + try { + await fetch(URLS.instanceSettings(), { + method: 'PUT', + data: { + key: 'server.users.sso', + value: value.toString(), + }, + }); + + await dispatch(fetchAppInfoAction()); + dispatch(showSuccessNotification({ message: formatMessage(messages.successNotification) })); + } catch (error) { + setEnabled(!value); + dispatch(showErrorNotification({ message: formatMessage(messages.errorNotification) })); + } + }; + + return ( + <div className={formCx('form-controller')}> + <div className={formCx('heading-wrapper')}> + <SectionHeader text={formatMessage(messages.formHeader)} /> + </div> + <div className={formCx('form')}> + <div className={cx('form-group')}> + <label htmlFor={inputId} className={cx('form-group-label')}> + {formatMessage(messages.switcherLabel)} + </label> + <div className={cx('form-group-content')}> + <div className={cx('input-container')}> + <InputBigSwitcher + id={inputId} + value={enabled} + onChange={handleToggle} + mobileDisabled + /> + <div className={cx('description')} aria-live="polite"> + {getDescription()} + </div> + </div> + </div> + </div> + </div> + </div> + ); +}; diff --git a/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/ssoUsersForm/ssoUsersForm.scss b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/ssoUsersForm/ssoUsersForm.scss new file mode 100644 index 0000000000..72a77cfd68 --- /dev/null +++ b/app/src/pages/admin/serverSettingsPage/serverSettingsTabs/authConfigurationTab/forms/ssoUsersForm/ssoUsersForm.scss @@ -0,0 +1,81 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +.form-group { + display: flex; + justify-content: flex-start; + align-items: center; + width: 100%; + margin-bottom: 25px; + + @media (max-width: $SCREEN_XS_MAX) { + flex-direction: column; + align-items: flex-start; + margin-bottom: 15px; + } +} + +.form-group-label { + min-width: 210px; + width: 210px; + padding-right: 4px; + text-align: right; + font-size: 13px; + line-height: 13px; + color: $COLOR--charcoal-grey; + box-sizing: border-box; + + @media (max-width: $SCREEN_SM_MAX) { + min-width: 150px; + width: 150px; + } + @media (max-width: $SCREEN_XS_MAX) { + width: 100%; + margin-bottom: 8px; + padding: 0; + text-align: left; + } +} + +.form-group-content { + flex: 1; + padding: 0 15px; + + @media (max-width: $SCREEN_XS_MAX) { + padding: 0; + width: 100%; + } +} + +.input-container { + display: flex; + align-items: center; + gap: 15px; + min-height: 36px; + + @media (max-width: $SCREEN_XS_MAX) { + flex-direction: column; + align-items: flex-start; + } +} + +.description { + width: 300px; + font-size: 12px; + line-height: 1.5; + color: $COLOR--gray-60; +} \ No newline at end of file diff --git a/app/src/pages/common/membersPage/membersPageToolbar/membersPageToolbar.jsx b/app/src/pages/common/membersPage/membersPageToolbar/membersPageToolbar.jsx index d4e0359ad1..607b3a0141 100644 --- a/app/src/pages/common/membersPage/membersPageToolbar/membersPageToolbar.jsx +++ b/app/src/pages/common/membersPage/membersPageToolbar/membersPageToolbar.jsx @@ -14,6 +14,7 @@ * limitations under the License. */ +import React from 'react'; import PropTypes from 'prop-types'; import track from 'react-tracking'; import classNames from 'classnames/bind'; @@ -22,6 +23,7 @@ import { showModalAction } from 'controllers/modal'; import { injectIntl, defineMessages } from 'react-intl'; import { reduxForm } from 'redux-form'; import { activeProjectRoleSelector, userAccountRoleSelector } from 'controllers/user'; +import { ssoUsersOnlySelector } from 'controllers/appInfo'; import { canInviteInternalUser } from 'common/utils/permissions'; import { GhostButton } from 'components/buttons/ghostButton'; import { FieldProvider } from 'components/fields/fieldProvider'; @@ -44,15 +46,21 @@ const messages = defineMessages({ id: 'MembersPageToolbar.inviteUser', defaultMessage: 'Invite User', }, + assignUser: { + id: 'MembersPageToolbar.assignUser', + defaultMessage: 'Assign User', + }, searchInputPlaceholder: { id: 'MembersPageToolbar.searchByName', defaultMessage: 'Search by name', }, }); + @connect( (state) => ({ projectRole: activeProjectRoleSelector(state), accountRole: userAccountRoleSelector(state), + ssoUsersOnly: ssoUsersOnlySelector(state), }), { showModalAction, @@ -74,6 +82,7 @@ export class MembersPageToolbar extends React.Component { onInvite: PropTypes.func, projectRole: PropTypes.string, accountRole: PropTypes.string, + ssoUsersOnly: PropTypes.bool, tracking: PropTypes.shape({ trackEvent: PropTypes.func, getTrackingData: PropTypes.func, @@ -86,6 +95,7 @@ export class MembersPageToolbar extends React.Component { onInvite: () => {}, projectRole: '', accountRole: '', + ssoUsersOnly: false, onFilterChange: () => {}, }; @@ -105,6 +115,12 @@ export class MembersPageToolbar extends React.Component { this.props.showModalAction({ id: 'permissionMapModal' }); }; + getButtonText = () => { + const { ssoUsersOnly } = this.props; + if (ssoUsersOnly === undefined) return messages.inviteUser; + return ssoUsersOnly ? messages.assignUser : messages.inviteUser; + }; + render() { return ( <div className={cx('members-page-toolbar')}> @@ -127,7 +143,7 @@ export class MembersPageToolbar extends React.Component { onClick={this.showInviteUserModal} disabled={!canInviteInternalUser(this.props.accountRole, this.props.projectRole)} > - {this.props.intl.formatMessage(messages.inviteUser)} + {this.props.intl.formatMessage(this.getButtonText())} </GhostButton> </div> </div> diff --git a/app/src/pages/common/membersPage/modals/inviteUserModal/inviteUserModal.jsx b/app/src/pages/common/membersPage/modals/inviteUserModal/inviteUserModal.jsx index b7e4b13140..af12129b20 100644 --- a/app/src/pages/common/membersPage/modals/inviteUserModal/inviteUserModal.jsx +++ b/app/src/pages/common/membersPage/modals/inviteUserModal/inviteUserModal.jsx @@ -35,7 +35,7 @@ import { FieldProvider } from 'components/fields/fieldProvider'; import { FieldErrorHint } from 'components/fields/fieldErrorHint'; import { Input } from 'components/inputs/input'; import { showModalAction } from 'controllers/modal'; -import { areUserSuggestionsAllowedSelector } from 'controllers/appInfo'; +import { areUserSuggestionsAllowedSelector, ssoUsersOnlySelector } from 'controllers/appInfo'; import { AsyncAutocomplete } from 'components/inputs/autocompletes/asyncAutocomplete'; import { InputDropdown } from 'components/inputs/inputDropdown'; import { MEMBERS_PAGE_EVENTS } from 'components/main/analytics/events'; @@ -50,10 +50,18 @@ const messages = defineMessages({ id: 'InviteUserModal.headerInviteUserModal', defaultMessage: 'Invite user', }, + headerAssignUserModal: { + id: 'InviteUserModal.headerAssignUserModal', + defaultMessage: 'Assign user', + }, description: { id: 'InviteUserModal.description', defaultMessage: 'Invite user to the project', }, + descriptionAssign: { + id: 'InviteUserModal.descriptionAssign', + defaultMessage: 'Assign user to the project', + }, loginOrEmailLabel: { id: 'InviteUserModal.loginOrEmailLabel', defaultMessage: 'Login or email', @@ -92,6 +100,7 @@ const inviteFormSelector = formValueSelector('inviteUserForm'); : projectIdSelector(state), selectedUser: inviteFormSelector(state, 'user'), isAdmin: isAdminSelector(state), + ssoUsersOnly: ssoUsersOnlySelector(state), initialValues: { role: DEFAULT_PROJECT_ROLE, project: projectIdSelector(state), @@ -129,6 +138,7 @@ export class InviteUserModal extends Component { selectedProject: PropTypes.string, selectedUser: PropTypes.object, isAdmin: PropTypes.bool, + ssoUsersOnly: PropTypes.bool, dirty: PropTypes.bool, areUserSuggestionsAllowed: PropTypes.bool.isRequired, }; @@ -139,6 +149,7 @@ export class InviteUserModal extends Component { selectedProject: '', selectedUser: {}, isAdmin: false, + ssoUsersOnly: false, dirty: false, }; @@ -257,6 +268,7 @@ export class InviteUserModal extends Component { closeModal(); } }; + formatUser = (user) => (user && { value: user.userLogin, label: user.userLogin }) || null; filterProject = (value) => !(value && this.props.selectedUser?.assignedProjects?.[value]); @@ -269,28 +281,37 @@ export class InviteUserModal extends Component { isAdmin, data: { isProjectSelector }, areUserSuggestionsAllowed, + ssoUsersOnly, } = this.props; const okButton = { - text: intl.formatMessage(COMMON_LOCALE_KEYS.INVITE), + text: intl.formatMessage( + ssoUsersOnly ? COMMON_LOCALE_KEYS.ASSIGN : COMMON_LOCALE_KEYS.INVITE, + ), onClick: (closeModal) => { handleSubmit(this.inviteUserAndCloseModal(closeModal))(); }, eventInfo: MEMBERS_PAGE_EVENTS.INVITE_BTN_INVITE_USER_MODAL, }; + const cancelButton = { text: intl.formatMessage(COMMON_LOCALE_KEYS.CANCEL), eventInfo: MEMBERS_PAGE_EVENTS.CANCEL_BTN_INVITE_USER_MODAL, }; + return ( <ModalLayout - title={intl.formatMessage(messages.headerInviteUserModal)} + title={intl.formatMessage( + ssoUsersOnly ? messages.headerAssignUserModal : messages.headerInviteUserModal, + )} okButton={okButton} cancelButton={cancelButton} closeIconEventInfo={MEMBERS_PAGE_EVENTS.CLOSE_ICON_INVITE_USER_MODAL} closeConfirmation={this.getCloseConfirmationConfig()} > - <p className={cx('modal-description')}>{intl.formatMessage(messages.description)}</p> + <p className={cx('modal-description')}> + {intl.formatMessage(ssoUsersOnly ? messages.descriptionAssign : messages.description)} + </p> <form className={cx('invite-form')}> {isProjectSelector || areUserSuggestionsAllowed ? ( <ModalField @@ -303,6 +324,7 @@ export class InviteUserModal extends Component { projectId={selectedProject} isAdmin={isAdmin} placeholder={intl.formatMessage(messages.inputPlaceholder)} + creatable={!ssoUsersOnly} /> </FieldErrorHint> </FieldProvider> diff --git a/app/src/pages/inside/common/infoPanel/viewTabs/viewTabs.scss b/app/src/pages/inside/common/infoPanel/viewTabs/viewTabs.scss index 1e158fb821..341a3333ad 100644 --- a/app/src/pages/inside/common/infoPanel/viewTabs/viewTabs.scss +++ b/app/src/pages/inside/common/infoPanel/viewTabs/viewTabs.scss @@ -1,3 +1,4 @@ +@use "sass:color"; /*! * Copyright 2020 EPAM Systems * @@ -49,8 +50,8 @@ color: $COLOR--topaz; svg { - fill: lighten($COLOR--topaz, 10%); - stroke: lighten($COLOR--topaz, 10%); + fill: color.adjust($COLOR--topaz, $lightness: 10%); + stroke: color.adjust($COLOR--topaz, $lightness: 10%); } } @@ -75,11 +76,11 @@ } &:hover { - color: lighten($COLOR--topaz, 10%); + color: color.adjust($COLOR--topaz, $lightness: 10%); svg { - fill: lighten($COLOR--topaz, 10%); - stroke: lighten($COLOR--topaz, 10%); + fill: color.adjust($COLOR--topaz, $lightness: 10%); + stroke: color.adjust($COLOR--topaz, $lightness: 10%); } } } diff --git a/app/src/pages/inside/common/modals/editItemModal/editItemModal.scss b/app/src/pages/inside/common/modals/editItemModal/editItemModal.scss index 14c9a39ff3..6dc53bc624 100644 --- a/app/src/pages/inside/common/modals/editItemModal/editItemModal.scss +++ b/app/src/pages/inside/common/modals/editItemModal/editItemModal.scss @@ -42,11 +42,11 @@ justify-content: flex-start; white-space: pre-line; word-break: break-all; + padding-right: 10px; @supports (word-break: break-word) { word-break: break-word; } - padding-right: 10px; } .copy { @@ -62,6 +62,7 @@ cursor: pointer; vertical-align: middle; stroke: $COLOR--gray-60; + &:hover { stroke: $COLOR--black-2; } diff --git a/app/src/pages/inside/logsPage/historyLine/historyLine.scss b/app/src/pages/inside/logsPage/historyLine/historyLine.scss index c5efa40b49..a7fd9bfaff 100644 --- a/app/src/pages/inside/logsPage/historyLine/historyLine.scss +++ b/app/src/pages/inside/logsPage/historyLine/historyLine.scss @@ -1,3 +1,4 @@ +@use "sass:color"; /*! * Copyright 2019 EPAM Systems * @@ -51,8 +52,8 @@ background-color: $COLOR--white-two; cursor: pointer; &:hover { - background-color: lighten($COLOR--topaz, 10%); - border-color: lighten($COLOR--topaz, 10%); + background-color: color.adjust($COLOR--topaz, $lightness: 10%); + border-color: color.adjust($COLOR--topaz, $lightness: 10%); color: $COLOR--white-two; } } diff --git a/app/src/pages/inside/logsPage/logItemInfo/logItemInfoTabs/logItemDetails/logItemDetails.scss b/app/src/pages/inside/logsPage/logItemInfo/logItemInfoTabs/logItemDetails/logItemDetails.scss index 7d28b4999c..56662a3231 100644 --- a/app/src/pages/inside/logsPage/logItemInfo/logItemInfoTabs/logItemDetails/logItemDetails.scss +++ b/app/src/pages/inside/logsPage/logItemInfo/logItemInfoTabs/logItemDetails/logItemDetails.scss @@ -57,6 +57,7 @@ .info-line { display: flex; justify-content: flex-start; + :first-child { flex: 0 0 100px; } @@ -104,11 +105,11 @@ justify-content: flex-start; white-space: pre-line; word-break: break-all; + padding-right: 10px; @supports (word-break: break-word) { word-break: break-word; } - padding-right: 10px; } .code-ref-label { @@ -130,6 +131,7 @@ cursor: pointer; vertical-align: middle; stroke: $COLOR--gray-60; + &:hover { stroke: $COLOR--black-2; } diff --git a/app/src/pages/inside/logsPage/logsGrid/nestedStepHeader/nestedStepHeader.scss b/app/src/pages/inside/logsPage/logsGrid/nestedStepHeader/nestedStepHeader.scss index f98bac6cd6..079789549f 100644 --- a/app/src/pages/inside/logsPage/logsGrid/nestedStepHeader/nestedStepHeader.scss +++ b/app/src/pages/inside/logsPage/logsGrid/nestedStepHeader/nestedStepHeader.scss @@ -42,14 +42,15 @@ $LEVEL_OFFSET_STEP: 20px; border-left-color: $COLOR--primary-gray; border-left-style: solid; border-left-width: 0; + background-color: $COLOR--white-two; + transition: background-color 0.2s ease 0s; + @media (max-width: $SCREEN_SM_MAX) { display: flex; flex-wrap: wrap; flex-direction: column; @include levels(false); } - background-color: $COLOR--white-two; - transition: background-color 0.2s ease 0s; } .row-cell { diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/integrations/integrationsList/integrationInfo/integrationInfo.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/integrations/integrationsList/integrationInfo/integrationInfo.jsx index 4c6e38fbf9..d6eb941ebe 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/integrations/integrationsList/integrationInfo/integrationInfo.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/integrations/integrationsList/integrationInfo/integrationInfo.jsx @@ -43,6 +43,8 @@ import { INTEGRATIONS_SETTINGS_COMPONENTS_MAP } from 'components/integrations/se import { EmptyStatePage } from 'pages/inside/projectSettingsPageContainer/content/emptyStatePage'; import { PROJECT_SETTINGS_INTEGRATION } from 'analyticsEvents/projectSettingsPageEvents'; import { INTEGRATIONS } from 'common/constants/settingsTabs'; +import { EMAIL } from 'common/constants/pluginNames'; +import { combineNameAndEmailToFrom } from 'common/utils'; import { IntegrationHeader } from './integrationHeader'; import { AvailableIntegrations } from './availableIntegrations'; import { messages } from './messages'; @@ -112,10 +114,11 @@ export const IntegrationInfo = (props) => { }; const addProjectIntegration = (formData, metaData) => { + const updatedFormData = pluginName === EMAIL ? combineNameAndEmailToFrom(formData) : formData; const newData = { enabled: true, - integrationParameters: formData, - name: formData.integrationName || PLUGIN_NAME_TITLES[pluginName], + integrationParameters: updatedFormData, + name: updatedFormData.integrationName || PLUGIN_NAME_TITLES[pluginName], }; trackEvent(PROJECT_SETTINGS_INTEGRATION.CLICK_CREATE_INTEGRATION_MODAL(pluginName)); dispatch(addIntegrationAction(newData, false, pluginName, openIntegration, metaData)); @@ -141,13 +144,14 @@ export const IntegrationInfo = (props) => { trackEvent(PROJECT_SETTINGS_INTEGRATION.CLICK_ADD_PROJECT_INTEGRATION(pluginName)); }; const onUpdate = (formData, onConfirm, metaData) => { + const updatedFormData = pluginName === EMAIL ? combineNameAndEmailToFrom(formData) : formData; const newData = { enabled: true, - integrationParameters: formData, + integrationParameters: updatedFormData, }; - if (formData.integrationName) { - newData.name = formData.integrationName; + if (updatedFormData.integrationName) { + newData.name = updatedFormData.integrationName; } dispatch( diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/modals/addEditNotificationModal/addEditNotificationModal.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/modals/addEditNotificationModal/addEditNotificationModal.jsx index 5b5a0055ee..d5986f67e6 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/modals/addEditNotificationModal/addEditNotificationModal.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/modals/addEditNotificationModal/addEditNotificationModal.jsx @@ -36,6 +36,8 @@ import { RadioGroup } from 'componentLibrary/radioGroup'; import { EMAIL } from 'common/constants/pluginNames'; import { FieldTextFlex } from 'componentLibrary/fieldTextFlex'; import { ruleField } from 'pages/inside/projectSettingsPageContainer/content/notifications/propTypes'; +import { fetchProjectAction } from 'controllers/project/actionCreators'; +import { projectIdSelector } from 'controllers/pages'; import { capitalizeWord } from '../util'; import { RecipientsContainer } from './recipientsContainer'; import { LaunchNamesContainer } from './launchNamesContainer'; @@ -213,12 +215,14 @@ const AddEditNotificationModal = ({ }) => { const { formatMessage } = useIntl(); const dispatch = useDispatch(); + const projectId = useSelector(projectIdSelector); const [isEditorShown, setShowEditor] = React.useState(data.notification.attributes.length > 0); const attributesValue = useSelector((state) => attributesValueSelector(state, ATTRIBUTES_FIELD_KEY)) ?? []; useEffect(() => { initialize(data.notification); + dispatch(fetchProjectAction(projectId, false)); }, []); const caseOptions = [ diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/modals/addEditNotificationModal/recipientsContainer/recipientsContainer.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/modals/addEditNotificationModal/recipientsContainer/recipientsContainer.jsx index 804afb3339..ffd61be942 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/modals/addEditNotificationModal/recipientsContainer/recipientsContainer.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/modals/addEditNotificationModal/recipientsContainer/recipientsContainer.jsx @@ -42,7 +42,7 @@ const RecipientsContainerComponent = ({ projectInfo, error, ...rest }) => { const [recipientsWithError, setRecipientsWithError] = useState([]); const emailValidation = (email) => { - return regex(/[.@]/)(email); + return regex(/@/)(email); }; const getEmailValidationError = (v) => { diff --git a/app/src/pages/inside/stepPage/modals/makeDecisionModal/makeDecisionModal.jsx b/app/src/pages/inside/stepPage/modals/makeDecisionModal/makeDecisionModal.jsx index 7126526a66..f3ff2925be 100644 --- a/app/src/pages/inside/stepPage/modals/makeDecisionModal/makeDecisionModal.jsx +++ b/app/src/pages/inside/stepPage/modals/makeDecisionModal/makeDecisionModal.jsx @@ -83,7 +83,9 @@ const MakeDecision = ({ data }) => { suggestChoice: {}, historyChoice: historyItems.find( (item) => - item.id !== itemData.id && !item.issue?.issueType.startsWith(TO_INVESTIGATE_LOCATOR_PREFIX), + item.id !== itemData.id && + item.issue && + !item.issue.issueType.startsWith(TO_INVESTIGATE_LOCATOR_PREFIX), ), commentOption: isBulkOperation ? NOT_CHANGED_FOR_ALL : REPLACE_FOR_ALL, extraAnalyticsParams: { @@ -390,7 +392,9 @@ const MakeDecision = ({ data }) => { const getMakeDecisionTabs = () => { const preparedHistoryLineItems = historyItems.filter( (item) => - item.id !== itemData.id && !item.issue?.issueType.startsWith(TO_INVESTIGATE_LOCATOR_PREFIX), + item.id !== itemData.id && + item.issue && + !item.issue.issueType.startsWith(TO_INVESTIGATE_LOCATOR_PREFIX), ); const tabsData = [ diff --git a/app/src/pages/inside/stepPage/modals/testItemDetailsModal/testItemDetailsModal.scss b/app/src/pages/inside/stepPage/modals/testItemDetailsModal/testItemDetailsModal.scss index facdf57de5..470a344179 100644 --- a/app/src/pages/inside/stepPage/modals/testItemDetailsModal/testItemDetailsModal.scss +++ b/app/src/pages/inside/stepPage/modals/testItemDetailsModal/testItemDetailsModal.scss @@ -53,11 +53,11 @@ justify-content: flex-start; white-space: pre-line; word-break: break-all; + padding-right: 10px; @supports (word-break: break-word) { word-break: break-word; } - padding-right: 10px; } .tags { diff --git a/app/src/pages/inside/stepPage/stepGrid/defectType/issueList/issue/issueInfoTooltip/issueInfoTooltip.jsx b/app/src/pages/inside/stepPage/stepGrid/defectType/issueList/issue/issueInfoTooltip/issueInfoTooltip.jsx index 4af7fd0034..06c7459e0b 100644 --- a/app/src/pages/inside/stepPage/stepGrid/defectType/issueList/issue/issueInfoTooltip/issueInfoTooltip.jsx +++ b/app/src/pages/inside/stepPage/stepGrid/defectType/issueList/issue/issueInfoTooltip/issueInfoTooltip.jsx @@ -53,7 +53,7 @@ const messages = defineMessages({ }, }); -const isResolved = (status) => status.toUpperCase() === STATUS_RESOLVED; +const isResolved = (status = '') => status.toUpperCase() === STATUS_RESOLVED; const getStorageKey = (activeProject) => `${activeProject}_tickets`; const FETCH_ISSUE_INTERVAL = 900000; // min request interval = 15 min @@ -186,14 +186,18 @@ export class IssueInfoTooltip extends Component { <Fragment> <h4 className={cx('header')}>{formatMessage(messages.issueSummaryTitle)}</h4> <p className={cx('content')}>{issue.summary}</p> - <h4 className={cx('header')}>{formatMessage(messages.issueStatusTitle)}</h4> - <p - className={cx('content', { - resolved: isResolved(issue.status), - })} - > - {issue.status} - </p> + {issue.status && ( + <> + <h4 className={cx('header')}>{formatMessage(messages.issueStatusTitle)}</h4> + <p + className={cx('content', { + resolved: isResolved(issue.status), + })} + > + {issue.status} + </p> + </> + )} </Fragment> ) : ( <Fragment> diff --git a/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsGrid/uniqueErrorsGrid.jsx b/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsGrid/uniqueErrorsGrid.jsx index 3f39fe854c..2f383c4f15 100644 --- a/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsGrid/uniqueErrorsGrid.jsx +++ b/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsGrid/uniqueErrorsGrid.jsx @@ -89,7 +89,7 @@ export const UniqueErrorsGridWrapped = ({ parentLaunch, data, loading, ...rest } activeSorting: true, sortable: true, customProps: { - gridHeaderCellStyles: cx('matched-header'), + titleClassName: cx('matched-header'), }, sortingEventInfo: UNIQUE_ERRORS_PAGE_EVENTS.CLICK_MATCHED_TESTS_HEADER_CELL, }); diff --git a/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsGrid/uniqueErrorsGrid.scss b/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsGrid/uniqueErrorsGrid.scss index 3a41f6aa38..0631c201f6 100644 --- a/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsGrid/uniqueErrorsGrid.scss +++ b/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsGrid/uniqueErrorsGrid.scss @@ -20,6 +20,7 @@ .cluster-header { padding-left: 37px; + width: 100%; } .matched-header{ diff --git a/app/src/pages/outside/loginPage/loginPage.jsx b/app/src/pages/outside/loginPage/loginPage.jsx index af5891e5bb..805f1e5aad 100644 --- a/app/src/pages/outside/loginPage/loginPage.jsx +++ b/app/src/pages/outside/loginPage/loginPage.jsx @@ -80,20 +80,38 @@ export class LoginPage extends PureComponent { extensions: [], showDefaultErrorNotification: () => {}, }; + /* + * EPMRPP-96385: Quick fix for duplicate login error notifications + * Includes: static shownErrors, showErrorIfNeeded, componentDidMount, componentDidUpdate + * + * Quick fix to prevent duplicate error messages that sometimes occur when inactive GitHub users + * try to log in. Root cause: Login page component occasionally mounts twice causing duplicate + * error notifications. Using a static Set to deduplicate error messages as a temporary solution. + * + * TODO: Investigate inconsistent double mounting of login page + */ + static shownErrors = new Set(); - componentDidMount() { - if (this.props.errorAuth) { + showErrorIfNeeded = (error) => { + if (error && !LoginPage.shownErrors.has(error)) { + LoginPage.shownErrors.add(error); this.props.showDefaultErrorNotification({ - message: this.props.errorAuth, + message: error, }); + + setTimeout(() => { + LoginPage.shownErrors.delete(error); + }, 5000); } + }; + + componentDidMount() { + this.showErrorIfNeeded(this.props.errorAuth); } componentDidUpdate(prevProps) { if (this.props.errorAuth !== prevProps.errorAuth) { - this.props.showDefaultErrorNotification({ - message: this.props.errorAuth, - }); + this.showErrorIfNeeded(this.props.errorAuth); } } diff --git a/app/src/pages/outside/notFoundPage/notFoundPage.scss b/app/src/pages/outside/notFoundPage/notFoundPage.scss index 8455ec0805..9531e8ef14 100644 --- a/app/src/pages/outside/notFoundPage/notFoundPage.scss +++ b/app/src/pages/outside/notFoundPage/notFoundPage.scss @@ -35,14 +35,14 @@ $RING_MOBILE_DELTA_STEP_WIDTH: 12px; .round-#{$ring + 1} { width: $width; height: $width; - margin-top: -$width/2; - margin-left: -$width/2; + margin-top: -$width*0.5; + margin-left: -$width*0.5; box-shadow: rgba(255, 255, 255, 0.4) 0 0 $shadow; @media (max-width: $SCREEN_XS_MAX) { width: $mobile-width; height: $mobile-width; - margin-top: -$mobile-width/2; - margin-left: -$mobile-width/2; + margin-top: -$mobile-width*0.5; + margin-left: -$mobile-width*0.5; } } } diff --git a/app/src/routes/pageSwitcher.jsx b/app/src/routes/pageSwitcher.jsx index 9c8875d2bd..4019c214ff 100644 --- a/app/src/routes/pageSwitcher.jsx +++ b/app/src/routes/pageSwitcher.jsx @@ -20,6 +20,7 @@ import { PropTypes } from 'prop-types'; import { HTML5Backend } from 'react-dnd-html5-backend'; import { DndProvider } from 'react-dnd'; import { ThemeProvider } from '@reportportal/ui-kit'; +import classNames from 'classnames/bind'; import { ModalContainer } from 'components/main/modal'; import { pageNames } from 'controllers/pages/constants'; import { pageSelector, isInitialDispatchDoneSelector } from 'controllers/pages'; @@ -31,6 +32,8 @@ import { PageErrorBoundary } from 'components/containers/pageErrorBoundary'; import { pageRendering } from './constants'; import styles from './pageSwitcher.scss'; +const cx = classNames.bind(styles); + Object.keys(pageNames).forEach((page) => { if (!pageRendering[page]) { throw new Error(`Rendering for ${page} was not defined.`); @@ -64,7 +67,7 @@ export default class PageSwitcher extends React.Component { const mode = process.env.NODE_ENV; return ( - <div className={styles.pageSwitcher}> + <div className={cx('page-switcher')}> <ThemeProvider> <Layout rawContent={rawContent}> {mode === 'development' && <LocalizationSwitcher />} diff --git a/app/src/routes/pageSwitcher.scss b/app/src/routes/pageSwitcher.scss index ed970c1729..736b433238 100644 --- a/app/src/routes/pageSwitcher.scss +++ b/app/src/routes/pageSwitcher.scss @@ -14,7 +14,7 @@ * limitations under the License. */ -.pageSwitcher { +.page-switcher { width: 100%; height: 100%; } diff --git a/app/webpack/dev.config.js b/app/webpack/dev.config.js index f6043abca3..159a9c3327 100644 --- a/app/webpack/dev.config.js +++ b/app/webpack/dev.config.js @@ -1,5 +1,5 @@ /* - * Copyright 2019 EPAM Systems + * Copyright 2024 EPAM Systems * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,10 +35,9 @@ module.exports = () => { test: /\.css$/, include: /node_modules/, use: [ + // see https://github.com/webpack-contrib/css-loader?tab=readme-ov-file#recommend 'style-loader', - { - loader: 'css-loader', - }, + 'css-loader', ], }, { @@ -50,6 +49,8 @@ module.exports = () => { loader: 'css-loader', options: { modules: { + namedExport: false, + exportLocalsConvention: 'as-is', localIdentName: '[name]__[local]--[contenthash:base64:5]', }, importLoaders: 1, diff --git a/app/webpack/prod.config.js b/app/webpack/prod.config.js index 71df8392d1..1032b2e534 100644 --- a/app/webpack/prod.config.js +++ b/app/webpack/prod.config.js @@ -1,5 +1,5 @@ /* - * Copyright 2019 EPAM Systems + * Copyright 2024 EPAM Systems * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,6 +43,8 @@ module.exports = { loader: 'css-loader', options: { modules: { + namedExport: false, + exportLocalsConvention: 'as-is', localIdentName: '[name]__[local]--[contenthash:base64:5]', }, importLoaders: 1, @@ -70,7 +72,7 @@ module.exports = { minRatio: 0.8, }), // TODO: wait until https://github.com/waysact/webpack-subresource-integrity/issues/176 will be resolved - // TODO we are forced to use it because of webpack-subresource-integrity has not introduced the fix yet + // TODO: we are forced to use it because of webpack-subresource-integrity has not introduced the fix yet new SubresourceIntegrityPlugin({ hashFuncNames: ['sha256', 'sha384'], hashLoading: 'lazy', diff --git a/nginx.conf b/nginx.conf index 6f6e6b903c..748b860fe3 100644 --- a/nginx.conf +++ b/nginx.conf @@ -37,7 +37,7 @@ http { add_header X-Frame-Options "DENY"; add_header X-Content-Type-Options "nosniff"; add_header X-XSS-Protection "1; mode=block"; - add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net; frame-src 'self' https://webto.salesforce.com"; + add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' 'sha256-3q+Q3HGgk9UiNUdwzAAIEnZ+yR0E/2GaklnqnIzhtwE=' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com https://*.clarity.ms https://c.bing.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net https://*.clarity.ms https://c.bing.com; frame-src 'self' https://webto.salesforce.com"; try_files $uri /index.html; } @@ -46,20 +46,20 @@ http { add_header X-Frame-Options "DENY"; add_header X-Content-Type-Options "nosniff"; add_header X-XSS-Protection "1; mode=block"; - add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net; frame-src 'self' https://webto.salesforce.com"; + add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' 'sha256-3q+Q3HGgk9UiNUdwzAAIEnZ+yR0E/2GaklnqnIzhtwE=' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com https://*.clarity.ms https://c.bing.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net https://*.clarity.ms https://c.bing.com; frame-src 'self' https://webto.salesforce.com"; try_files $uri /index.html; } # build info location /info { add_header Cache-Control "public, must-revalidate"; - add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net; frame-src 'self' https://webto.salesforce.com"; + add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' 'sha256-3q+Q3HGgk9UiNUdwzAAIEnZ+yR0E/2GaklnqnIzhtwE=' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com https://*.clarity.ms https://c.bing.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net https://*.clarity.ms https://c.bing.com; frame-src 'self' https://webto.salesforce.com"; try_files $uri /buildInfo.json 404; } location /ui/info { add_header Cache-Control "public, must-revalidate"; - add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net; frame-src 'self' https://webto.salesforce.com"; + add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' 'sha256-3q+Q3HGgk9UiNUdwzAAIEnZ+yR0E/2GaklnqnIzhtwE=' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com https://*.clarity.ms https://c.bing.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net https://*.clarity.ms https://c.bing.com; frame-src 'self' https://webto.salesforce.com"; try_files $uri /buildInfo.json 404; } @@ -79,7 +79,7 @@ http { add_header Cache-Control "public, must-revalidate"; add_header X-Content-Type-Options "nosniff"; add_header X-XSS-Protection "1; mode=block"; - add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net; frame-src 'self' https://webto.salesforce.com"; + add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' 'sha256-3q+Q3HGgk9UiNUdwzAAIEnZ+yR0E/2GaklnqnIzhtwE=' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com https://*.clarity.ms https://c.bing.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net https://*.clarity.ms https://c.bing.com; frame-src 'self' https://webto.salesforce.com"; try_files $uri /media/$1 404; } @@ -88,7 +88,7 @@ http { add_header Cache-Control "public, must-revalidate"; add_header X-Content-Type-Options "nosniff"; add_header X-XSS-Protection "1; mode=block"; - add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net; frame-src 'self' https://webto.salesforce.com"; + add_header Content-Security-Policy "object-src 'none'; default-src 'self' data: *.uservoice.com; script-src 'self' 'sha256-3q+Q3HGgk9UiNUdwzAAIEnZ+yR0E/2GaklnqnIzhtwE=' status.reportportal.io www.google-analytics.com www.googletagmanager.com stats.g.doubleclick.net *.saucelabs.com *.epam.com *.uservoice.com *.rawgit.com https://*.clarity.ms https://c.bing.com; worker-src 'self' blob:; font-src 'self' data: fonts.googleapis.com fonts.gstatic.com *.rawgit.com; style-src-elem 'self' data: 'unsafe-inline' *.googleapis.com *.rawgit.com; style-src 'self' 'unsafe-inline' https://tagmanager.google.com; media-src 'self' *.saucelabs.com *.browserstack.com blob:; img-src * 'self' data: blob: http: https: www.google-analytics.com; connect-src 'self' *.google-analytics.com *.analytics.google.com https://stats.g.doubleclick.net https://*.clarity.ms https://c.bing.com; frame-src 'self' https://webto.salesforce.com"; try_files $uri /$1 404; } }