From 5853e1f717210bc15d714eeda9f8091d1b22db71 Mon Sep 17 00:00:00 2001 From: Vahag Date: Mon, 19 Jan 2026 14:10:46 +0100 Subject: [PATCH 01/42] [IS-10866] add checks on passkeys and OTP authenticator pages to replace delete button with descriptive text when those lists contain only one item and MFA is using respective authentication methods --- .../src/pages/security/Passkeys/Passkeys.tsx | 20 +++++++++++++++++++ .../app/src/pages/security/Totp.tsx | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/self-service-portal/app/src/pages/security/Passkeys/Passkeys.tsx b/src/self-service-portal/app/src/pages/security/Passkeys/Passkeys.tsx index 8c605285..3b231349 100644 --- a/src/self-service-portal/app/src/pages/security/Passkeys/Passkeys.tsx +++ b/src/self-service-portal/app/src/pages/security/Passkeys/Passkeys.tsx @@ -22,6 +22,7 @@ import { Device, DEVICE_TYPES } from '@/shared/data-access/API'; import { PageHeader, Spinner, toUiKitTranslation } from '@curity/ui-kit-component-library'; import { NewPasskeyDialog } from './NewPasskeyDialog'; import { getFormattedDate } from '@shared/utils/date.ts'; +import { MFA_REGISTRABLE_FACTORS } from '@/pages/security/MFA/MFA.tsx'; export const Passkeys = () => { const { t } = useTranslation(); @@ -93,6 +94,24 @@ export const Passkeys = () => { .includes(search?.toLocaleLowerCase()); }) || []; + const shouldDisallowDeletingPasskeys = + passKeys.length === 1 && + accountResponse?.accountByUserName?.mfaOptIn?.registeredFactors?.factors.some( + factor => factor.type === MFA_REGISTRABLE_FACTORS.PASSKEYS + ); + + if (shouldDisallowDeletingPasskeys) { + columns.push({ + key: 'meta', + label: t('actions'), + customRender: () => ( + + {t('security.passkeys.disallow.deletion.description')} + + ), + }); + } + const deletePasskeyFromAccount = ({ deviceId }: Device) => { return deleteDeviceFromAccountByAccountId({ variables: { @@ -119,6 +138,7 @@ export const Passkeys = () => { columns={columns} data={passKeys} createButtonLabel={t('security.passkeys.passkey')} + showDelete={!shouldDisallowDeletingPasskeys} onRowDelete={deletePasskeyFromAccount} onSearch={setSearch} onCreateNew={() => setShowNewPasskeyDialog(true)} diff --git a/src/self-service-portal/app/src/pages/security/Totp.tsx b/src/self-service-portal/app/src/pages/security/Totp.tsx index 3b6e91c8..e0570e96 100644 --- a/src/self-service-portal/app/src/pages/security/Totp.tsx +++ b/src/self-service-portal/app/src/pages/security/Totp.tsx @@ -22,6 +22,7 @@ import { USER_MANAGEMENT_API } from '@/shared/data-access/API/user-management'; import { NewTotpDeviceDialog } from '@/pages/security/NewTotpDeviceDialog'; import { useState } from 'react'; import { UI_CONFIG_RESOURCES } from '@/ui-config/typings'; +import { MFA_REGISTRABLE_FACTORS } from '@/pages/security/MFA/MFA.tsx'; export const Totp = () => { const { t } = useTranslation(); @@ -56,6 +57,24 @@ export const Totp = () => { `${device.alias}${device.deviceId}${device.deviceType}`.toLocaleLowerCase().includes(search.toLocaleLowerCase()) ); + const shouldDisallowDeletingOtpDevices = + otpDevices?.length === 1 && + accountResponse?.accountByUserName?.mfaOptIn?.registeredFactors?.factors.some( + factor => factor.type === MFA_REGISTRABLE_FACTORS.TOTP + ); + + if (shouldDisallowDeletingOtpDevices) { + columns.push({ + key: 'meta', + label: t('actions'), + customRender: () => ( + + {t('security.otp-authenticators.disallow.deletion.description')} + + ), + }); + } + const deleteDeviceFromAccount = (device: Device) => { if (accountId && device) { deleteDeviceFromAccountByAccountId({ @@ -84,6 +103,7 @@ export const Totp = () => { columns={columns} data={otpDevices} createButtonLabel={t('security.otp-authenticators.authenticator')} + showDelete={!shouldDisallowDeletingOtpDevices} onRowDelete={deleteDeviceFromAccount} onSearch={(query: string) => setSearch(query)} onCreateNew={() => setIsNewTotpDeviceDialogOpen(true)} From f65d4247d28bf44d758374be8906a4e13fe9fd04 Mon Sep 17 00:00:00 2001 From: Vahag Date: Tue, 10 Feb 2026 10:46:59 +0100 Subject: [PATCH 02/42] [IS-10924] add new translations --- src/self-service-portal/README.md | 2 +- .../app/src/pages/security/Passkeys/Passkeys.tsx | 2 +- .../messages/en/apps/self-service-portal/security.properties | 2 ++ .../messages/pt-pt/apps/self-service-portal/security.properties | 2 ++ .../messages/pt/apps/self-service-portal/security.properties | 2 ++ .../messages/sv/apps/self-service-portal/security.properties | 2 ++ 6 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/self-service-portal/README.md b/src/self-service-portal/README.md index 7fb49487..2bd06bd4 100644 --- a/src/self-service-portal/README.md +++ b/src/self-service-portal/README.md @@ -50,7 +50,7 @@ of the following directories on the Identity Server: directory on the Identity Server depending on usage or not of the template areas. More on the localization in Identity Server can be found in the documentation: -[Identity Server - Localizing Resources](https://curity.io/docs/identity-server/developer-guide/front-end-development/localization.html). +[Identity Server - Localizing Resources](https://curity.io/docs/identity-server/developer-guide/front-end-development/#loading-resources-from-the-file-system). ### Customising Look & Feel diff --git a/src/self-service-portal/app/src/pages/security/Passkeys/Passkeys.tsx b/src/self-service-portal/app/src/pages/security/Passkeys/Passkeys.tsx index 3b231349..cdb9fa20 100644 --- a/src/self-service-portal/app/src/pages/security/Passkeys/Passkeys.tsx +++ b/src/self-service-portal/app/src/pages/security/Passkeys/Passkeys.tsx @@ -22,7 +22,7 @@ import { Device, DEVICE_TYPES } from '@/shared/data-access/API'; import { PageHeader, Spinner, toUiKitTranslation } from '@curity/ui-kit-component-library'; import { NewPasskeyDialog } from './NewPasskeyDialog'; import { getFormattedDate } from '@shared/utils/date.ts'; -import { MFA_REGISTRABLE_FACTORS } from '@/pages/security/MFA/MFA.tsx'; +import { MFA_REGISTRABLE_FACTORS } from '@/pages/security/MFA/MFA'; export const Passkeys = () => { const { t } = useTranslation(); diff --git a/src/self-service-portal/messages/en/apps/self-service-portal/security.properties b/src/self-service-portal/messages/en/apps/self-service-portal/security.properties index 4ae4ec3c..018aa8d2 100644 --- a/src/self-service-portal/messages/en/apps/self-service-portal/security.properties +++ b/src/self-service-portal/messages/en/apps/self-service-portal/security.properties @@ -38,6 +38,7 @@ security.passkeys.creation=Passkey Creation security.passkeys.path=Security / Passkeys security.passkeys.keys=keys security.passkeys.device=Device +security.passkeys.disallow.deletion.description=This is the last passkey which is currently being used as an authentication method for your account. To ensure you don't lose access to your account, please set up an alternative authentication method before deleting this passkey. # Security - OTP Authenticators security.otp-authenticators.title=OTP Authenticators @@ -53,6 +54,7 @@ security.otp-authenticators.scan-and-verify=Scan and Verify Your Code security.otp-authenticators.scan-and-enter=Scan the QR code with your device and enter the {{digits}}-digit code sent to you to complete verification. This ensures a secure and seamless experience. security.otp-authenticators.path=Security / OTP Authenticators security.otp-authenticators.authenticators=authenticators +security.otp-authenticators.disallow.deletion.description=This is the last OTP authenticator which is currently being used as an authentication method for your account. To ensure you don't lose access to your account, please set up an alternative authentication method before deleting this OTP authenticator. # Security - Multi-factor Authentication security.multi-factor-authentication.title=Multi-factor Authentication diff --git a/src/self-service-portal/messages/pt-pt/apps/self-service-portal/security.properties b/src/self-service-portal/messages/pt-pt/apps/self-service-portal/security.properties index 39d64de6..a5220155 100644 --- a/src/self-service-portal/messages/pt-pt/apps/self-service-portal/security.properties +++ b/src/self-service-portal/messages/pt-pt/apps/self-service-portal/security.properties @@ -38,6 +38,7 @@ security.passkeys.creation=Criação de chave de acesso security.passkeys.path=Segurança / Chaves de acesso security.passkeys.keys=Chaves security.passkeys.device=Dispositivo +security.passkeys.disallow.deletion.description=Esta é a última chave de acesso que está atualmente a ser utilizada como método de autenticação para a sua conta. Para garantir que não perde o acesso à sua conta, por favor configure um método de autenticação alternativo antes de eliminar esta chave de acesso. # Security - OTP Authenticators security.otp-authenticators.title=Autenticadores OTP @@ -53,6 +54,7 @@ security.otp-authenticators.scan-and-verify=Digitalize e verifique o seu código security.otp-authenticators.scan-and-enter=Digitalize o código QR com o seu dispositivo e introduza o código de {{digits}} dígitos enviado para concluir a verificação. Isto garante uma experiência segura e simples. security.otp-authenticators.path=Segurança / Autenticadores OTP security.otp-authenticators.authenticators=autenticadores +security.otp-authenticators.disallow.deletion.description=Este é o último autenticador OTP que está atualmente a ser utilizado como método de autenticação para a sua conta. Para garantir que não perde o acesso à sua conta, por favor configure um método de autenticação alternativo antes de eliminar este autenticador OTP. # Security - Multi-factor Authentication security.multi-factor-authentication.title=Autenticação multifator diff --git a/src/self-service-portal/messages/pt/apps/self-service-portal/security.properties b/src/self-service-portal/messages/pt/apps/self-service-portal/security.properties index 39d64de6..a5997500 100644 --- a/src/self-service-portal/messages/pt/apps/self-service-portal/security.properties +++ b/src/self-service-portal/messages/pt/apps/self-service-portal/security.properties @@ -38,6 +38,7 @@ security.passkeys.creation=Criação de chave de acesso security.passkeys.path=Segurança / Chaves de acesso security.passkeys.keys=Chaves security.passkeys.device=Dispositivo +security.passkeys.disallow.deletion.description=Esta é a última chave de acesso atualmente usada como método de autenticação para sua conta. Para garantir que você não perca o acesso à sua conta, configure um método de autenticação alternativo antes de excluir esta chave de acesso. # Security - OTP Authenticators security.otp-authenticators.title=Autenticadores OTP @@ -53,6 +54,7 @@ security.otp-authenticators.scan-and-verify=Digitalize e verifique o seu código security.otp-authenticators.scan-and-enter=Digitalize o código QR com o seu dispositivo e introduza o código de {{digits}} dígitos enviado para concluir a verificação. Isto garante uma experiência segura e simples. security.otp-authenticators.path=Segurança / Autenticadores OTP security.otp-authenticators.authenticators=autenticadores +security.otp-authenticators.disallow.deletion.description=Este é o último autenticador OTP atualmente usado como método de autenticação para sua conta. Para garantir que você não perca o acesso à sua conta, configure um método de autenticação alternativo antes de excluir este autenticador OTP. # Security - Multi-factor Authentication security.multi-factor-authentication.title=Autenticação multifator diff --git a/src/self-service-portal/messages/sv/apps/self-service-portal/security.properties b/src/self-service-portal/messages/sv/apps/self-service-portal/security.properties index 9d192d2d..78d1f5c3 100644 --- a/src/self-service-portal/messages/sv/apps/self-service-portal/security.properties +++ b/src/self-service-portal/messages/sv/apps/self-service-portal/security.properties @@ -38,6 +38,7 @@ security.passkeys.creation=Skapa passkey security.passkeys.path=Säkerhet / Passkeys security.passkeys.keys=nycklar security.passkeys.device=Enhet +security.passkeys.disallow.deletion.description=Detta är den sista passnyckeln som för närvarande används som autentiseringsmetod för ditt konto. För att säkerställa att du inte förlorar åtkomsten till ditt konto, vänligen konfigurera en alternativ autentiseringsmetod innan du tar bort denna passnyckel. # Security - OTP Authenticators security.otp-authenticators.title=OTP-autentiserare @@ -53,6 +54,7 @@ security.otp-authenticators.scan-and-verify=Skanna och verifiera din kod security.otp-authenticators.scan-and-enter=Skanna QR-koden med din enhet och ange den {{digits}}-siffriga koden som skickats till dig för att slutföra verifieringen. Detta säkerställer en säker och smidig upplevelse. security.otp-authenticators.path=Säkerhet / OTP-autentiserare security.otp-authenticators.authenticators=autentiserare +security.otp-authenticators.disallow.deletion.description=Detta är den sista OTP-autentiseraren som för närvarande används som autentiseringsmetod för ditt konto. För att säkerställa att du inte förlorar åtkomsten till ditt konto, vänligen konfigurera en alternativ autentiseringsmetod innan du tar bort denna OTP-autentiserare. # Security - Multi-factor Authentication security.multi-factor-authentication.title=Multifaktorautentisering From 5e4a972bd58fab5845e420089f4b5e803bc284ed Mon Sep 17 00:00:00 2001 From: Michal Trojanowski Date: Fri, 20 Feb 2026 10:14:58 +0100 Subject: [PATCH 03/42] Add repo badges --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8590849d..64b0c007 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Curity UI Kit +[![production](https://img.shields.io/badge/quality-production-green)](https://curity.io/resources/code-examples/status/) [![source](https://img.shields.io/badge/availability-source-blue)](https://curity.io/resources/code-examples/status/) + **Customize the look and feel of your applications** Date: Fri, 20 Feb 2026 16:32:43 +0100 Subject: [PATCH 04/42] IS-10358 Fix toast not going away after dev urls are ready --- index.html | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/index.html b/index.html index 521a8c4a..b028e1c0 100644 --- a/index.html +++ b/index.html @@ -590,7 +590,6 @@

Read more

]; const toast = document.getElementById("toast"); - let readyCount = 0; // Show toast on page load setTimeout(() => { @@ -621,30 +620,29 @@

Read more

} // Initialize service checks - services.forEach(async (service) => { - const cards = document.querySelectorAll(".card"); - const card = cards[service.cardIndex]; - const status = card.querySelector(".status"); - const statusText = status.querySelector("span:last-child"); - - const isReady = await waitForService(service.url); - - if (isReady) { - status.classList.add("running"); - statusText.textContent = "Dev server running"; - readyCount++; - } else { - // Timeout - mark as failed - statusText.textContent = "Dev server not responding"; - readyCount++; - } + Promise.all( + services.map(async (service) => { + const cards = document.querySelectorAll(".card"); + const card = cards[service.cardIndex]; + const status = card.querySelector(".status"); + const statusText = status.querySelector("span:last-child"); - // Hide toast when all services have been checked - if (readyCount === services.length) { - setTimeout(() => { - toast.classList.remove("show"); - }, 500); - } + const isReady = await waitForService(service.url); + + if (isReady) { + status.classList.add("running"); + statusText.textContent = "Dev server running"; + setTimeout(() => { + status.style.display = "none"; + }, 3000); + } else { + statusText.textContent = "Dev server not responding"; + } + }), + ).then(() => { + setTimeout(() => { + toast.classList.remove("show"); + }, 500); }); From 0f27f6962ddc4920d28f9621e5fabdddd669a698 Mon Sep 17 00:00:00 2001 From: Urban Sanden Date: Fri, 20 Feb 2026 16:33:45 +0100 Subject: [PATCH 05/42] IS-10358 Allow custom themes to be watched --- src/identity-server/vite.config.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/identity-server/vite.config.ts b/src/identity-server/vite.config.ts index cd87e15c..94de9db6 100644 --- a/src/identity-server/vite.config.ts +++ b/src/identity-server/vite.config.ts @@ -54,6 +54,17 @@ export default defineConfig(({ mode }) => { if (mode === "styles") { return { ...shared, + plugins: [ + ...shared.plugins, + { + name: "watch-css-lib-source", + buildStart() { + if (this.meta.watchMode) { + this.addWatchFile(path.resolve(__dirname, "../common/css/lib/src")); + } + }, + }, + ], build: { ...shared.build, emptyOutDir: false, From 02b0edfe5c99174eda3aae9151f49d16ed669021 Mon Sep 17 00:00:00 2001 From: Urban Sanden Date: Mon, 23 Feb 2026 14:27:33 +0100 Subject: [PATCH 06/42] IS-10358 Fix spans and remove header link --- index.html | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/index.html b/index.html index b028e1c0..0edd0bb4 100644 --- a/index.html +++ b/index.html @@ -60,24 +60,15 @@ padding-inline: 0.5rem; justify-content: space-between; - a { + > div:first-child { text-decoration: none; color: white; display: inline-flex; align-items: center; gap: 0.5rem; - - svg { - width: 18px; - height: 18px; - } - - &:hover { - text-decoration: underline; - } } - div:first-child a { + > div:first-child { color: var(--color-yellow); display: inline-flex; gap: 1rem; @@ -87,6 +78,24 @@ > div:last-child { display: flex; gap: 1rem; + align-items: center; + } + + a { + display: flex; + gap: 0.5rem; + align-items: center; + color: white; + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } + + svg { + width: 18px; + height: 18px; } span { @@ -400,13 +409,11 @@
- - Curity Logo - Curity UI Kit - + Curity Logo + Curity UI Kit
@@ -632,9 +639,6 @@

Read more

if (isReady) { status.classList.add("running"); statusText.textContent = "Dev server running"; - setTimeout(() => { - status.style.display = "none"; - }, 3000); } else { statusText.textContent = "Dev server not responding"; } From 53d6eff5b9441b6d71486cae01c90e7d918845dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Gon=C3=A7alves?= Date: Mon, 2 Mar 2026 16:18:52 +0000 Subject: [PATCH 07/42] IS-11067 Improve curity-ui.js --- src/identity-server/scripts/curity-ui.js | 153 +++++++++++------------ 1 file changed, 74 insertions(+), 79 deletions(-) diff --git a/src/identity-server/scripts/curity-ui.js b/src/identity-server/scripts/curity-ui.js index 528e13a8..2b1ef7c2 100644 --- a/src/identity-server/scripts/curity-ui.js +++ b/src/identity-server/scripts/curity-ui.js @@ -22,54 +22,52 @@ * */ module.exports = (function () { - var $ = jQuery; + const $ = jQuery; - var _isInt = function (value) { - var x; - return isNaN(value) ? !1 : ((x = parseFloat(value)), (0 | x) === x); + const _isInt = function (value) { + const x = Number.parseFloat(value); + return (0 | x) === x; }; - var _passwordStrength = function (password) { + const _passwordStrength = function (password) { if (password === undefined || password === "") { return 0; } - var checkRepeatingChars = function (password) { - var chars = {}; - var s = 0; - for (var i = 0; i < password.length; i++) { - chars[password[i]] = (chars[password[i]] || 0) + 1; - s += 5.0 / chars[password[i]]; - } - return s; - }; - var checkDiversity = function (password) { - var res = - (/\d/.test(password) ? 1 : 0) + + let strength = _checkRepeatingChars(password); + const diversity = _checkDiversity(password); + strength += (diversity - 1) * 10; // If 1 then no diversity. + return _normalizeStrength(strength); + }; + + const _checkRepeatingChars = function (password) { + const chars = {}; + let s = 0; + for (let i = 0; i < password.length; i++) { + chars[password[i]] = (chars[password[i]] || 0) + 1; + s += 5 / chars[password[i]]; + } + return s; + }; + const _checkDiversity = function (password) { + return (/\d/.test(password) ? 1 : 0) + (/[a-z]/.test(password) ? 1 : 0) + (/[A-Z]/.test(password) ? 1 : 0) + (/\W/.test(password) ? 1 : 0); - return res; - //Numbers, Lowercase, Uppercase, Other - }; - - var normalizeStrength = function (strength) { - var normalizedStrength = strength; - if (strength > 100) { - return 100; - } - return parseInt(normalizedStrength); - }; + //Numbers, Lowercase, Uppercase, Other + }; - var strength = checkRepeatingChars(password); - var diversity = checkDiversity(password); - strength += (diversity - 1) * 10; // If 1 then no diversity. - return normalizeStrength(strength); + const _normalizeStrength = function (strength) { + const normalizedStrength = strength; + if (strength > 100) { + return 100; + } + return parseInt(normalizedStrength); }; - var _updateProgress = function () { - $("div.progress div[role='progressbar']").each(function (i, val) { - var currentValue = $(this).attr("aria-valuenow"); + const _updateProgress = function () { + $("div.progress div[role='progressbar']").each(function () { + const currentValue = $(this).attr("aria-valuenow"); if (currentValue > 100 || currentValue < 0) { return; } @@ -77,7 +75,7 @@ module.exports = (function () { }); }; - var setProgress = function (value, element) { + const setProgress = function (value, element) { if (!_isInt(value)) { return; } @@ -85,16 +83,16 @@ module.exports = (function () { return; } - value = value < 0 ? 0 : value; - value = value > 100 ? 100 : value; - var $element = element instanceof jQuery ? element : $(element); + value = Math.max(0, value); + value = Math.min(100, value); + const $element = element instanceof jQuery ? element : $(element); - var role = $element.attr("role"); - var $target = undefined; + const role = $element.attr("role"); + let $target; if (role !== undefined && role !== false && role === "progressbar") { $target = $element; } else { - $child = $element.find("div[role='progressbar']").first(); + const $child = $element.find("div[role='progressbar']").first(); if ($child.length === 0) { //No element found to update, do nothing. return; @@ -106,47 +104,46 @@ module.exports = (function () { return $target; }; - var _assignPasswordStrength = function () { - var strengthToColor = function (strength, $element) { - var allColors = - "progress-success progress-info progress-warning progress-danger"; - var strengthLabel = $(".password-strength-grade"); - $element.removeClass(allColors); - if (strength < 33) { - return $element.addClass("progress-danger"); - } else if (strength < 66) { - return $element.addClass("progress-warning"); - } else { - return $element.addClass("progress-success"); - } - }; - - var assignEvent = function ($input, $progess) { - $input.on("input", function (evt) { - var currentVal = $(this).val(); - var strength = _passwordStrength(currentVal); - var $bar = setProgress(strength, $progess); - strengthToColor(strength, $bar); + const _assignPasswordStrength = function () { + const assignEvent = function ($input, $progress) { + $input.on("input", function () { + const currentVal = $(this).val(); + const strength = _passwordStrength(currentVal); + const $bar = setProgress(strength, $progress); + _strengthToColor(strength, $bar); }); }; - var $passwordGroups = $(".password-group"); + const $passwordGroups = $(".password-group"); $passwordGroups.each(function () { - var $pwdField = $(this).children("input[type='password']"); - var $progressBar = $(this).children("div.progress"); + const $pwdField = $(this).children("input[type='password']"); + const $progressBar = $(this).children("div.progress"); if ($progressBar.length > 0) { assignEvent($pwdField, $progressBar); } }); }; - var _passwordRevealer = function () { - var $fields = $(".password-group"); + const _strengthToColor = function (strength, $element) { + const allColors = + "progress-success progress-info progress-warning progress-danger"; + $element.removeClass(allColors); + if (strength < 33) { + return $element.addClass("progress-danger"); + } else if (strength < 66) { + return $element.addClass("progress-warning"); + } else { + return $element.addClass("progress-success"); + } + }; + + const _passwordRevealer = function () { + const $fields = $(".password-group"); - var assignEvent = function ($passwordField, $toggler) { + const assignEvent = function ($passwordField, $toggler) { $toggler.on("click", function (e) { - e && e.preventDefault(); - if ($passwordField.attr("type") == "password") { + e?.preventDefault(); + if ($passwordField.attr("type") === "password") { $passwordField.attr("type", "text"); $(this).addClass("active"); } else { @@ -157,8 +154,8 @@ module.exports = (function () { }; $fields.each(function () { - var $toggler = $(this).find(".form-password-reveal-form-icon"); - var $passwordField = $(this).find("input"); + const $toggler = $(this).find(".form-password-reveal-form-icon"); + const $passwordField = $(this).find("input"); assignEvent($passwordField, $toggler); }); }; @@ -166,7 +163,6 @@ module.exports = (function () { const _qrTimer = function () { const qrTimeProgress = document.getElementById("qr-time"); if (qrTimeProgress) { - const time_duration = document.querySelector("#qr-time-duration"); const label = document.querySelector("#qr-time-duration span"); const time_indicator_minutes = document.getElementById( "qr-time-label-minutes" @@ -201,8 +197,7 @@ module.exports = (function () { }; const _qrEnlarge = function ( - selector = "#trigger-fullscreen", - target = document.documentElement + selector = "#trigger-fullscreen" ) { const trigger = document.querySelector(selector); if (trigger) { @@ -510,7 +505,7 @@ module.exports = (function () { * @returns {null|boolean} the user's decision, if known */ function isNonEssentialCookiesEnabled() { - var localStorageValue = localStorage.getItem( + const localStorageValue = localStorage.getItem( "curityui-enable-non-essential-cookies" ); if (localStorageValue) { @@ -529,7 +524,7 @@ module.exports = (function () { */ function bindNonEssentialCookiesTo(element) { if (!element) return; - var isEnabled = isNonEssentialCookiesEnabled(); + const isEnabled = isNonEssentialCookiesEnabled(); if (isEnabled !== null) { element.checked = isEnabled; } @@ -538,7 +533,7 @@ module.exports = (function () { }; } - var init = function () { + const init = function () { _updateProgress(); _assignPasswordStrength(); _passwordRevealer(); From 93a7adc097bc9ccee346dcd4df47d26c63ffe68b Mon Sep 17 00:00:00 2001 From: Urban Sanden Date: Fri, 6 Mar 2026 10:54:10 +0100 Subject: [PATCH 08/42] IS-11041: Update SSP dependencies to fix npm audit vulnerabilities MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - react-router ^7.9.4 → ^7.13.1 (fixes CSRF, XSS, open redirect CVEs) - vite ^7.1.12 → ^7.3.1 (fixes rollup path traversal CVE) - cypress ^15.5.0 → ^15.11.0 (fixes systeminformation command injection CVEs) - npm audit fix for transitive deps (qs, lodash, immutable via relay-compiler) Co-Authored-By: Claude Sonnet 4.6 --- package-lock.json | 910 ++++++++++++++++++----- src/self-service-portal/app/package.json | 6 +- 2 files changed, 730 insertions(+), 186 deletions(-) diff --git a/package-lock.json b/package-lock.json index 000c2e0e..802cb837 100644 --- a/package-lock.json +++ b/package-lock.json @@ -80,9 +80,9 @@ } }, "node_modules/@ardatan/relay-compiler": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.3.tgz", - "integrity": "sha512-mBDFOGvAoVlWaWqs3hm1AciGHSQE1rqFc/liZTyYz/Oek9yZdT5H26pH2zAFuEiTiBVPPyMuqf5VjOFPI2DGsQ==", + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.3.0.tgz", + "integrity": "sha512-lc6PyM1IQCSa87DMChfv61HuhrSquHGhsF+WFSm2csFnKMSHaj0S1M8fnGr04i7O9YnwyR+OcgQ3CfzlEPC9Fg==", "dev": true, "license": "MIT", "dependencies": { @@ -91,7 +91,7 @@ "@babel/runtime": "^7.26.10", "chalk": "^4.0.0", "fb-watchman": "^2.0.0", - "immutable": "~3.7.6", + "immutable": "^5.1.5", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "relay-runtime": "12.0.0", @@ -104,6 +104,13 @@ "graphql": "*" } }, + "node_modules/@ardatan/relay-compiler/node_modules/immutable": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "dev": true, + "license": "MIT" + }, "node_modules/@asamuzakjp/css-color": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.0.5.tgz", @@ -906,9 +913,9 @@ "link": true }, "node_modules/@cypress/request": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", - "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz", + "integrity": "sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -925,7 +932,7 @@ "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.14.0", + "qs": "~6.14.1", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", @@ -4243,9 +4250,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.1.tgz", - "integrity": "sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], @@ -4256,9 +4263,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.1.tgz", - "integrity": "sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], @@ -4269,9 +4276,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.1.tgz", - "integrity": "sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], @@ -4282,9 +4289,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.1.tgz", - "integrity": "sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], @@ -4295,9 +4302,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.1.tgz", - "integrity": "sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", "cpu": [ "arm64" ], @@ -4308,9 +4315,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.1.tgz", - "integrity": "sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", "cpu": [ "x64" ], @@ -4321,9 +4328,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.1.tgz", - "integrity": "sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ "arm" ], @@ -4334,9 +4341,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.1.tgz", - "integrity": "sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], @@ -4347,9 +4354,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz", - "integrity": "sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], @@ -4360,9 +4367,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz", - "integrity": "sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], @@ -4372,10 +4379,23 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.1.tgz", - "integrity": "sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", "cpu": [ "loong64" ], @@ -4386,9 +4406,22 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.1.tgz", - "integrity": "sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", "cpu": [ "ppc64" ], @@ -4399,9 +4432,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.1.tgz", - "integrity": "sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", "cpu": [ "riscv64" ], @@ -4412,9 +4445,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.1.tgz", - "integrity": "sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], @@ -4425,9 +4458,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.1.tgz", - "integrity": "sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", "cpu": [ "s390x" ], @@ -4438,9 +4471,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.1.tgz", - "integrity": "sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], @@ -4451,9 +4484,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.1.tgz", - "integrity": "sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], @@ -4463,10 +4496,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.1.tgz", - "integrity": "sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", "cpu": [ "arm64" ], @@ -4477,9 +4523,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.1.tgz", - "integrity": "sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], @@ -4490,9 +4536,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.1.tgz", - "integrity": "sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], @@ -4502,10 +4548,23 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.1.tgz", - "integrity": "sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], @@ -5323,13 +5382,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -5685,13 +5744,13 @@ } }, "node_modules/@vue/language-core/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -7843,14 +7902,14 @@ "license": "MIT" }, "node_modules/cypress": { - "version": "15.5.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.5.0.tgz", - "integrity": "sha512-7jXBsh5hTfjxr9QQONC2IbdTj0nxSyU8x4eiarMZBzXzCj3pedKviUx8JnLcE4vL8e0TsOzp70WSLRORjEssRA==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.11.0.tgz", + "integrity": "sha512-NXDE6/fqZuzh1Zr53nyhCCa4lcANNTYWQNP9fJO+tzD3qVTDaTUni5xXMuigYjMujQ7CRiT9RkJJONmPQSsDFw==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@cypress/request": "^3.0.9", + "@cypress/request": "^3.0.10", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", @@ -7878,7 +7937,7 @@ "hasha": "5.2.2", "is-installed-globally": "~0.4.0", "listr2": "^3.8.3", - "lodash": "^4.17.21", + "lodash": "^4.17.23", "log-symbols": "^4.0.0", "minimist": "^1.2.8", "ospath": "^1.2.2", @@ -7886,11 +7945,11 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.7.1", "supports-color": "^8.1.1", - "systeminformation": "5.27.7", + "systeminformation": "^5.31.1", "tmp": "~0.2.4", "tree-kill": "1.2.2", + "tslib": "1.14.1", "untildify": "^4.0.0", "yauzl": "^2.10.0" }, @@ -7929,19 +7988,6 @@ } } }, - "node_modules/cypress/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/cypress/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -7958,6 +8004,13 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/cypress/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "node_modules/cypress/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -8318,9 +8371,9 @@ } }, "node_modules/devalue": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.5.0.tgz", - "integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.3.tgz", + "integrity": "sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==", "license": "MIT" }, "node_modules/devlop": { @@ -8343,9 +8396,9 @@ "license": "MIT" }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -9763,9 +9816,9 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { @@ -10047,9 +10100,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -10218,13 +10271,13 @@ } }, "node_modules/graphql-config/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -10280,9 +10333,9 @@ } }, "node_modules/h3": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz", - "integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.5.tgz", + "integrity": "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==", "license": "MIT", "dependencies": { "cookie-es": "^1.2.2", @@ -10290,9 +10343,9 @@ "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", - "node-mock-http": "^1.0.2", + "node-mock-http": "^1.0.4", "radix3": "^1.1.2", - "ufo": "^1.6.1", + "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, @@ -10941,13 +10994,13 @@ } }, "node_modules/immutable": { - "version": "3.7.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", - "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.3.tgz", + "integrity": "sha512-AUY/VyX0E5XlibOmWt10uabJzam1zlYjwiEgQSDc5+UIkFNaF9WM0JxXKaNMGf+F/ffUF+7kRKXM9A7C0xXqMg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, "node_modules/import-fresh": { @@ -12427,9 +12480,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "license": "MIT" }, "node_modules/lodash.get": { @@ -13857,9 +13910,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -15265,9 +15318,9 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -15554,9 +15607,9 @@ "license": "0BSD" }, "node_modules/react-router": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.5.tgz", - "integrity": "sha512-JmxqrnBZ6E9hWmf02jzNn9Jm3UqyeimyiwzD69NjxGySG6lIz/1LVPsoTCwN7NBX2XjCEa1LIX5EMz1j2b6u6A==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.1.tgz", + "integrity": "sha512-td+xP4X2/6BJvZoX6xw++A2DdEi++YypA69bJUV5oVvqf6/9/9nNlD70YO1e9d3MyamJEBQFEzk6mbfDYbqrSA==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -16230,9 +16283,9 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz", - "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -16245,27 +16298,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.50.1", - "@rollup/rollup-android-arm64": "4.50.1", - "@rollup/rollup-darwin-arm64": "4.50.1", - "@rollup/rollup-darwin-x64": "4.50.1", - "@rollup/rollup-freebsd-arm64": "4.50.1", - "@rollup/rollup-freebsd-x64": "4.50.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.50.1", - "@rollup/rollup-linux-arm-musleabihf": "4.50.1", - "@rollup/rollup-linux-arm64-gnu": "4.50.1", - "@rollup/rollup-linux-arm64-musl": "4.50.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.50.1", - "@rollup/rollup-linux-ppc64-gnu": "4.50.1", - "@rollup/rollup-linux-riscv64-gnu": "4.50.1", - "@rollup/rollup-linux-riscv64-musl": "4.50.1", - "@rollup/rollup-linux-s390x-gnu": "4.50.1", - "@rollup/rollup-linux-x64-gnu": "4.50.1", - "@rollup/rollup-linux-x64-musl": "4.50.1", - "@rollup/rollup-openharmony-arm64": "4.50.1", - "@rollup/rollup-win32-arm64-msvc": "4.50.1", - "@rollup/rollup-win32-ia32-msvc": "4.50.1", - "@rollup/rollup-win32-x64-msvc": "4.50.1", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, @@ -16447,10 +16504,13 @@ } }, "node_modules/sax": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", - "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", - "license": "BlueOak-1.0.0" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz", + "integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } }, "node_modules/saxes": { "version": "6.0.0", @@ -17723,9 +17783,9 @@ } }, "node_modules/svgo": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", - "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", "license": "MIT", "dependencies": { "commander": "^11.1.0", @@ -17734,7 +17794,7 @@ "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", - "sax": "^1.4.1" + "sax": "^1.5.0" }, "bin": { "svgo": "bin/svgo.js" @@ -17817,9 +17877,9 @@ } }, "node_modules/systeminformation": { - "version": "5.27.7", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.7.tgz", - "integrity": "sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==", + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.3.tgz", + "integrity": "sha512-vX0eeI7oGIr79NLiJRWnK8SyxDjyiNOEanaQnHRNyb5ep8QcpD8QMDvrukdrxV4pV4AKjwUDfaypXnWHMC/65A==", "dev": true, "license": "MIT", "os": [ @@ -18329,9 +18389,9 @@ } }, "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", "license": "MIT" }, "node_modules/ultrahtml": { @@ -18976,13 +19036,13 @@ } }, "node_modules/vite": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", - "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", @@ -19146,6 +19206,490 @@ } } }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, "node_modules/vite/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", @@ -20717,7 +21261,7 @@ "react-hot-toast": "^2.5.2", "react-i18next": "^16.1.5", "react-qr-code": "^2.0.15", - "react-router": "^7.9.4", + "react-router": "^7.13.1", "react-verification-input": "^4.2.2" }, "devDependencies": { @@ -20732,7 +21276,7 @@ "@types/react-dom": "^19.0.2", "@vitejs/plugin-basic-ssl": "^2.1.0", "@vitejs/plugin-react": "^5.0.4", - "cypress": "^15.5.0", + "cypress": "^15.11.0", "eslint": "^9.16.0", "eslint-plugin-react-hooks": "^7.0.0", "eslint-plugin-react-refresh": "^0.4.16", @@ -20743,7 +21287,7 @@ "stylelint-config-standard": "^39.0.1", "typescript": "^5.7.2", "typescript-eslint": "^8.18.0", - "vite": "^7.1.12", + "vite": "^7.3.1", "vite-tsconfig-paths": "^5.1.4", "vitest": "^4.0.1" }, diff --git a/src/self-service-portal/app/package.json b/src/self-service-portal/app/package.json index da675156..a4bceefc 100644 --- a/src/self-service-portal/app/package.json +++ b/src/self-service-portal/app/package.json @@ -42,7 +42,7 @@ "react-hot-toast": "^2.5.2", "react-i18next": "^16.1.5", "react-qr-code": "^2.0.15", - "react-router": "^7.9.4", + "react-router": "^7.13.1", "react-verification-input": "^4.2.2" }, "devDependencies": { @@ -57,7 +57,7 @@ "@types/react-dom": "^19.0.2", "@vitejs/plugin-basic-ssl": "^2.1.0", "@vitejs/plugin-react": "^5.0.4", - "cypress": "^15.5.0", + "cypress": "^15.11.0", "eslint": "^9.16.0", "eslint-plugin-react-hooks": "^7.0.0", "eslint-plugin-react-refresh": "^0.4.16", @@ -68,7 +68,7 @@ "stylelint-config-standard": "^39.0.1", "typescript": "^5.7.2", "typescript-eslint": "^8.18.0", - "vite": "^7.1.12", + "vite": "^7.3.1", "vite-tsconfig-paths": "^5.1.4", "vitest": "^4.0.1" }, From 8e652001a1d132af5b0c3eb638a84c619e05d189 Mon Sep 17 00:00:00 2001 From: Urban Sanden Date: Fri, 6 Mar 2026 12:13:45 +0100 Subject: [PATCH 09/42] IS-11076 Simplify submit button CSS selector and fix outline button color --- src/common/css/lib/src/base/base-buttons.css | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/common/css/lib/src/base/base-buttons.css b/src/common/css/lib/src/base/base-buttons.css index bc6c81d1..1ff44f35 100644 --- a/src/common/css/lib/src/base/base-buttons.css +++ b/src/common/css/lib/src/base/base-buttons.css @@ -209,11 +209,7 @@ button svg { padding-inline-end: calc(var(--button-padding-x) * var(--x-medium)); } -[type='submit'] { - margin-block-start: var(--space-2); -} - -[type='submit']:not(.button-medium):not(.button-small):not(.button-tiny):not(.button-small):not(.button-large):not(.button-social):not(.button-link):not(.button-primary-outline), +[type='submit']:where(:not(.button-tiny, .button-small, .button-large)), .button-medium { font-size: calc(var(--button-font-size) * var(--y-medium)); min-height: 44px; @@ -221,14 +217,16 @@ button svg { padding-block-end: calc(var(--button-padding-y) * var(--y-medium)); padding-inline-start: calc(var(--button-padding-x) * var(--x-medium)); padding-inline-end: calc(var(--button-padding-x) * var(--x-medium)); + margin-block-start: var(--space-2); - &:is([type='submit']) { + &:where(:not([class*='-outline'])) { color: white; } } a:is(.button) { text-decoration: none; + width: 100%; &:is(.button-grey) { color: white From 1a996d7999b23a7307e46056040df5c2034da826 Mon Sep 17 00:00:00 2001 From: Aleix Suau Date: Mon, 9 Mar 2026 09:26:49 +0100 Subject: [PATCH 10/42] IS-10864: handle existing primary phone number error --- .../phone/PhoneNumberVerificationDialog.tsx | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx b/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx index 9b6445cf..9a905da3 100644 --- a/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx +++ b/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx @@ -44,7 +44,7 @@ export const PhoneNumberVerificationDialog = ({ data: verificationStartData, loading: verificationStartLoading, error: verificationStartError, - reset: restVerificationStartError, + reset: resetVerificationStart, }, ] = useMutation(USER_MANAGEMENT_API.MUTATIONS.startVerifyPhoneNumberByAccountId); const [ @@ -53,10 +53,10 @@ export const PhoneNumberVerificationDialog = ({ data: verificationCompleteData, loading: verificationCompleteLoading, error: verificationCompleteError, - reset: restVerificationCompleteError, + reset: resetVerificationComplete, }, ] = useMutation(USER_MANAGEMENT_API.MUTATIONS.completeVerifyPhoneNumberByAccountId); - const [updatePrimaryPhoneNumberByAccountId] = useMutation( + const [updatePrimaryPhoneNumberByAccountId, { error: updatePrimaryPhoneNumberError }] = useMutation( USER_MANAGEMENT_API.MUTATIONS.updatePrimaryPhoneNumberByAccountId ); const hasTriggeredStartVerification = useRef(false); @@ -67,7 +67,7 @@ export const PhoneNumberVerificationDialog = ({ const isDialogPhoneNumberStep = forcePhoneNumberStep || !verificationStartData; const isDialogPhoneNumberVerificationStep = !forcePhoneNumberStep && !!verificationStartData && !verificationCompleteData; - const isDialogPhoneNumberVerificationSuccessStep = !!verificationCompleteData; + const isDialogPhoneNumberVerificationSuccessStep = !!verificationCompleteData && !updatePrimaryPhoneNumberError; useEffect(() => { if (phoneNumberForOtpVerification && !hasTriggeredStartVerification.current) { @@ -122,7 +122,6 @@ export const PhoneNumberVerificationDialog = ({ if (isDialogPhoneNumberVerificationSuccessStep) return 'success'; return 'phoneNumber'; }; - const getDialogSubtitle = () => dialogConfig[getDialogStepKey()].subtitle; const getActionButtonText = () => dialogConfig[getDialogStepKey()].actionText; const getCancelButtonText = () => dialogConfig[getDialogStepKey()].cancelText; @@ -165,7 +164,7 @@ export const PhoneNumberVerificationDialog = ({ const verifyOtpCode = async () => { const code = otpDigits; - await completeVerifyPhoneNumberByAccountId({ + const completeVerifyPhoneNumberByAccountIdResponse = await completeVerifyPhoneNumberByAccountId({ variables: { input: { accountId, @@ -175,7 +174,7 @@ export const PhoneNumberVerificationDialog = ({ }, }); - if (setPhoneNumberAsPrimaryAfterVerification) { + if (setPhoneNumberAsPrimaryAfterVerification && completeVerifyPhoneNumberByAccountIdResponse.data) { await updatePrimaryPhoneNumberByAccountId({ variables: { input: { @@ -183,6 +182,10 @@ export const PhoneNumberVerificationDialog = ({ newPrimaryPhoneNumber: phoneNumberForOtpVerification || phoneNumber, }, }, + }).catch(() => { + resetVerificationStart(); + resetVerificationComplete(); + setForcePhoneNumberStep(true); }); } @@ -192,8 +195,8 @@ export const PhoneNumberVerificationDialog = ({ const resetDialog = () => { setPhoneNumber(''); setForcePhoneNumberStep(true); - restVerificationStartError(); - restVerificationCompleteError(); + resetVerificationStart(); + resetVerificationComplete(); }; const isActionButtonDisabled = (): boolean => { @@ -240,10 +243,14 @@ export const PhoneNumberVerificationDialog = ({ onChange={event => setPhoneNumber(event.target.value)} data-testid="phone-number-input" /> - {verificationStartError && ( + {(verificationStartError || updatePrimaryPhoneNumberError) && ( From 08af1ab3e2de07944f9a110c4db5fa5ba5fca57a Mon Sep 17 00:00:00 2001 From: Urban Sanden Date: Tue, 10 Mar 2026 11:39:44 +0100 Subject: [PATCH 11/42] IS-11076 Remove 100% width --- src/common/css/lib/src/base/base-buttons.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/common/css/lib/src/base/base-buttons.css b/src/common/css/lib/src/base/base-buttons.css index 1ff44f35..30632015 100644 --- a/src/common/css/lib/src/base/base-buttons.css +++ b/src/common/css/lib/src/base/base-buttons.css @@ -226,7 +226,6 @@ button svg { a:is(.button) { text-decoration: none; - width: 100%; &:is(.button-grey) { color: white From e949307ec68c186e03cc6ddaf2924427ab4933c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 10:51:53 +0000 Subject: [PATCH 12/42] Bump @babel/runtime from 7.22.5 to 7.28.6 in /src/common/css/lib Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.22.5 to 7.28.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.28.6/packages/babel-runtime) --- updated-dependencies: - dependency-name: "@babel/runtime" dependency-version: 7.28.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- src/common/css/lib/package-lock.json | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/common/css/lib/package-lock.json b/src/common/css/lib/package-lock.json index 7e6b2ac2..e9cfd472 100644 --- a/src/common/css/lib/package-lock.json +++ b/src/common/css/lib/package-lock.json @@ -1,12 +1,13 @@ { "name": "@curity-internal/css", - "version": "0.6.6", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@curity-internal/css", - "version": "0.6.6", + "version": "1.0.0", + "license": "Apache-2.0", "dependencies": { "concurrently": "^8.2.0" }, @@ -16,12 +17,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -670,11 +669,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", From a1f9decc646b15d0805b764dba88cebf24cc6cd2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 10:52:07 +0000 Subject: [PATCH 13/42] Bump lodash from 4.17.21 to 4.17.23 in /src/common/css/lib Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.17.23 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- src/common/css/lib/package-lock.json | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/common/css/lib/package-lock.json b/src/common/css/lib/package-lock.json index 7e6b2ac2..e19bd1a2 100644 --- a/src/common/css/lib/package-lock.json +++ b/src/common/css/lib/package-lock.json @@ -1,12 +1,13 @@ { "name": "@curity-internal/css", - "version": "0.6.6", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@curity-internal/css", - "version": "0.6.6", + "version": "1.0.0", + "license": "Apache-2.0", "dependencies": { "concurrently": "^8.2.0" }, @@ -599,9 +600,10 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.8", From 82484928a8299202f47d82aa986379eb660b57ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 15:13:03 +0000 Subject: [PATCH 14/42] Bump devalue from 5.5.0 to 5.6.4 in /src/common/css/docs Bumps [devalue](https://github.com/sveltejs/devalue) from 5.5.0 to 5.6.4. - [Release notes](https://github.com/sveltejs/devalue/releases) - [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md) - [Commits](https://github.com/sveltejs/devalue/compare/v5.5.0...v5.6.4) --- updated-dependencies: - dependency-name: devalue dependency-version: 5.6.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- src/common/css/docs/package-lock.json | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/common/css/docs/package-lock.json b/src/common/css/docs/package-lock.json index ce9815e9..6ea7ac9b 100644 --- a/src/common/css/docs/package-lock.json +++ b/src/common/css/docs/package-lock.json @@ -1,18 +1,19 @@ { "name": "docs", - "version": "0.4.1", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "docs", - "version": "0.4.1", + "version": "1.0.0", + "license": "Apache-2.0", "dependencies": { "@astrojs/mdx": "^4.3.12", "@astrojs/partytown": "^2.1.4", "@astrojs/react": "^4.4.2", - "@curity/ui-kit-css": "file:../path/to/ui-kit/src/common/css", - "@curity/ui-kit-icons": "file:../path/to/ui-kit/src/common/icons", + "@curity/ui-kit-css": "*", + "@curity/ui-kit-icons": "*", "astro": "^5.16.1", "mdast-util-to-string": "3.2.0", "react": "19.1.0", @@ -2772,9 +2773,9 @@ } }, "node_modules/devalue": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.5.0.tgz", - "integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==", + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", + "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", "license": "MIT" }, "node_modules/devlop": { From fc3527f21381d2cedb46013e8023b429110b08c0 Mon Sep 17 00:00:00 2001 From: Aleix Suau Date: Fri, 13 Mar 2026 07:16:38 +0100 Subject: [PATCH 15/42] Update src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx Fix data-testid Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../pages/security/phone/PhoneNumberVerificationDialog.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx b/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx index 9a905da3..558c086b 100644 --- a/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx +++ b/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx @@ -252,7 +252,11 @@ export const PhoneNumberVerificationDialog = ({ : t(GRAPHQL_API_ERROR_MESSAGES.updatePrimaryPhoneNumberByAccountId) } classes="mt2" - data-testid="phone-number-start-verification-error" + data-testid={ + verificationStartError + ? 'phone-number-start-verification-error' + : 'phone-number-update-primary-error' + } /> )}
From 357766fa5c17e29b0d2864b2f122c26e1bf4ec13 Mon Sep 17 00:00:00 2001 From: Aleix Suau Date: Fri, 13 Mar 2026 08:17:06 +0100 Subject: [PATCH 16/42] IS-10864: improve primary setting conditional --- .../pages/security/phone/PhoneNumberVerificationDialog.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx b/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx index 9a905da3..8ad9688d 100644 --- a/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx +++ b/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx @@ -173,8 +173,10 @@ export const PhoneNumberVerificationDialog = ({ }, }, }); + const phoneNumberSuccessfullyVerified = + completeVerifyPhoneNumberByAccountIdResponse.data?.completeVerifyPhoneNumberByAccountId?.result === true; - if (setPhoneNumberAsPrimaryAfterVerification && completeVerifyPhoneNumberByAccountIdResponse.data) { + if (setPhoneNumberAsPrimaryAfterVerification && phoneNumberSuccessfullyVerified) { await updatePrimaryPhoneNumberByAccountId({ variables: { input: { @@ -252,7 +254,7 @@ export const PhoneNumberVerificationDialog = ({ : t(GRAPHQL_API_ERROR_MESSAGES.updatePrimaryPhoneNumberByAccountId) } classes="mt2" - data-testid="phone-number-start-verification-error" + data-testid="phone-number-start-verification-or-primary-update-error" /> )} From e1cf79f82515059a863fabe65dd43730a518f758 Mon Sep 17 00:00:00 2001 From: Aleix Suau Date: Fri, 13 Mar 2026 09:16:20 +0100 Subject: [PATCH 17/42] IS-10864: improve verification step criteria and dialog resetting --- .../phone/PhoneNumberVerificationDialog.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx b/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx index fbadc479..564d7853 100644 --- a/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx +++ b/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx @@ -56,18 +56,25 @@ export const PhoneNumberVerificationDialog = ({ reset: resetVerificationComplete, }, ] = useMutation(USER_MANAGEMENT_API.MUTATIONS.completeVerifyPhoneNumberByAccountId); - const [updatePrimaryPhoneNumberByAccountId, { error: updatePrimaryPhoneNumberError }] = useMutation( - USER_MANAGEMENT_API.MUTATIONS.updatePrimaryPhoneNumberByAccountId - ); + const [ + updatePrimaryPhoneNumberByAccountId, + { + loading: updatePrimaryPhoneNumberLoading, + error: updatePrimaryPhoneNumberError, + reset: resetUpdatePrimaryPhoneNumber, + }, + ] = useMutation(USER_MANAGEMENT_API.MUTATIONS.updatePrimaryPhoneNumberByAccountId); const hasTriggeredStartVerification = useRef(false); const isStartVerificationLoading = verificationStartLoading; const isCompleteVerificationLoading = verificationCompleteLoading; - const isDialogLoading = isStartVerificationLoading || isCompleteVerificationLoading; + const isDialogLoading = + isStartVerificationLoading || isCompleteVerificationLoading || updatePrimaryPhoneNumberLoading; const isDialogPhoneNumberStep = forcePhoneNumberStep || !verificationStartData; const isDialogPhoneNumberVerificationStep = !forcePhoneNumberStep && !!verificationStartData && !verificationCompleteData; - const isDialogPhoneNumberVerificationSuccessStep = !!verificationCompleteData && !updatePrimaryPhoneNumberError; + const isDialogPhoneNumberVerificationSuccessStep = + !isDialogLoading && !!verificationCompleteData && !updatePrimaryPhoneNumberError; useEffect(() => { if (phoneNumberForOtpVerification && !hasTriggeredStartVerification.current) { @@ -199,6 +206,7 @@ export const PhoneNumberVerificationDialog = ({ setForcePhoneNumberStep(true); resetVerificationStart(); resetVerificationComplete(); + resetUpdatePrimaryPhoneNumber(); }; const isActionButtonDisabled = (): boolean => { From 10e27ef3f4ca2f1ec8f9b573c894f36648a31cd8 Mon Sep 17 00:00:00 2001 From: Aleix Suau Date: Mon, 16 Mar 2026 08:27:44 +0100 Subject: [PATCH 18/42] IS-10864: improve duplicated primary phone error message --- .../security/phone/PhoneNumberVerificationDialog.tsx | 9 ++++++++- .../user-management/USER_MANAGEMENT_ERROR_MESSAGES.ts | 5 ++++- .../en/apps/self-service-portal/error.properties | 1 + .../pt-pt/apps/self-service-portal/error.properties | 1 + .../pt/apps/self-service-portal/error.properties | 1 + .../sv/apps/self-service-portal/error.properties | 1 + 6 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx b/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx index 564d7853..83957669 100644 --- a/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx +++ b/src/self-service-portal/app/src/pages/security/phone/PhoneNumberVerificationDialog.tsx @@ -219,6 +219,13 @@ export const PhoneNumberVerificationDialog = ({ return false; }; + const updatePrimaryPhoneNumberErrorExtensions = updatePrimaryPhoneNumberError?.graphQLErrors[0]?.extensions; + const updatePrimaryPhoneNumberErrorMessage = + updatePrimaryPhoneNumberErrorExtensions?.classification === 'constraint-violation' && + updatePrimaryPhoneNumberErrorExtensions?.field === 'phoneNumbers' + ? t(GRAPHQL_API_ERROR_MESSAGES.updatePrimaryPhoneNumberByAccountIdDuplicated) + : t(GRAPHQL_API_ERROR_MESSAGES.updatePrimaryPhoneNumberByAccountId); + return ( = { +export const USER_MANAGEMENT_API_ERROR_MESSAGES: Record & { + updatePrimaryPhoneNumberByAccountIdDuplicated: string; +} = { // QUERIES [USER_MANAGEMENT_API_OPERATIONS.GET_ACCOUNT_BY_USERNAME]: 'error.account.fetch-by-username', [USER_MANAGEMENT_API_OPERATIONS.GET_ACCOUNTS]: 'error.account.fetch-all', @@ -31,6 +33,7 @@ export const USER_MANAGEMENT_API_ERROR_MESSAGES: Record Date: Mon, 16 Mar 2026 09:49:19 +0100 Subject: [PATCH 19/42] replace unmaintained @reach/dialog with @radix-ui/react-dialog --- package-lock.json | 468 +++++++++++++----- src/common/component-library/README.md | 2 +- src/common/component-library/package.json | 4 +- .../src/components/ConfirmButton.tsx | 2 +- .../src/components/dialog/Dialog.module.css | 3 +- .../src/components/dialog/Dialog.tsx | 75 +-- src/self-service-portal/app/package.json | 7 +- 7 files changed, 407 insertions(+), 154 deletions(-) diff --git a/package-lock.json b/package-lock.json index 802cb837..0a21f1e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4034,53 +4034,360 @@ "node": ">=18.0.0" } }, - "node_modules/@reach/dialog": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@reach/dialog/-/dialog-0.18.0.tgz", - "integrity": "sha512-hWhzmBK8VJj+yf6OivFqHFZIV4q9TISZrkPaglKE5oFYtrr75lxWjrBTA+BshL0r/FfKodvNtdT8yq4vj/6Gcw==", + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", "license": "MIT", "dependencies": { - "@reach/polymorphic": "0.18.0", - "@reach/portal": "0.18.0", - "@reach/utils": "0.18.0", - "react-focus-lock": "2.5.2", - "react-remove-scroll": "2.4.3" + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" }, "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@reach/polymorphic": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@reach/polymorphic/-/polymorphic-0.18.0.tgz", - "integrity": "sha512-N9iAjdMbE//6rryZZxAPLRorzDcGBnluf7YQij6XDLiMtfCj1noa7KyLpEc/5XCIB/EwhX3zCluFAwloBKdblA==", + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, "peerDependencies": { - "react": "^16.8.0 || 17.x" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@reach/portal": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.18.0.tgz", - "integrity": "sha512-TImozRapd576ofRk30Le2L3lRTFXF1p47B182wnp5eMTdZa74JX138BtNGEPJFOyrMaVmguVF8SSwZ6a0fon1Q==", + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", "license": "MIT", "dependencies": { - "@reach/utils": "0.18.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@reach/utils": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.18.0.tgz", - "integrity": "sha512-KdVMdpTgDyK8FzdKO9SCpiibuy/kbv3pwgfXshTI6tEcQT1OOwj7BAksnzGC0rPz0UholwC+AgkqEl3EJX3M1A==", + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@repeaterjs/repeater": { @@ -6055,6 +6362,18 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", @@ -9730,18 +10049,6 @@ "node": ">=8" } }, - "node_modules/focus-lock": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.9.2.tgz", - "integrity": "sha512-YtHxjX7a0IC0ZACL5wsX8QdncXofWpGPNoVMuI/nZUrPGp6LmNI6+D5j0pPj+v8Kw5EpweA+T5yImK0rnWf7oQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/follow-redirects": { "version": "1.15.11", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", @@ -15410,26 +15717,14 @@ } }, "node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/react-clientside-effect": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.8.tgz", - "integrity": "sha512-ma2FePH0z3px2+WOu6h+YycZcEvFmmxIlAb62cF52bG86eMySciO/EQZeQMXd07kPCYB0a1dWDT5J+KE9mCDUw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, "node_modules/react-compiler-runtime": { "version": "19.0.0-beta-ebf51a3-20250411", "resolved": "https://registry.npmjs.org/react-compiler-runtime/-/react-compiler-runtime-19.0.0-beta-ebf51a3-20250411.tgz", @@ -15440,15 +15735,15 @@ } }, "node_modules/react-dom": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", - "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.0" + "react": "^19.2.4" } }, "node_modules/react-error-boundary": { @@ -15463,23 +15758,6 @@ "react": ">=16.13.1" } }, - "node_modules/react-focus-lock": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.5.2.tgz", - "integrity": "sha512-WzpdOnEqjf+/A3EH9opMZWauag7gV0BxFl+EY4ElA4qFqYsUsBLnmo2sELbN5OC30S16GAWMy16B9DLPpdJKAQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.0.0", - "focus-lock": "^0.9.1", - "prop-types": "^15.6.2", - "react-clientside-effect": "^1.2.5", - "use-callback-ref": "^1.2.5", - "use-sidecar": "^1.0.5" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, "node_modules/react-hot-toast": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.6.0.tgz", @@ -15553,31 +15831,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-remove-scroll": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.4.3.tgz", - "integrity": "sha512-lGWYXfV6jykJwbFpsuPdexKKzp96f3RbvGapDSIdcyGvHb7/eqyn46C7/6h+rUzYar1j5mdU+XECITHXCKBk9Q==", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.1.0", - "react-style-singleton": "^2.1.0", - "tslib": "^1.0.0", - "use-callback-ref": "^1.2.3", - "use-sidecar": "^1.0.1" - }, - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/react-remove-scroll-bar": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", @@ -15600,12 +15853,6 @@ } } }, - "node_modules/react-remove-scroll/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, "node_modules/react-router": { "version": "7.13.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.1.tgz", @@ -20469,7 +20716,7 @@ "dependencies": { "@curity/ui-kit-css": "^1.0.0", "@curity/ui-kit-icons": "^1.0.0", - "@reach/dialog": "^0.18.0", + "@radix-ui/react-dialog": "^1.1.15", "react": "^19.2.0", "react-router": "^7.9.4" }, @@ -21252,11 +21499,10 @@ "@curity/ui-kit-component-library": "^1.0.0", "@curity/ui-kit-css": "^1.0.0", "@curity/ui-kit-icons": "^1.0.0", - "@reach/dialog": "^0.18.0", "graphql": "^16.11.0", "i18next": "^25.6.0", "react": "^19.2.0", - "react-dom": "^19.2.0", + "react-dom": "^19.2.4", "react-error-boundary": "^6.0.0", "react-hot-toast": "^2.5.2", "react-i18next": "^16.1.5", diff --git a/src/common/component-library/README.md b/src/common/component-library/README.md index b3eb4086..eeda1f87 100644 --- a/src/common/component-library/README.md +++ b/src/common/component-library/README.md @@ -155,7 +155,7 @@ src/ - `@curity/ui-kit-icons` - Icon library - `react` - `react-router` - Routing support -- `@reach/dialog` - Dialog support +- `@radix-ui/react-dialog` - Dialog support ## Browser Support diff --git a/src/common/component-library/package.json b/src/common/component-library/package.json index 38835a6a..1b6e2060 100644 --- a/src/common/component-library/package.json +++ b/src/common/component-library/package.json @@ -43,7 +43,7 @@ "dependencies": { "@curity/ui-kit-css": "^1.0.0", "@curity/ui-kit-icons": "^1.0.0", - "@reach/dialog": "^0.18.0", + "@radix-ui/react-dialog": "^1.1.15", "react": "^19.2.0", "react-router": "^7.9.4" }, @@ -65,8 +65,8 @@ "typescript": "^5.7.2", "typescript-eslint": "^8.18.0", "vite": "^7.1.12", - "vite-tsconfig-paths": "^5.1.4", "vite-plugin-dts": "^3.0.0", + "vite-tsconfig-paths": "^5.1.4", "vitest": "^4.0.1" } } diff --git a/src/common/component-library/src/components/ConfirmButton.tsx b/src/common/component-library/src/components/ConfirmButton.tsx index 0520f611..ef9464d1 100644 --- a/src/common/component-library/src/components/ConfirmButton.tsx +++ b/src/common/component-library/src/components/ConfirmButton.tsx @@ -63,7 +63,7 @@ export const ConfirmButton = ({ children:

{dialogMessage || t('confirm-proceed')}

, }; const dialogConfigResult = { ...defaultDialogConfig, ...dialogConfig }; - const closeCallback = (event: React.MouseEvent) => { + const closeCallback = (event?: React.MouseEvent) => { setIsOpen(false); onCancel?.(); dialogConfig?.closeCallback?.(event); diff --git a/src/common/component-library/src/components/dialog/Dialog.module.css b/src/common/component-library/src/components/dialog/Dialog.module.css index bc277f0a..aa65a7a7 100644 --- a/src/common/component-library/src/components/dialog/Dialog.module.css +++ b/src/common/component-library/src/components/dialog/Dialog.module.css @@ -16,13 +16,14 @@ box-sizing: border-box; min-height: 0; animation: dialog-enter 0.2s var(--reveal-animation-timing-function) forwards; + z-index: 11; } .dialog header { z-index: 1; } -:global([data-reach-dialog-overlay]) { +.overlay { background-color: hsla(0, 0%, 0%, 0.33); position: fixed; top: 0; diff --git a/src/common/component-library/src/components/dialog/Dialog.tsx b/src/common/component-library/src/components/dialog/Dialog.tsx index 3c29e99b..3af26283 100644 --- a/src/common/component-library/src/components/dialog/Dialog.tsx +++ b/src/common/component-library/src/components/dialog/Dialog.tsx @@ -1,7 +1,7 @@ import { TranslationFunction } from '@/types/util.type.ts'; import { Button } from '@components/Button'; import { IconGeneralClose } from '@curity/ui-kit-icons'; -import { DialogProps, Dialog as ReachDialog } from '@reach/dialog'; +import * as RadixDialog from '@radix-ui/react-dialog'; import { ReactNode } from 'react'; import styles from './Dialog.module.css'; @@ -14,7 +14,7 @@ export interface CurityDialogProps { showFooter?: boolean; showCloseButton?: boolean; closeDialogOnActionButtonClick?: boolean; - closeCallback?: (event: React.MouseEvent) => void; + closeCallback?: (event?: React.MouseEvent) => void; closeDialogOnCancelButtonClick?: boolean; showActionButton?: boolean; actionButtonText?: string; @@ -24,7 +24,6 @@ export interface CurityDialogProps { showCancelButton?: boolean; cancelButtonText?: string; cancelButtonCallback?: (event: React.MouseEvent) => void; - settings?: Pick; children?: ReactNode; } @@ -48,10 +47,9 @@ export const Dialog = ({ showCancelButton = false, cancelButtonText, cancelButtonCallback, - settings, children, }: CurityDialogProps) => { - const closeDialog = (event: React.MouseEvent) => { + const closeDialog = (event?: React.MouseEvent) => { if (closeCallback) { closeCallback(event); } @@ -80,6 +78,12 @@ export const Dialog = ({ } }; + const handleOpenChange = (open: boolean) => { + if (!open) { + closeDialog(); + } + }; + const closeButtonElement = ( - #parse("fragments/poller") - #parse("consentor/bankid-signing-consentor/handle-auto-start-uri") - #parse("fragments/consentor-signing-app-launcher") -## if the cancel button is clicked then the form is posted with cancelled flag equal to true -## then the backend handles the cancellation of the flow - + #if($!bankidConsentorLaunchVersion2) + #set($bankidKeyPrefix = "authenticator.bankid.service") + #parse("fragments/logger") + #parse("fragments/bankid/bankid-poller") + #parse("consentor/bankid-signing-consentor/bankid-polling-settings") + #parse("fragments/bankid/bankid-app-launcher") + #else + #parse("fragments/poller") + #parse("consentor/bankid-signing-consentor/handle-auto-start-uri") + #parse("fragments/consentor-signing-app-launcher") + ## if the cancel button is clicked then the form is posted with cancelled flag equal to true + ## then the backend handles the cancellation of the flow + + #end ## NOTE: In case the user refreshes the page while this form is shown and polling for status, then any progress will be lost. ## Depending on the context, the browser will show a default pop up message upon refresh, mentioning that any progress ## will be lost if continuing with refresh. Otherwise, the relevant event upon refreshing should be handled in order to diff --git a/src/identity-server/templates/core/consentor/bankid-signing-consentor/bankid-polling-settings.vm b/src/identity-server/templates/core/consentor/bankid-signing-consentor/bankid-polling-settings.vm new file mode 100644 index 00000000..2e17c9c8 --- /dev/null +++ b/src/identity-server/templates/core/consentor/bankid-signing-consentor/bankid-polling-settings.vm @@ -0,0 +1,42 @@ +#* + * Copyright (C) 2026 Curity AB. All rights reserved. + * + * The contents of this file are the property of Curity AB. + * You may not copy or use this file, in either source code + * or executable form, except in compliance with terms + * set by Curity AB. + * + * For further information, please contact Curity AB. + *### + +## Consentor-specific BankID polling settings. +## Parsed after fragments/bankid/bankid-poller which creates the se.curity.bankid namespace. + + diff --git a/src/identity-server/templates/core/authenticator/bankid/launch/bankid-app-launcher.vm b/src/identity-server/templates/core/fragments/bankid/bankid-app-launcher.vm similarity index 61% rename from src/identity-server/templates/core/authenticator/bankid/launch/bankid-app-launcher.vm rename to src/identity-server/templates/core/fragments/bankid/bankid-app-launcher.vm index bb89d5c7..66858353 100644 --- a/src/identity-server/templates/core/authenticator/bankid/launch/bankid-app-launcher.vm +++ b/src/identity-server/templates/core/fragments/bankid/bankid-app-launcher.vm @@ -9,14 +9,31 @@ * For further information, please contact Curity AB. *### +## Shared BankID app launcher fragment. +## Requires: +## Velocity variables: +## $!authncomplete - Whether authentication is already complete +## $!_userCancelled - Whether the user cancelled in the BankID app +## $!bankidNeverAutoStart - Never auto-launch the app (configuration) +## $!_skipAutoLaunch - Skip auto-launch (e.g. user previously cancelled) +## JS object: se.curity.bankid.pollingSettings (defined in a