diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a377e8b..20ced32 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -16,7 +16,7 @@ // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], - "forwardPorts": [27017], + "forwardPorts": [27017, 3000], // Use 'postCreateCommand' to run commands after the container is created. "postCreateCommand": "./setup-nvm.sh && ./fontawesome-npmrc.sh && ./do-yarn.sh && git config --global --add safe.directory /workspace", diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz index 847d24d..072d954 100644 Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ diff --git a/chili-and-cilantro-api/src/controllers/base.ts b/chili-and-cilantro-api/src/controllers/base.ts index ab7fa44..d97583f 100644 --- a/chili-and-cilantro-api/src/controllers/base.ts +++ b/chili-and-cilantro-api/src/controllers/base.ts @@ -44,7 +44,7 @@ export abstract class BaseController { private activeResponse: Response | null = null; public readonly application: IApplication; - protected constructor(application: IApplication) { + public constructor(application: IApplication) { this.application = application; this.router = Router(); this.initializeRoutes(); diff --git a/chili-and-cilantro-api/src/middlewares.ts b/chili-and-cilantro-api/src/middlewares.ts index cf8c9bf..90a1ed2 100644 --- a/chili-and-cilantro-api/src/middlewares.ts +++ b/chili-and-cilantro-api/src/middlewares.ts @@ -42,10 +42,15 @@ export class Middlewares { useDefaults: false, directives: { defaultSrc: ["'self'"], - imgSrc: ["'self'"], + imgSrc: ["'self'", 'https://flagcdn.com'], connectSrc: ["'self'"], scriptSrc: ["'self'", "'unsafe-inline'"], - styleSrc: ["'self'", "'unsafe-inline'"], + styleSrc: [ + "'self'", + "'unsafe-inline'", + 'https://fonts.googleapis.com', + ], + fontSrc: ["'self'", 'https://fonts.gstatic.com'], frameSrc: ["'self'"], }, }, diff --git a/chili-and-cilantro-api/src/routers/api.ts b/chili-and-cilantro-api/src/routers/api.ts index 9c09bca..d2a1a72 100644 --- a/chili-and-cilantro-api/src/routers/api.ts +++ b/chili-and-cilantro-api/src/routers/api.ts @@ -1,5 +1,6 @@ import { IApplication } from '@chili-and-cilantro/chili-and-cilantro-node-lib'; import { GameController } from '../controllers/api/game'; +import { I18nController } from '../controllers/api/i18n'; import { UserController } from '../controllers/api/user'; import { BaseRouter } from './base'; @@ -9,10 +10,13 @@ import { BaseRouter } from './base'; export class ApiRouter extends BaseRouter { private readonly userController: UserController; private readonly gameController: GameController; + private readonly i18nController: I18nController; constructor(application: IApplication) { super(application); this.userController = new UserController(application); this.gameController = new GameController(application); + this.i18nController = new I18nController(application); + this.router.use('/i18n', this.i18nController.router); this.router.use('/user', this.userController.router); this.router.use('/game', this.gameController.router); } diff --git a/chili-and-cilantro-lib/src/index.ts b/chili-and-cilantro-lib/src/index.ts index 09f7b36..472d774 100644 --- a/chili-and-cilantro-lib/src/index.ts +++ b/chili-and-cilantro-lib/src/index.ts @@ -162,6 +162,7 @@ export * from './lib/interfaces/objects/game'; export * from './lib/interfaces/objects/user'; export * from './lib/interfaces/request-user'; export * from './lib/interfaces/round-bids'; +export * from './lib/interfaces/success-message'; export * from './lib/interfaces/token-user'; export * from './lib/language-codes'; export * from './lib/shared-types'; diff --git a/chili-and-cilantro-lib/src/lib/enumerations/string-names.ts b/chili-and-cilantro-lib/src/lib/enumerations/string-names.ts index 0133686..5cc242c 100644 --- a/chili-and-cilantro-lib/src/lib/enumerations/string-names.ts +++ b/chili-and-cilantro-lib/src/lib/enumerations/string-names.ts @@ -5,15 +5,41 @@ * For consistency, the left side should match the right, give or take CamelCase on the left and snake case (e.g. common_blahBlah) on the right */ export enum StringNames { + ChangePassword_ChangePasswordButton = 'changePassword_changePasswordButton', Common_ChangePassword = 'common_changePassword', + Common_CurrentPassword = 'common_currentPassword', + Common_Logo = 'common_logo', + Common_NewPassword = 'common_newPassword', + Common_ConfirmNewPassword = 'common_confirmNewPassword', Common_Dashboard = 'common_dashboard', + Common_Loading = 'common_loading', + Common_ReturnToKitchen = 'common_returnToKitchen', Common_Site = 'common_site', + Common_StartCooking = 'common_startCooking', + Common_Tagline = 'common_tagline', Common_Unauthorized = 'common_unauthorized', Common_UnexpectedError = 'common_unexpectedError', ForgotPassword_Title = 'forgotPassword_title', + KeyFeatures_Title = 'keyFeatures_title', + KeyFeatures_1 = 'keyFeatures_1', + KeyFeatures_2 = 'keyFeatures_2', + KeyFeatures_3 = 'keyFeatures_3', + KeyFeatures_4 = 'keyFeatures_4', + KeyFeatures_5 = 'keyFeatures_5', + KeyFeatures_6 = 'keyFeatures_6', + KeyFeatures_7 = 'keyFeatures_7', + KeyFeatures_8 = 'keyFeatures_8', Login_LoginButton = 'login_loginButton', LogoutButton = 'logoutButton', RegisterButton = 'registerButton', + Splash_Description = 'splash_description', + Splash_HowToPlay = 'splash_howToPlay', ValidationError = 'validationError', Validation_InvalidToken = 'validation_invalidToken', + Validation_PasswordRegexError = 'validation_passwordRegexError', + Validation_CurrentPasswordRequired = 'validation_currentPasswordRequired', + Validation_PasswordsDifferent = 'validation_passwordsDifferent', + Validation_NewPasswordRequired = 'validation_newPasswordRequired', + Validation_PasswordMatch = 'validation_passwordMatch', + Validation_ConfirmNewPassword = 'validation_confirmNewPassword', } diff --git a/chili-and-cilantro-lib/src/lib/interfaces/success-message.ts b/chili-and-cilantro-lib/src/lib/interfaces/success-message.ts new file mode 100644 index 0000000..99e3a01 --- /dev/null +++ b/chili-and-cilantro-lib/src/lib/interfaces/success-message.ts @@ -0,0 +1,4 @@ +export interface ISuccessMessage { + success: boolean; + message: string; +} diff --git a/chili-and-cilantro-lib/src/lib/strings/english-uk.ts b/chili-and-cilantro-lib/src/lib/strings/english-uk.ts index a421696..c559e22 100644 --- a/chili-and-cilantro-lib/src/lib/strings/english-uk.ts +++ b/chili-and-cilantro-lib/src/lib/strings/english-uk.ts @@ -4,17 +4,50 @@ import { StringsCollection } from '../shared-types'; const site = 'Chili and Cilantro'; export const BritishEnglishStrings: StringsCollection = { + [StringNames.ChangePassword_ChangePasswordButton]: 'Change Password', [StringNames.Common_ChangePassword]: 'Change Password', + [StringNames.Common_ConfirmNewPassword]: 'Confirm New Password', + [StringNames.Common_CurrentPassword]: 'Current Password', + [StringNames.Common_NewPassword]: 'New Password', [StringNames.Common_Dashboard]: 'Dashboard', + [StringNames.Common_Loading]: 'Loading...', + [StringNames.Common_Logo]: 'logo', + [StringNames.Common_ReturnToKitchen]: 'Return to Kitchen', [StringNames.Common_Site]: site, + [StringNames.Common_StartCooking]: 'Start Cooking', + [StringNames.Common_Tagline]: 'A Spicy Bluffing Game', [StringNames.Common_Unauthorized]: 'Unauthorized', [StringNames.Common_UnexpectedError]: 'Unexpected Error', [StringNames.ForgotPassword_Title]: 'Forgot Password', + [StringNames.KeyFeatures_Title]: 'Key Features', + [StringNames.KeyFeatures_1]: + 'Exciting bluffing gameplay with a culinary twist', + [StringNames.KeyFeatures_2]: 'Strategic bidding and card placement', + [StringNames.KeyFeatures_3]: 'Quick to learn, challenging to master', + [StringNames.KeyFeatures_4]: 'Supports 2 or more players', + [StringNames.KeyFeatures_5]: 'Rounds of suspenseful card flipping', + [StringNames.KeyFeatures_6]: 'Risk management: avoid the dreaded chili!', + [StringNames.KeyFeatures_7]: + 'First to season two dishes or last chef standing wins', + [StringNames.KeyFeatures_8]: 'Perfect for game nights and family gatherings', [StringNames.Login_LoginButton]: 'Login', [StringNames.LogoutButton]: 'Logout', [StringNames.RegisterButton]: 'Register', + [StringNames.Splash_Description]: + 'In Chili and Cilantro, aspiring chefs compete to create the perfect dish. Your goal is to add just the right amount of cilantro without ruining it with a scorching chili. Be the first to successfully season two dishes or be the last chef standing to win!', + [StringNames.Splash_HowToPlay]: 'How to Play', [StringNames.ValidationError]: 'Validation Error', [StringNames.Validation_InvalidToken]: 'Invalid Token', + [StringNames.Validation_PasswordRegexError]: + 'Password must be at least 8 characters long and include at least one letter, one number, and one special character (!@#$%^&*()_+-=[]{};\':"|,.<>/?)', + [StringNames.Validation_CurrentPasswordRequired]: + 'Current password is required', + [StringNames.Validation_PasswordsDifferent]: + 'New password must be different than the current password', + [StringNames.Validation_NewPasswordRequired]: 'New password is required', + [StringNames.Validation_PasswordMatch]: 'Password and confirm must match', + [StringNames.Validation_ConfirmNewPassword]: + 'Confirm new password is required', }; export default BritishEnglishStrings; diff --git a/chili-and-cilantro-lib/src/lib/strings/english-us.ts b/chili-and-cilantro-lib/src/lib/strings/english-us.ts index a6bf210..a525a96 100644 --- a/chili-and-cilantro-lib/src/lib/strings/english-us.ts +++ b/chili-and-cilantro-lib/src/lib/strings/english-us.ts @@ -4,17 +4,50 @@ import { StringsCollection } from '../shared-types'; const site = 'Chili and Cilantro'; export const AmericanEnglishStrings: StringsCollection = { + [StringNames.ChangePassword_ChangePasswordButton]: 'Change Password', [StringNames.Common_ChangePassword]: 'Change Password', + [StringNames.Common_ConfirmNewPassword]: 'Confirm New Password', + [StringNames.Common_CurrentPassword]: 'Current Password', + [StringNames.Common_NewPassword]: 'New Password', [StringNames.Common_Dashboard]: 'Dashboard', + [StringNames.Common_Loading]: 'Loading...', + [StringNames.Common_Logo]: 'logo', + [StringNames.Common_ReturnToKitchen]: 'Return to Kitchen', [StringNames.Common_Site]: site, + [StringNames.Common_StartCooking]: 'Start Cooking', + [StringNames.Common_Tagline]: 'A Spicy Bluffing Game', [StringNames.Common_Unauthorized]: 'Unauthorized', [StringNames.Common_UnexpectedError]: 'Unexpected Error', [StringNames.ForgotPassword_Title]: 'Forgot Password', + [StringNames.KeyFeatures_Title]: 'Key Features', + [StringNames.KeyFeatures_1]: + 'Exciting bluffing gameplay with a culinary twist', + [StringNames.KeyFeatures_2]: 'Strategic bidding and card placement', + [StringNames.KeyFeatures_3]: 'Quick to learn, challenging to master', + [StringNames.KeyFeatures_4]: 'Supports 2 or more players', + [StringNames.KeyFeatures_5]: 'Rounds of suspenseful card flipping', + [StringNames.KeyFeatures_6]: 'Risk management: avoid the dreaded chili!', + [StringNames.KeyFeatures_7]: + 'First to season two dishes or last chef standing wins', + [StringNames.KeyFeatures_8]: 'Perfect for game nights and family gatherings', [StringNames.Login_LoginButton]: 'Login', [StringNames.LogoutButton]: 'Logout', [StringNames.RegisterButton]: 'Register', + [StringNames.Splash_Description]: + 'In Chili and Cilantro, aspiring chefs compete to create the perfect dish. Your goal is to add just the right amount of cilantro without ruining it with a scorching chili. Be the first to successfully season two dishes or be the last chef standing to win!', + [StringNames.Splash_HowToPlay]: 'How to Play', [StringNames.ValidationError]: 'Validation Error', [StringNames.Validation_InvalidToken]: 'Invalid Token', + [StringNames.Validation_PasswordRegexError]: + 'Password must be at least 8 characters long and include at least one letter, one number, and one special character (!@#$%^&*()_+-=[]{};\':"|,.<>/?)', + [StringNames.Validation_CurrentPasswordRequired]: + 'Current password is required', + [StringNames.Validation_PasswordsDifferent]: + 'New password must be different than the current password', + [StringNames.Validation_NewPasswordRequired]: 'New password is required', + [StringNames.Validation_PasswordMatch]: 'Password and confirm must match', + [StringNames.Validation_ConfirmNewPassword]: + 'Confirm new password is required', }; export default AmericanEnglishStrings; diff --git a/chili-and-cilantro-lib/src/lib/strings/french.ts b/chili-and-cilantro-lib/src/lib/strings/french.ts index f9a527e..c72b4e0 100644 --- a/chili-and-cilantro-lib/src/lib/strings/french.ts +++ b/chili-and-cilantro-lib/src/lib/strings/french.ts @@ -4,17 +4,55 @@ import { StringsCollection } from '../shared-types'; const site = 'Piment et Coriandre'; export const FrenchStrings: StringsCollection = { + [StringNames.ChangePassword_ChangePasswordButton]: 'Changer le mot de passe', [StringNames.Common_ChangePassword]: 'Changer le mot de passe', + [StringNames.Common_ConfirmNewPassword]: 'Confirmer le nouveau mot de passe', + [StringNames.Common_CurrentPassword]: 'Mot de passe actuel', + [StringNames.Common_NewPassword]: 'Nouveau mot de passe', [StringNames.Common_Dashboard]: 'Tableau de bord', + [StringNames.Common_Loading]: 'Chargement...', + [StringNames.Common_Logo]: 'logo', + [StringNames.Common_ReturnToKitchen]: 'Retour à la Cuisine', [StringNames.Common_Site]: site, + [StringNames.Common_StartCooking]: 'Commencer la Cuisine', + [StringNames.Common_Tagline]: 'Un Jeu de Bluff Épicé', [StringNames.Common_Unauthorized]: 'Non autorisé', [StringNames.Common_UnexpectedError]: 'Erreur inattendue', [StringNames.ForgotPassword_Title]: 'Mot de passe oublié', + [StringNames.KeyFeatures_Title]: 'Caractéristiques Principales', + [StringNames.KeyFeatures_1]: + 'Un jeu de bluff passionnant avec une touche culinaire', + [StringNames.KeyFeatures_2]: 'Enchères stratégiques et placement de cartes', + [StringNames.KeyFeatures_3]: 'Rapide à apprendre, difficile à maîtriser', + [StringNames.KeyFeatures_4]: 'Prend en charge 2 joueurs ou plus', + [StringNames.KeyFeatures_5]: + 'Rondes de retournement de cartes pleines de suspense', + [StringNames.KeyFeatures_6]: + 'Gestion des risques : évitez le redoutable chili !', + [StringNames.KeyFeatures_7]: + 'Le premier à assaisonner deux plats ou le dernier chef debout gagne', + [StringNames.KeyFeatures_8]: + 'Parfait pour les soirées de jeux et les réunions de famille', [StringNames.Login_LoginButton]: 'Connexion', [StringNames.LogoutButton]: 'Déconnexion', [StringNames.RegisterButton]: "S'inscrire", + [StringNames.Splash_Description]: + "Dans Chili and Cilantro, les chefs en herbe rivalisent pour créer le plat parfait. Votre objectif est d'ajouter juste la bonne quantité de coriandre sans gâcher le tout avec un piment brûlant. Soyez le premier à réussir à assaisonner deux plats ou soyez le dernier chef debout pour gagner !", + [StringNames.Splash_HowToPlay]: 'Comment Jouer', [StringNames.ValidationError]: 'Erreur de validation', [StringNames.Validation_InvalidToken]: 'Jeton invalide', + [StringNames.Validation_PasswordRegexError]: + 'Le mot de passe doit comporter au moins 8 caractères et inclure au moins une lettre, un chiffre et un caractère spécial (!@#$%^&*()_+-=[]{};\':"|,.<>/?)', + [StringNames.Validation_CurrentPasswordRequired]: + 'Le mot de passe actuel est requis', + [StringNames.Validation_PasswordsDifferent]: + 'Le nouveau mot de passe doit être différent du mot de passe actuel', + [StringNames.Validation_NewPasswordRequired]: + 'Le nouveau mot de passe est requis', + [StringNames.Validation_PasswordMatch]: + 'Le mot de passe et la confirmation doivent correspondre', + [StringNames.Validation_ConfirmNewPassword]: + 'La confirmation du nouveau mot de passe est requise', }; export default FrenchStrings; diff --git a/chili-and-cilantro-lib/src/lib/strings/mandarin.ts b/chili-and-cilantro-lib/src/lib/strings/mandarin.ts index 56d3962..b5b90e0 100644 --- a/chili-and-cilantro-lib/src/lib/strings/mandarin.ts +++ b/chili-and-cilantro-lib/src/lib/strings/mandarin.ts @@ -4,17 +4,45 @@ import { StringsCollection } from '../shared-types'; const site = '辣椒和香菜'; export const MandarinStrings: StringsCollection = { + [StringNames.ChangePassword_ChangePasswordButton]: '更改密码', [StringNames.Common_ChangePassword]: '更改密码', + [StringNames.Common_ConfirmNewPassword]: '确认新密码', + [StringNames.Common_CurrentPassword]: '当前密码', + [StringNames.Common_NewPassword]: '新密码', [StringNames.Common_Dashboard]: '仪表板', + [StringNames.Common_Loading]: '加载中...', + [StringNames.Common_Logo]: '标志', + [StringNames.Common_ReturnToKitchen]: '返回厨房', [StringNames.Common_Site]: site, + [StringNames.Common_StartCooking]: '开始烹饪', + [StringNames.Common_Tagline]: '一款辛辣的虚张声势游戏', [StringNames.Common_Unauthorized]: '未经授权', [StringNames.Common_UnexpectedError]: '意外错误', [StringNames.ForgotPassword_Title]: '忘记密码', + [StringNames.KeyFeatures_Title]: '主要特点', + [StringNames.KeyFeatures_1]: '令人兴奋的虚张声势游戏,带有烹饪的扭曲', + [StringNames.KeyFeatures_2]: '战略性出价和卡片放置', + [StringNames.KeyFeatures_3]: '易学,难以掌握', + [StringNames.KeyFeatures_4]: '支持2个或更多玩家', + [StringNames.KeyFeatures_5]: '一轮轮充满悬念的纸牌游戏', + [StringNames.KeyFeatures_6]: '风险管理:避免可怕的辣椒!', + [StringNames.KeyFeatures_7]: '首先调味两道菜或最后一位厨师站起来赢得胜利', + [StringNames.KeyFeatures_8]: '适合游戏之夜和家庭聚会', [StringNames.Login_LoginButton]: '登录', [StringNames.LogoutButton]: '注销', [StringNames.RegisterButton]: '注册', + [StringNames.Splash_Description]: + '在《辣椒和香菜》中,有抱负的厨师们竞相制作完美的菜肴。你的目标是添加适量的香菜,而不会让辣椒烧焦。成为第一个成功调味两道菜的人,或者成为最后一个获胜的厨师', + [StringNames.Splash_HowToPlay]: '如何玩', [StringNames.ValidationError]: '验证错误', [StringNames.Validation_InvalidToken]: '无效令牌', + [StringNames.Validation_PasswordRegexError]: + '密码必须至少8个字符长且包含至少一个字母、一个数字和一个特殊字符(!@#$%^&*()_+-=[]{};:"|,.<>/?)', + [StringNames.Validation_CurrentPasswordRequired]: '当前密码是必需的', + [StringNames.Validation_PasswordsDifferent]: '新密码必须不同于当前密码', + [StringNames.Validation_NewPasswordRequired]: '新密码是必需的', + [StringNames.Validation_PasswordMatch]: '密码和确认必须匹配', + [StringNames.Validation_ConfirmNewPassword]: '确认新密码是必需的', }; export default MandarinStrings; diff --git a/chili-and-cilantro-lib/src/lib/strings/spanish.ts b/chili-and-cilantro-lib/src/lib/strings/spanish.ts index 9258a50..e6a73dc 100644 --- a/chili-and-cilantro-lib/src/lib/strings/spanish.ts +++ b/chili-and-cilantro-lib/src/lib/strings/spanish.ts @@ -4,17 +4,53 @@ import { StringsCollection } from '../shared-types'; const site = 'Chili y Cilantro'; export const SpanishStrings: StringsCollection = { + [StringNames.ChangePassword_ChangePasswordButton]: 'Cambiar contraseña', [StringNames.Common_ChangePassword]: 'Cambiar contraseña', + [StringNames.Common_ConfirmNewPassword]: 'Confirmar nueva contraseña', + [StringNames.Common_CurrentPassword]: 'Contraseña actual', + [StringNames.Common_NewPassword]: 'Nueva contraseña', [StringNames.Common_Dashboard]: 'Tablero', + [StringNames.Common_Loading]: 'Cargando...', + [StringNames.Common_Logo]: 'logo', + [StringNames.Common_ReturnToKitchen]: 'Volver a la Cocina', [StringNames.Common_Site]: site, + [StringNames.Common_StartCooking]: 'Comenzar a cocinar', + [StringNames.Common_Tagline]: 'Un Juego de Bluff Picante', [StringNames.Common_Unauthorized]: 'No autorizado', [StringNames.Common_UnexpectedError]: 'Error inesperado', [StringNames.ForgotPassword_Title]: 'Contraseña olvidada', + [StringNames.KeyFeatures_Title]: 'Características Clave', + [StringNames.KeyFeatures_1]: + 'Emocionante juego de faroleo con un toque culinario', + [StringNames.KeyFeatures_2]: 'Pujas estratégicas y colocación de cartas', + [StringNames.KeyFeatures_3]: 'Rápido de aprender, desafiante de dominar', + [StringNames.KeyFeatures_4]: 'Admite 2 o más jugadores', + [StringNames.KeyFeatures_5]: 'Rondas de volteo de cartas llenas de suspenso', + [StringNames.KeyFeatures_6]: 'Gestión de riesgos: ¡evita el temido chile!', + [StringNames.KeyFeatures_7]: + 'El primero en condimentar dos platos o el último chef en pie gana', + [StringNames.KeyFeatures_8]: + 'Perfecto para noches de juegos y reuniones familiares', [StringNames.Login_LoginButton]: 'Iniciar sesión', [StringNames.LogoutButton]: 'Cerrar sesión', [StringNames.RegisterButton]: 'Registrarse', + [StringNames.Splash_Description]: + 'En Chili and Cilantro, los aspirantes a chef compiten para crear el plato perfecto. Tu objetivo es agregar la cantidad justa de cilantro sin arruinarlo con un chile abrasador. ¡Sé el primero en condimentar con éxito dos platos o sé el último chef en pie para ganar!', + [StringNames.Splash_HowToPlay]: 'Como Jugar', [StringNames.ValidationError]: 'Error de validación', [StringNames.Validation_InvalidToken]: 'Token inválido', + [StringNames.Validation_PasswordRegexError]: + 'La contraseña debe tener al menos 8 caracteres y incluir al menos una letra, un número y un carácter especial (!@#$%^&*()_+-=[]{};\':"|,.<>/?)', + [StringNames.Validation_CurrentPasswordRequired]: + 'Se requiere la contraseña actual', + [StringNames.Validation_PasswordsDifferent]: + 'La nueva contraseña debe ser diferente a la contraseña actual', + [StringNames.Validation_NewPasswordRequired]: + 'Se requiere la nueva contraseña', + [StringNames.Validation_PasswordMatch]: + 'La contraseña y la confirmación deben coincidir', + [StringNames.Validation_ConfirmNewPassword]: + 'Se requiere la confirmación de la nueva contraseña', }; export default SpanishStrings; diff --git a/chili-and-cilantro-lib/src/lib/strings/ukrainian.ts b/chili-and-cilantro-lib/src/lib/strings/ukrainian.ts index 3e08af7..4df8cec 100644 --- a/chili-and-cilantro-lib/src/lib/strings/ukrainian.ts +++ b/chili-and-cilantro-lib/src/lib/strings/ukrainian.ts @@ -4,17 +4,52 @@ import { StringsCollection } from '../shared-types'; const site = 'Чілі та Коріандр'; export const UkrainianStrings: StringsCollection = { + [StringNames.ChangePassword_ChangePasswordButton]: 'Змінити пароль', [StringNames.Common_ChangePassword]: 'Змінити пароль', + [StringNames.Common_ConfirmNewPassword]: 'Підтвердити новий пароль', + [StringNames.Common_CurrentPassword]: 'Поточний пароль', + [StringNames.Common_NewPassword]: 'Новий пароль', [StringNames.Common_Dashboard]: 'Панель', + [StringNames.Common_Loading]: 'Завантаження...', + [StringNames.Common_Logo]: 'лого', + [StringNames.Common_ReturnToKitchen]: 'Повернутися на Кухню', [StringNames.Common_Site]: site, + [StringNames.Common_StartCooking]: 'Почати приготування', + [StringNames.Common_Tagline]: 'Пікантний Блеф', [StringNames.Common_Unauthorized]: 'Немає авторизації', [StringNames.Common_UnexpectedError]: 'Неочікувана помилка', [StringNames.ForgotPassword_Title]: 'Забули пароль', + [StringNames.KeyFeatures_Title]: 'Ключові Жарактеристики', + [StringNames.KeyFeatures_1]: + 'Захоплюючий геймплей блефу з кулінарним родзинкою', + [StringNames.KeyFeatures_2]: 'Стратегічні ставки та розміщення карток', + [StringNames.KeyFeatures_3]: 'Швидко навчатися, складно освоїти', + [StringNames.KeyFeatures_4]: 'Підтримує 2 або більше гравців', + [StringNames.KeyFeatures_5]: 'Раунди напруженого гортання карт', + [StringNames.KeyFeatures_6]: 'Управління ризиками: уникайте страшного чилі!', + [StringNames.KeyFeatures_7]: + 'Перемагає перший, хто приправив дві страви, або останній шеф-кухар', + [StringNames.KeyFeatures_8]: + 'Ідеально підходить для вечірніх ігор і сімейних зустрічей', [StringNames.Login_LoginButton]: 'Увійти', [StringNames.LogoutButton]: 'Вийти', [StringNames.RegisterButton]: 'Зареєструватися', + [StringNames.Splash_Description]: + 'У Chili and Cilantro починаючі кухарі змагаються, щоб створити ідеальну страву. Ваша мета — додати потрібну кількість кінзи, не зіпсувавши її пекучим чилі. Будьте першим, хто успішно приправить дві страви, або будьте останнім шеф-кухарем, який виграє!', + [StringNames.Splash_HowToPlay]: 'Як Грати', [StringNames.ValidationError]: 'Помилка валідації', [StringNames.Validation_InvalidToken]: 'Недійсний токен', + [StringNames.Validation_PasswordRegexError]: + 'Пароль повинен містити принаймні 8 символів, включаючи принаймні одну літеру, одну цифру та один спеціальний символ (!@#$%^&*()_+-=[]{};\':"|,.<>/?)', + [StringNames.Validation_CurrentPasswordRequired]: + 'Поточний пароль є обов’язковим', + [StringNames.Validation_PasswordsDifferent]: + 'Новий пароль повинен відрізнятися від поточного', + [StringNames.Validation_NewPasswordRequired]: 'Новий пароль є обов’язковим', + [StringNames.Validation_PasswordMatch]: + 'Пароль та підтвердження повинні співпадати', + [StringNames.Validation_ConfirmNewPassword]: + 'Підтвердження нового пароля є обов’язковим', }; export default UkrainianStrings; diff --git a/chili-and-cilantro-react/src/app/app.tsx b/chili-and-cilantro-react/src/app/app.tsx index 4b34d2c..0a1b534 100644 --- a/chili-and-cilantro-react/src/app/app.tsx +++ b/chili-and-cilantro-react/src/app/app.tsx @@ -14,6 +14,7 @@ import PrivateRoute from './components/private-route'; import RegisterPage from './components/register-page'; import SplashPage from './components/splash-page'; import TopMenu from './components/top-menu'; +import TranslatedTitle from './components/translated-title'; import VerifyEmailPage from './components/verify-email-page'; import { TranslationProvider } from './i18n-provider'; import { MenuProvider } from './menu-context'; @@ -22,6 +23,7 @@ import { UserProvider } from './user-context'; const App: FC = () => { return ( + diff --git a/chili-and-cilantro-react/src/app/auth-provider.tsx b/chili-and-cilantro-react/src/app/auth-provider.tsx index 59f205c..8b753d1 100644 --- a/chili-and-cilantro-react/src/app/auth-provider.tsx +++ b/chili-and-cilantro-react/src/app/auth-provider.tsx @@ -1,4 +1,10 @@ -import { IRequestUser } from '@chili-and-cilantro/chili-and-cilantro-lib'; +import { + GlobalLanguageContext, + IRequestUser, + ISuccessMessage, + LanguageCodes, + StringLanguages, +} from '@chili-and-cilantro/chili-and-cilantro-lib'; import { isAxiosError } from 'axios'; import { createContext, @@ -10,7 +16,9 @@ import { useState, } from 'react'; import { useNavigate } from 'react-router-dom'; +import i18n from './i18n'; import authService from './services/auth-service'; +import api from './services/authenticated-api'; export interface AuthContextData { user: IRequestUser | null; @@ -26,10 +34,13 @@ export interface AuthContextData { changePassword: ( currentPassword: string, newPassword: string, - ) => Promise<{ success: boolean; message: string }>; + ) => Promise; verifyToken: (token: string) => Promise; checkAuth: () => void; authState: number; + language: StringLanguages; + setUser: (user: IRequestUser | null) => void; + setLanguage: (lang: StringLanguages) => void; } export type AuthProviderProps = { @@ -48,6 +59,26 @@ export const AuthProvider = ({ children }: AuthProviderProps) => { const [authState, setAuthState] = useState(0); const navigate = useNavigate(); + const [language, setLanguage] = useState(() => { + return ( + (localStorage.getItem('language') as StringLanguages) ?? + StringLanguages.EnglishUS + ); + }); + + useEffect(() => { + if (user && user.siteLanguage) { + setLanguage(user.siteLanguage); + } + }, [user]); + + useEffect(() => { + (async () => { + await i18n.changeLanguage(LanguageCodes[language]); + localStorage.setItem('language', language); + })(); + }, [language]); + const checkAuth = useCallback(async () => { const token = localStorage.getItem('authToken'); if (!token) { @@ -140,7 +171,7 @@ export const AuthProvider = ({ children }: AuthProviderProps) => { async ( currentPassword: string, newPassword: string, - ): Promise<{ success: boolean; message: string }> => { + ): Promise => { try { await authService.changePassword(currentPassword, newPassword); // Handle success (e.g., show a message) @@ -164,20 +195,32 @@ export const AuthProvider = ({ children }: AuthProviderProps) => { [], ); - const contextValue = useMemo( - () => ({ - user, - isAuthenticated, - loading, - error, - changePassword, - login, - logout, - verifyToken, - checkAuth, - authState, - }), - [ + const contextValue = useMemo(() => { + const setUserAndLanguage = (newUser: IRequestUser | null) => { + setUser(newUser); + if (newUser && newUser.siteLanguage) { + setLanguage(newUser.siteLanguage); + } + setIsAuthenticated(!!newUser); + }; + + const setLanguageAndUpdateUser = (newLanguage: StringLanguages) => { + setLanguage(newLanguage); + GlobalLanguageContext.language = newLanguage; + if (user) { + try { + // Make API call to update user language + api.post('/api/user/language', { language: newLanguage }).then(() => { + console.log('User language updated'); + }); + setUser({ ...user, siteLanguage: newLanguage }); + } catch (error) { + console.error('Failed to update user language:', error); + } + } + }; + + return { user, isAuthenticated, loading, @@ -188,8 +231,23 @@ export const AuthProvider = ({ children }: AuthProviderProps) => { verifyToken, checkAuth, authState, - ], - ); + setUser: setUserAndLanguage, + language, + setLanguage: setLanguageAndUpdateUser, + }; + }, [ + user, + isAuthenticated, + loading, + error, + changePassword, + login, + logout, + verifyToken, + checkAuth, + authState, + language, + ]); return ( {children} diff --git a/chili-and-cilantro-react/src/app/components/change-password-page.tsx b/chili-and-cilantro-react/src/app/components/change-password-page.tsx index be34dd9..cb5b133 100644 --- a/chili-and-cilantro-react/src/app/components/change-password-page.tsx +++ b/chili-and-cilantro-react/src/app/components/change-password-page.tsx @@ -1,61 +1,99 @@ -import { constants } from '@chili-and-cilantro/chili-and-cilantro-lib'; -import { Box, Button, Container, TextField, Typography } from '@mui/material'; +import { + constants, + StringNames, +} from '@chili-and-cilantro/chili-and-cilantro-lib'; +import { + Alert, + Box, + Button, + Container, + TextField, + Typography, +} from '@mui/material'; import { useFormik } from 'formik'; -import React, { useState } from 'react'; +import { FC, useContext, useState } from 'react'; +import { Navigate } from 'react-router-dom'; import * as Yup from 'yup'; -import api from '../services/api'; +import { AuthContext } from '../auth-provider'; +import { useAppTranslation } from '../i18n-provider'; -interface FormValues { - currentPassword: string; - newPassword: string; - confirmNewPassword: string; -} +const ChangePasswordPage: FC = () => { + const { isAuthenticated, user, loading, changePassword } = + useContext(AuthContext); + const [successMessage, setSuccessMessage] = useState(null); + const [errorMessage, setErrorMessage] = useState(null); + const { t } = useAppTranslation(); -const ChangePasswordPage: React.FC = () => { - const [successMessage, setSuccessMessage] = useState(''); - const [errorMessage, setErrorMessage] = useState(''); + const validationSchema = Yup.object({ + currentPassword: Yup.string() + .matches( + constants.PASSWORD_REGEX, + t(StringNames.Validation_PasswordRegexError), + ) + .required(t(StringNames.Validation_CurrentPasswordRequired)), + newPassword: Yup.string() + .matches( + constants.PASSWORD_REGEX, + t(StringNames.Validation_PasswordRegexError), + ) + .notOneOf( + [Yup.ref('currentPassword')], + t(StringNames.Validation_PasswordsDifferent), + ) + .required(t(StringNames.Validation_NewPasswordRequired)), + confirmNewPassword: Yup.string() + .oneOf([Yup.ref('newPassword')], t(StringNames.Validation_PasswordMatch)) + .required(t(StringNames.Validation_ConfirmNewPassword)), + }); - const formik = useFormik({ + const formik = useFormik({ initialValues: { currentPassword: '', newPassword: '', confirmNewPassword: '', }, - validationSchema: Yup.object({ - currentPassword: Yup.string().required('Required'), - newPassword: Yup.string() - .matches(constants.PASSWORD_REGEX, constants.PASSWORD_REGEX_ERROR) - .required('Required'), - confirmNewPassword: Yup.string() - .oneOf([Yup.ref('newPassword')], 'Passwords must match') - .required('Required'), - }), + validationSchema, onSubmit: async (values, { setSubmitting, resetForm }) => { try { - const response = await api.post('/user/change-password', { - currentPassword: values.currentPassword, - newPassword: values.newPassword, - }); - setSuccessMessage('Password changed successfully'); - setErrorMessage(''); - resetForm(); - } catch (error) { - if (error instanceof Error) { - setErrorMessage( - error.message || 'An error occurred while changing the password', - ); + const result = await changePassword( + values.currentPassword, + values.newPassword, + ); + if (result.success) { + setSuccessMessage(result.message); + setErrorMessage(null); + resetForm(); + } + } catch (err) { + console.error('Error changing password:', err); + if (err instanceof Error) { + setErrorMessage(err.message); } else { - setErrorMessage('An unexpected error occurred'); + setErrorMessage(t(StringNames.Common_UnexpectedError)); } - setSuccessMessage(''); + setSuccessMessage(null); } finally { setSubmitting(false); } }, }); + if (loading) { + return ( + + + {t(StringNames.Common_Loading)}... + + + ); + } + + if (!isAuthenticated || !user) { + return ; + } + return ( - + { }} > - Change Password + {t(StringNames.Common_ChangePassword)} { required fullWidth name="newPassword" - label="New Password" + label={t(StringNames.Common_NewPassword)} type="password" id="newPassword" autoComplete="new-password" @@ -115,7 +152,7 @@ const ChangePasswordPage: React.FC = () => { required fullWidth name="confirmNewPassword" - label="Confirm New Password" + label={t(StringNames.Common_ConfirmNewPassword)} type="password" id="confirmNewPassword" autoComplete="new-password" @@ -131,6 +168,16 @@ const ChangePasswordPage: React.FC = () => { formik.errors.confirmNewPassword } /> + {successMessage && ( + + {successMessage} + + )} + {errorMessage && ( + + {errorMessage} + + )} - {successMessage && ( - - {successMessage} - - )} - {errorMessage && ( - - {errorMessage} - - )} ); diff --git a/chili-and-cilantro-react/src/app/components/dashboard-page.scss b/chili-and-cilantro-react/src/app/components/dashboard-page.scss deleted file mode 100644 index 8b49403..0000000 --- a/chili-and-cilantro-react/src/app/components/dashboard-page.scss +++ /dev/null @@ -1,52 +0,0 @@ -@use '../../styles' as *; - -// Dashboard styles -.dashboard-container { - max-width: 800px; - margin: 2rem auto; - padding: 2rem; - background-color: $light-color; - border-radius: 8px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); -} - -.dashboard-content { - display: flex; - flex-direction: column; - gap: 1.5rem; -} - -.dashboard-title { - text-align: center; - margin-bottom: 2rem; - color: $primary-color; -} - -.create-game-button { - align-self: center; - margin-top: 1rem; -} - -.game-list { - h2 { - color: $primary-color; - margin-bottom: 1rem; - } - - ul { - list-style-type: none; - padding: 0; - } - - li { - margin-bottom: 0.5rem; - } - - a { - color: $text-color; - text-decoration: none; - &:hover { - text-decoration: underline; - } - } -} diff --git a/chili-and-cilantro-react/src/app/components/dashboard-page.tsx b/chili-and-cilantro-react/src/app/components/dashboard-page.tsx index 65b6d02..a324820 100644 --- a/chili-and-cilantro-react/src/app/components/dashboard-page.tsx +++ b/chili-and-cilantro-react/src/app/components/dashboard-page.tsx @@ -1,9 +1,19 @@ +import { + Box, + Button, + CircularProgress, + Container, + List, + ListItem, + ListItemText, + Paper, + Typography, +} from '@mui/material'; import { isAxiosError } from 'axios'; import React, { memo, useCallback, useEffect, useState } from 'react'; -import { Link, useNavigate } from 'react-router-dom'; +import { Link as RouterLink, useNavigate } from 'react-router-dom'; import { useAuth } from '../auth-provider'; import api from '../services/authenticated-api'; -import './dashboard-page.scss'; interface Game { _id: string; @@ -39,43 +49,71 @@ const DashboardPage: React.FC = () => { }, [isAuthenticated, user, navigate]); useEffect(() => { - (async () => { - await fetchGames(); - })(); - }, [fetchGames, isAuthenticated, user]); + fetchGames(); + }, [fetchGames]); if (isLoading) { - return
Loading dashboard data...
; + return ( + + + + ); } const renderGameList = (games: Game[], title: string) => ( -
-

{title}

+ + + {title} + {games.length === 0 ? ( -

No games available.

+ No games available. ) : ( -
    + {games.map((game) => ( -
  • - {game.name} -
  • + + + ))} -
+ )} -
+ ); return ( -
-
-

Your Dashboard

+ + + + Your Dashboard + {renderGameList(participatingGames, "Games You're Participating In")} {renderGameList(createdGames, "Games You've Created")} - - Create New Game - -
-
+ + + + +
); }; diff --git a/chili-and-cilantro-react/src/app/components/flag.tsx b/chili-and-cilantro-react/src/app/components/flag.tsx new file mode 100644 index 0000000..654f433 --- /dev/null +++ b/chili-and-cilantro-react/src/app/components/flag.tsx @@ -0,0 +1,51 @@ +import { + LanguageFlags, + StringLanguages, +} from '@chili-and-cilantro/chili-and-cilantro-lib'; +import { Box, SxProps, Theme } from '@mui/material'; +import { FC } from 'react'; + +export interface FlagProps { + language: StringLanguages; + sx?: SxProps; +} + +/** + * A simple component to display a flag icon for a given language. + * + * Props: + * language: The language to display a flag for, as a StringLanguages enum value. + * sx: Optional styles to apply to the component. + * + * Returns a Box component with an SVG flag icon from flagcdn.com as a ::before pseudo-element. + * The flag is sized to 1.5rem by default, but can be overridden by passing a custom sx prop. + * The component also includes an aria-label for accessibility, set to `Flag for `. + */ +export const Flag: FC = ({ language, sx }) => { + if (!LanguageFlags[language]) { + return null; + } + const flagContent = LanguageFlags[language]; + return ( + + ); +}; diff --git a/chili-and-cilantro-react/src/app/components/splash-page.scss b/chili-and-cilantro-react/src/app/components/splash-page.scss deleted file mode 100644 index 8c98e67..0000000 --- a/chili-and-cilantro-react/src/app/components/splash-page.scss +++ /dev/null @@ -1,120 +0,0 @@ -@use 'sass:color'; -@use '../../styles' as *; - -// Splash Page styles -.splash-container { - max-width: 800px; - margin: 2rem auto; - padding: 2rem; - background-color: $background-color; - border-radius: 10px; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.7); // Strong shadow for depth - color: $text-color-light; // Light text for readability - text-align: center; - - .splash-logo { - max-width: 70%; - margin-bottom: 1.5rem; - } - - .splash-subdescription { - font-size: 1.6rem; - color: $highlight-color; // Bright green for emphasis - font-family: $font-family; - margin-bottom: 2rem; - } - - .feature-list { - text-align: left; - - .feature-title { - color: $highlight-color; - font-family: $font-secondary; - font-size: 1.8rem; - margin-bottom: 1rem; - text-align: center; - } - - .feature-bullets { - list-style-type: disc; - padding-left: 2rem; - - li { - font-size: 1.2rem; - color: $text-color-muted; - margin-bottom: 0.75rem; - - &:hover { - color: $text-color-light; - transition: color 0.3s ease; - } - } - } - } - - .game-description { - background-color: color.adjust( - $new-dark, - $lightness: 10% - ); // Slightly lighter dark background - padding: 1.5rem; - border-radius: 8px; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.5); // Subtle shadow for depth - margin-bottom: 2rem; - - h3 { - font-family: $font-family; - color: $highlight-color; // Bright green for headers - font-size: 1.5rem; - margin-bottom: 1rem; - } - - p { - color: $text-color-light; // Light text for better contrast - font-family: $font-family; - line-height: 1.8; // Improve readability with increased line spacing - font-size: 1.2rem; // Slightly larger font size - margin: 0; - - // Optional: Highlight keywords - span { - color: $highlight-color; // Use bright green for emphasis - font-weight: bold; - } - } - } - - .cta-container { - display: flex; - justify-content: center; - gap: 1rem; - - .btn { - display: inline-block; - padding: 0.75rem 1.5rem; - font-size: 1rem; - border-radius: 8px; - text-decoration: none; - text-align: center; - transition: background-color 0.3s ease; - - &-primary { - background-color: $new-gray; - color: $new-dark; - - &:hover { - background-color: $new-red; - } - } - - &-secondary { - background-color: $new-gray; - color: $new-dark; - - &:hover { - background-color: color.scale($new-lightGreen, $lightness: -10%); - } - } - } - } -} diff --git a/chili-and-cilantro-react/src/app/components/splash-page.tsx b/chili-and-cilantro-react/src/app/components/splash-page.tsx index cb3bad8..dd4ae2a 100644 --- a/chili-and-cilantro-react/src/app/components/splash-page.tsx +++ b/chili-and-cilantro-react/src/app/components/splash-page.tsx @@ -1,52 +1,92 @@ -import React from 'react'; -import { Link } from 'react-router-dom'; +import { StringNames } from '@chili-and-cilantro/chili-and-cilantro-lib'; +import { + Box, + Button, + Container, + List, + ListItem, + ListItemText, + styled, + Typography, +} from '@mui/material'; +import React, { memo } from 'react'; +import { Link as RouterLink } from 'react-router-dom'; import chiliCilantroLogo from '../../assets/images/Chili-and-Cilantro-logo.png'; -import './splash-page.scss'; +import { useAppTranslation } from '../i18n-provider'; + +const StyledImage = styled('img')({ + width: '60%', + maxWidth: '1035px', + height: 'auto', +}); const SplashPage: React.FC = () => { + const { t } = useAppTranslation(); return ( -
- Chili and Cilantro -

A Spicy Bluffing Game

-
-

- Key Features: -

-
    -
  • Exciting bluffing gameplay with a culinary twist
  • -
  • Strategic bidding and card placement
  • -
  • Quick to learn, challenging to master
  • -
  • Supports 2 or more players
  • -
  • Rounds of suspenseful card flipping
  • -
  • Risk management: avoid the dreaded chili!
  • -
  • First to season two dishes or last chef standing wins
  • -
  • Perfect for game nights and family gatherings
  • -
-
-
-

How to Play:

-

- In Chili and Cilantro, aspiring chefs compete to create the perfect - dish. Your goal is to add just the right amount of cilantro without - ruining it with a scorching chili. Be the first to successfully season - two dishes or be the last chef standing to win! -

-
-
- - Start Cooking! - - - Return to Kitchen - -
-
+ + + + + {t(StringNames.Common_Tagline)} + + + + + {t(StringNames.KeyFeatures_Title)}: + + + {[ + t(StringNames.KeyFeatures_1), + t(StringNames.KeyFeatures_2), + t(StringNames.KeyFeatures_3), + t(StringNames.KeyFeatures_4), + t(StringNames.KeyFeatures_5), + t(StringNames.KeyFeatures_6), + t(StringNames.KeyFeatures_7), + t(StringNames.KeyFeatures_8), + ].map((feature, index) => ( + + + + ))} + + + + + + {t(StringNames.Splash_HowToPlay)}: + + {t(StringNames.Splash_Description)} + + + + + + + + ); }; -export default SplashPage; +export default memo(SplashPage); diff --git a/chili-and-cilantro-react/src/app/components/top-menu.tsx b/chili-and-cilantro-react/src/app/components/top-menu.tsx index b2aee48..3459773 100644 --- a/chili-and-cilantro-react/src/app/components/top-menu.tsx +++ b/chili-and-cilantro-react/src/app/components/top-menu.tsx @@ -1,142 +1,82 @@ -import { faPepperHot, faUserCircle } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import React, { useEffect, useRef, useState } from 'react'; -import { Link, useNavigate } from 'react-router-dom'; +import { StringNames } from '@chili-and-cilantro/chili-and-cilantro-lib'; +import MenuIcon from '@mui/icons-material/Menu'; +import { + AppBar, + Box, + Button, + IconButton, + Toolbar, + Typography, +} from '@mui/material'; +import { FC, useContext, useState } from 'react'; +import { Link } from 'react-router-dom'; import chiliCilantroSymbol from '../../assets/images/Chili-and-Cilantro.png'; import { AuthContext } from '../auth-provider'; -import { GameMenuOption, useMenu } from '../menu-context'; +import { useAppTranslation } from '../i18n-provider'; +import { GameMenu } from './game-menu'; +import SideMenu from './side-menu'; import './top-menu.scss'; +import { UserLanguageSelector } from './user-language-selector'; +import { UserMenu } from './user-menu'; -const TopMenu: React.FC = () => { - const { isAuthenticated, logout } = React.useContext(AuthContext); - const { gameOptions } = useMenu(); - const [, setRender] = useState(0); - const [dropdownOpen, setDropdownOpen] = useState(false); - const [gameDropdownOpen, setGameDropdownOpen] = useState(false); - const navigate = useNavigate(); - const dropdownRef = useRef(null); - const gameDropdownRef = useRef(null); +export const TopMenu: FC = () => { + const { isAuthenticated } = useContext(AuthContext); + const [isSideMenuOpen, setIsSideMenuOpen] = useState(false); - useEffect(() => { - setRender((prev) => prev + 1); - }, [isAuthenticated, navigate]); - - useEffect(() => { - const handleClickOutside = (event: MouseEvent) => { - if ( - dropdownRef.current && - !dropdownRef.current.contains(event.target as Node) - ) { - setDropdownOpen(false); - } - if ( - gameDropdownRef.current && - !gameDropdownRef.current.contains(event.target as Node) - ) { - setGameDropdownOpen(false); - } - }; - - document.addEventListener('mousedown', handleClickOutside); - return () => { - document.removeEventListener('mousedown', handleClickOutside); - }; - }, []); - - const toggleDropdown = () => { - setDropdownOpen(!dropdownOpen); - }; + const handleOpenSideMenu = () => setIsSideMenuOpen(true); + const handleCloseSideMenu = () => setIsSideMenuOpen(false); + const { t } = useAppTranslation(); return ( - + +
+ + + ); }; diff --git a/chili-and-cilantro-react/src/app/components/translated-title.tsx b/chili-and-cilantro-react/src/app/components/translated-title.tsx new file mode 100644 index 0000000..ce259e3 --- /dev/null +++ b/chili-and-cilantro-react/src/app/components/translated-title.tsx @@ -0,0 +1,31 @@ +// src/app/components/TranslatedTitle.tsx + +import { StringNames } from '@chili-and-cilantro/chili-and-cilantro-lib'; +import { FC, useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; +import { useAppTranslation } from '../i18n-provider'; + +const TranslatedTitle: FC = () => { + const { i18n } = useTranslation(); + const { t } = useAppTranslation(); + + useEffect(() => { + const updateTitle = () => { + document.title = t(StringNames.Common_Site); + }; + + updateTitle(); + + // Listen for language changes + i18n.on('languageChanged', updateTitle); + + // Cleanup listener on component unmount + return () => { + i18n.off('languageChanged', updateTitle); + }; + }, [t, i18n]); + + return null; +}; + +export default TranslatedTitle; diff --git a/chili-and-cilantro-react/src/app/components/user-language-selector.tsx b/chili-and-cilantro-react/src/app/components/user-language-selector.tsx new file mode 100644 index 0000000..36e41da --- /dev/null +++ b/chili-and-cilantro-react/src/app/components/user-language-selector.tsx @@ -0,0 +1,40 @@ +// CurseFund-react/src/app/components/user-language-selector.tsx + +import { StringLanguages } from '@chili-and-cilantro/chili-and-cilantro-lib'; +import { Button, Menu, MenuItem } from '@mui/material'; +import { FC, MouseEvent, useState } from 'react'; +import { useAuth } from '../auth-provider'; +import { Flag } from './flag'; + +export const UserLanguageSelector: FC = () => { + const { language, setLanguage } = useAuth(); + const [anchorEl, setAnchorEl] = useState(null); + + const handleClick = (event: MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + const handleLanguageChange = (newLanguage: StringLanguages) => { + setLanguage(newLanguage); + handleClose(); + }; + + return ( + <> + + + {Object.values(StringLanguages).map((lang) => ( + handleLanguageChange(lang)}> + {lang} + + ))} + + + ); +}; diff --git a/chili-and-cilantro-react/src/app/components/user-menu.tsx b/chili-and-cilantro-react/src/app/components/user-menu.tsx new file mode 100644 index 0000000..b8c44ad --- /dev/null +++ b/chili-and-cilantro-react/src/app/components/user-menu.tsx @@ -0,0 +1,72 @@ +import { StringNames } from '@chili-and-cilantro/chili-and-cilantro-lib'; +import { faUserCircle } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { + ExitToApp as LogoutIcon, + VpnKey as VpnKeyIcon, +} from '@mui/icons-material'; +import { Box, IconButton, Menu, MenuItem } from '@mui/material'; +import { FC, MouseEvent, useContext, useState } from 'react'; +import { Link, useNavigate } from 'react-router-dom'; +import { AuthContext } from '../auth-provider'; +import { useAppTranslation } from '../i18n-provider'; + +export const UserMenu: FC = () => { + const { logout } = useContext(AuthContext); + const [anchorEl, setAnchorEl] = useState(null); + const navigate = useNavigate(); + const { t } = useAppTranslation(); + + const handleClick = (event: MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + return ( + + + + + + svg': { + marginRight: 2, + width: 24, + height: 24, + }, + }} + > + + {t(StringNames.Common_ChangePassword)} + + { + handleClose(); + logout(); + navigate('/'); + }} + sx={{ + display: 'flex', + alignItems: 'center', + '& > svg': { + marginRight: 2, + width: 24, + height: 24, + }, + }} + > + {t(StringNames.LogoutButton)} + + + + ); +}; diff --git a/chili-and-cilantro-react/src/app/i18n-provider.tsx b/chili-and-cilantro-react/src/app/i18n-provider.tsx index 5a65266..63b8c37 100644 --- a/chili-and-cilantro-react/src/app/i18n-provider.tsx +++ b/chili-and-cilantro-react/src/app/i18n-provider.tsx @@ -1,5 +1,4 @@ // src/app/components/i18n-provider.tsx - import { StringNames, stringNameToI18nKey, @@ -23,16 +22,13 @@ export const TranslationProvider: FC = ({ children, }) => { const { t } = useTranslation(); - - const translationFunction = useCallback( - (key: StringNames) => { - return t(stringNameToI18nKey(key)); - }, - [t], - ); + const typedT: (key: string) => string = t; const value = { - t: translationFunction, + t: useCallback( + (key: StringNames) => typedT(stringNameToI18nKey(key)), + [typedT], + ), }; return ( diff --git a/chili-and-cilantro-react/src/app/i18n.tsx b/chili-and-cilantro-react/src/app/i18n.tsx index ae23290..e4f473f 100644 --- a/chili-and-cilantro-react/src/app/i18n.tsx +++ b/chili-and-cilantro-react/src/app/i18n.tsx @@ -7,6 +7,7 @@ import i18n from 'i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; import Backend from 'i18next-http-backend'; import { initReactI18next } from 'react-i18next'; +import { environment } from '../environments/environment'; (async () => { await i18n @@ -15,7 +16,7 @@ import { initReactI18next } from 'react-i18next'; .use(initReactI18next) .init({ fallbackLng: LanguageCodes[StringLanguages.EnglishUS], - debug: process.env['NODE_ENV'] === 'development', + debug: environment.debugI18n, interpolation: { escapeValue: false, // not needed for React }, diff --git a/chili-and-cilantro-react/src/environments/environment.prod.ts b/chili-and-cilantro-react/src/environments/environment.prod.ts index 3c89f61..5026f11 100644 --- a/chili-and-cilantro-react/src/environments/environment.prod.ts +++ b/chili-and-cilantro-react/src/environments/environment.prod.ts @@ -2,6 +2,7 @@ import { IEnvironment } from '../interfaces/environment'; export const environment: IEnvironment = { production: true, + debugI18n: false, game: { apiUrl: 'http://localhost:3000/api', socketHost: 'http://localhost:3000', diff --git a/chili-and-cilantro-react/src/environments/environment.ts b/chili-and-cilantro-react/src/environments/environment.ts index 4992a14..6eb75cd 100644 --- a/chili-and-cilantro-react/src/environments/environment.ts +++ b/chili-and-cilantro-react/src/environments/environment.ts @@ -2,6 +2,7 @@ import { IEnvironment } from '../interfaces/environment'; export const environment: IEnvironment = { production: false, + debugI18n: true, game: { apiUrl: 'http://localhost:3000/api', socketHost: 'http://localhost:3000', diff --git a/chili-and-cilantro-react/src/interfaces/environment.ts b/chili-and-cilantro-react/src/interfaces/environment.ts index e6418e9..96dc6e8 100644 --- a/chili-and-cilantro-react/src/interfaces/environment.ts +++ b/chili-and-cilantro-react/src/interfaces/environment.ts @@ -1,5 +1,6 @@ export interface IEnvironment { production: boolean; + debugI18n: boolean; game: { apiUrl: string; socketHost: string; diff --git a/chili-and-cilantro-react/tsconfig.json b/chili-and-cilantro-react/tsconfig.json index 8ae0b19..8a9ad37 100644 --- a/chili-and-cilantro-react/tsconfig.json +++ b/chili-and-cilantro-react/tsconfig.json @@ -9,7 +9,8 @@ "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true + "noFallthroughCasesInSwitch": true, + "types": ["react-i18next"] }, "files": [], "include": [], diff --git a/fontawesome-npmrc.sh b/fontawesome-npmrc.sh index 7e1ee3f..ad6c058 100755 --- a/fontawesome-npmrc.sh +++ b/fontawesome-npmrc.sh @@ -15,7 +15,7 @@ done create_npmrc() { if grep -q "@fortawesome:registry" .npmrc && [ "$FORCE" = false ]; then echo "FONTAWESOME_KEY already exists in .npmrc"; - return 1; + return 0; else echo "@fortawesome:registry=https://npm.fontawesome.com/ @awesome.me:registry=https://npm.fontawesome.com/ @@ -28,7 +28,7 @@ create_npmrc() { update_yarnrc() { if grep -q "npmAuthToken:" .yarnrc.yml && [ "$FORCE" = false ]; then echo "FONTAWESOME_KEY already exists in .yarnrc.yml"; - return 1; + return 0; else if grep -q "npmAuthToken:" .yarnrc.yml; then sed -i "s/npmAuthToken: .*/npmAuthToken: \"${FONTAWESOME_KEY}\"/" .yarnrc.yml diff --git a/jest.config.ts b/jest.config.ts index d0dbd1b..9599159 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,5 +1,8 @@ -import { getJestProjects } from '@nx/jest'; +import { getJestProjectsAsync } from '@nx/jest'; -export default { - projects: getJestProjects(), +export default async () => { + const projects = await getJestProjectsAsync(); + return { + projects, + }; }; diff --git a/package.json b/package.json index de1b18f..bbb7dc0 100644 --- a/package.json +++ b/package.json @@ -113,6 +113,7 @@ "@types/node": "^22.9.3", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", + "@types/react-i18next": "^8.1.0", "@types/react-router-dom": "^5.3.3", "@types/sinon": "^17.0.1", "@types/supertest": "^6.0.2", diff --git a/yarn.lock b/yarn.lock index 44df8de..e0085c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1515,6 +1515,7 @@ __metadata: "@types/node": "npm:^22.9.3" "@types/react": "npm:^18.3.12" "@types/react-dom": "npm:^18.3.1" + "@types/react-i18next": "npm:^8.1.0" "@types/react-router-dom": "npm:^5.3.3" "@types/sinon": "npm:^17.0.1" "@types/supertest": "npm:^6.0.2" @@ -1607,8 +1608,8 @@ __metadata: linkType: hard "@cypress/request@npm:^3.0.4": - version: 3.0.6 - resolution: "@cypress/request@npm:3.0.6" + version: 3.0.7 + resolution: "@cypress/request@npm:3.0.7" dependencies: aws-sign2: "npm:~0.7.0" aws4: "npm:^1.8.0" @@ -1623,12 +1624,12 @@ __metadata: json-stringify-safe: "npm:~5.0.1" mime-types: "npm:~2.1.19" performance-now: "npm:^2.1.0" - qs: "npm:6.13.0" + qs: "npm:6.13.1" safe-buffer: "npm:^5.1.2" tough-cookie: "npm:^5.0.0" tunnel-agent: "npm:^0.6.0" uuid: "npm:^8.3.2" - checksum: 10c0/24671e655768ef09b099e93fdef5bab58f501a050ddb833d0bf13a44d146e5b3359d71658daecd183d2cb37a1e56cf8aed8a736e3730a23e2383263bd87b2305 + checksum: 10c0/645328a63eb47903209ec928fd88287fad1b38beb0c40c65cd8d0af11b292e880e47ec53a29592c866ab1e21828664abe6328cd2da8eedb20719a622df37ad58 languageName: node linkType: hard @@ -1689,16 +1690,16 @@ __metadata: languageName: node linkType: hard -"@emotion/cache@npm:^11.13.5": - version: 11.13.5 - resolution: "@emotion/cache@npm:11.13.5" +"@emotion/cache@npm:^11.13.5, @emotion/cache@npm:^11.14.0": + version: 11.14.0 + resolution: "@emotion/cache@npm:11.14.0" dependencies: "@emotion/memoize": "npm:^0.9.0" "@emotion/sheet": "npm:^1.4.0" "@emotion/utils": "npm:^1.4.2" "@emotion/weak-memoize": "npm:^0.4.0" stylis: "npm:4.2.0" - checksum: 10c0/fc669bf2add27ddff7b1f341b54e7124379156285095f0b38fb846efe90c64c70d2826f73bc734358a4fce04578229774a38ff4de2599d286461bfca57ba7d23 + checksum: 10c0/3fa3e7a431ab6f8a47c67132a00ac8358f428c1b6c8421d4b20de9df7c18e95eec04a5a6ff5a68908f98d3280044f247b4965ac63df8302d2c94dba718769724 languageName: node linkType: hard @@ -1726,14 +1727,14 @@ __metadata: linkType: hard "@emotion/react@npm:^11.13.3": - version: 11.13.5 - resolution: "@emotion/react@npm:11.13.5" + version: 11.14.0 + resolution: "@emotion/react@npm:11.14.0" dependencies: "@babel/runtime": "npm:^7.18.3" "@emotion/babel-plugin": "npm:^11.13.5" - "@emotion/cache": "npm:^11.13.5" + "@emotion/cache": "npm:^11.14.0" "@emotion/serialize": "npm:^1.3.3" - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.1.0" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" "@emotion/utils": "npm:^1.4.2" "@emotion/weak-memoize": "npm:^0.4.0" hoist-non-react-statics: "npm:^3.3.1" @@ -1742,7 +1743,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/16b4810bc68c619cb25145e543880e905fc99332bacc1c39b20c913b2e6130289d9acd909abba55820fa796c5cca3cade6fe79a26b3ab7e4e2d040c61ee14a6e + checksum: 10c0/d0864f571a9f99ec643420ef31fde09e2006d3943a6aba079980e4d5f6e9f9fecbcc54b8f617fe003c00092ff9d5241179149ffff2810cb05cf72b4620cfc031 languageName: node linkType: hard @@ -1767,14 +1768,14 @@ __metadata: linkType: hard "@emotion/styled@npm:^11.13.0": - version: 11.13.5 - resolution: "@emotion/styled@npm:11.13.5" + version: 11.14.0 + resolution: "@emotion/styled@npm:11.14.0" dependencies: "@babel/runtime": "npm:^7.18.3" "@emotion/babel-plugin": "npm:^11.13.5" "@emotion/is-prop-valid": "npm:^1.3.0" "@emotion/serialize": "npm:^1.3.3" - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.1.0" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" "@emotion/utils": "npm:^1.4.2" peerDependencies: "@emotion/react": ^11.0.0-rc.0 @@ -1782,7 +1783,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/18d3e38482f92c93446fbfe46e3ca2b182f228f3317ca23f9bd69ddc313bacabf8ecf4d7e720e9aa492bd651cb0b8f87196547bd136666ef50287c414cd36936 + checksum: 10c0/20aa5c488e4edecf63659212fc5ba1ccff2d3a66593fc8461de7cd5fe9192a741db357ffcd270a455bd61898d7f37cd5c84b4fd2b7974dade712badf7860ca9c languageName: node linkType: hard @@ -1793,12 +1794,12 @@ __metadata: languageName: node linkType: hard -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.1.0": - version: 1.1.0 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.1.0" +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.2.0": + version: 1.2.0 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.2.0" peerDependencies: react: ">=16.8.0" - checksum: 10c0/a883480f3a7139fb4a43e71d3114ca57e2b7ae5ff204e05cd9e59251a113773b8f64eb75d3997726250aca85eb73447638c8f51930734bdd16b96762b65e58c3 + checksum: 10c0/074dbc92b96bdc09209871070076e3b0351b6b47efefa849a7d9c37ab142130767609ca1831da0055988974e3b895c1de7606e4c421fecaa27c3e56a2afd3b08 languageName: node linkType: hard @@ -2355,13 +2356,13 @@ __metadata: linkType: hard "@jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" dependencies: "@jridgewell/set-array": "npm:^1.2.1" "@jridgewell/sourcemap-codec": "npm:^1.4.10" "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb + checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a languageName: node linkType: hard @@ -2426,8 +2427,8 @@ __metadata: linkType: hard "@jsonjoy.com/json-pack@npm:^1.0.3": - version: 1.1.0 - resolution: "@jsonjoy.com/json-pack@npm:1.1.0" + version: 1.1.1 + resolution: "@jsonjoy.com/json-pack@npm:1.1.1" dependencies: "@jsonjoy.com/base64": "npm:^1.1.1" "@jsonjoy.com/util": "npm:^1.1.2" @@ -2435,7 +2436,7 @@ __metadata: thingies: "npm:^1.20.0" peerDependencies: tslib: 2 - checksum: 10c0/cdf5cb567a7f2e703d4966a3e3a5f7f7b54ee40a2102aa0ede5c79bcf2060c8465d82f39de8583db4cf1d8415bec8e57dfb1156ef663567b846cdea45813d9d1 + checksum: 10c0/fd0d8baa0c8eba536924540717901e0d7eed742576991033cceeb32dcce801ee0a4318cf6eb40b444c9e78f69ddbd4f38b9eb0041e9e54c17e7b6d1219b12e1d languageName: node linkType: hard @@ -2768,49 +2769,49 @@ __metadata: languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^6.1.10": - version: 6.1.10 - resolution: "@mui/core-downloads-tracker@npm:6.1.10" - checksum: 10c0/b94259c7cc8065dfed7ead4250e1bba4e65ec5625d86a11d118d1c22ec05f058d6f93b66d73bba9d787453058a2a05b5a1bbfd01ac53f3410e25358da3e4a571 +"@mui/core-downloads-tracker@npm:^6.2.0": + version: 6.2.0 + resolution: "@mui/core-downloads-tracker@npm:6.2.0" + checksum: 10c0/5bdfb204859f004d631fcd2d97bcf0ec41ca17a7e4a453f89ecd8e8d460b3cd26c6eb93a6170bdcc510bb481e028fa35fdcf17e6673ea593dba615b95477fde6 languageName: node linkType: hard "@mui/icons-material@npm:^6.1.1": - version: 6.1.10 - resolution: "@mui/icons-material@npm:6.1.10" + version: 6.2.0 + resolution: "@mui/icons-material@npm:6.2.0" dependencies: "@babel/runtime": "npm:^7.26.0" peerDependencies: - "@mui/material": ^6.1.10 + "@mui/material": ^6.2.0 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/970a402962b27219bdff4b7af32e758fea800c6879112887cdc71f0d6869c3ea66e24e320edbc39b704f174511a918a055b96d49b91bdeefb1afe8d753b42d4e + checksum: 10c0/317990cd9c349a9dadc24f2ece6aa7b99b202f01c549010881d361cc44f816f2a5def0e70b6241967184f1dea16e7459715d32299ca0fd9524226c9f1f91efc2 languageName: node linkType: hard "@mui/material@npm:^6.1.8": - version: 6.1.10 - resolution: "@mui/material@npm:6.1.10" + version: 6.2.0 + resolution: "@mui/material@npm:6.2.0" dependencies: "@babel/runtime": "npm:^7.26.0" - "@mui/core-downloads-tracker": "npm:^6.1.10" - "@mui/system": "npm:^6.1.10" + "@mui/core-downloads-tracker": "npm:^6.2.0" + "@mui/system": "npm:^6.2.0" "@mui/types": "npm:^7.2.19" - "@mui/utils": "npm:^6.1.10" + "@mui/utils": "npm:^6.2.0" "@popperjs/core": "npm:^2.11.8" "@types/react-transition-group": "npm:^4.4.11" clsx: "npm:^2.1.1" csstype: "npm:^3.1.3" prop-types: "npm:^15.8.1" - react-is: "npm:^18.3.1" + react-is: "npm:^19.0.0" react-transition-group: "npm:^4.4.5" peerDependencies: "@emotion/react": ^11.5.0 "@emotion/styled": ^11.3.0 - "@mui/material-pigment-css": ^6.1.10 + "@mui/material-pigment-css": ^6.2.0 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2823,16 +2824,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 10c0/501f434aa61b56806cd6d8bc27ddd0cfc6f423ee132bb0cc02ca36af182b251b8d15dd69ed8b90742813039d2bfe1e396f6ddf84f15f453d53bfbf355d18f99a + checksum: 10c0/e01d719b3d9ffc7bec6ff277f272505c8caa6406a1c520b28b5abb389a78bb103893a815a78e9fe10f20b62fbc4c95c787ab31b8d50410465a683e421286b33c languageName: node linkType: hard -"@mui/private-theming@npm:^6.1.10": - version: 6.1.10 - resolution: "@mui/private-theming@npm:6.1.10" +"@mui/private-theming@npm:^6.2.0": + version: 6.2.0 + resolution: "@mui/private-theming@npm:6.2.0" dependencies: "@babel/runtime": "npm:^7.26.0" - "@mui/utils": "npm:^6.1.10" + "@mui/utils": "npm:^6.2.0" prop-types: "npm:^15.8.1" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2840,13 +2841,13 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/1e296d7582b276e7b9de8c9af252b4998ab8343a570ed7ead8c23b3275a218f0722f389d698c45cab9b4b219ad82411af6f71c7678818d3387925db01d1a9ead + checksum: 10c0/49f563276747c8e2a133c2cf81713ebd5231cce8c24940ddc72d470477218621c0b5a203e0e4729d276d4d3eb1670fc15afe7b497719b84851cbc798b3a52bda languageName: node linkType: hard -"@mui/styled-engine@npm:^6.1.10": - version: 6.1.10 - resolution: "@mui/styled-engine@npm:6.1.10" +"@mui/styled-engine@npm:^6.2.0": + version: 6.2.0 + resolution: "@mui/styled-engine@npm:6.2.0" dependencies: "@babel/runtime": "npm:^7.26.0" "@emotion/cache": "npm:^11.13.5" @@ -2863,19 +2864,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: 10c0/2e6ad8f1c3de4ce4b6a246de976f304e433e8a5031465bc9614e51eeae2dd308c76dbdfc2b9f95bbcb971c1008bdbc9103d9418313934a9760f6555334997586 + checksum: 10c0/9831015df8057ce99db21e611410b4eaf947c959fbbf1cb4652c77288ae2db176cd10a1c7a8a2f1d7f80b0478075beaec3c0338a8c3ad146695f169f22582f5d languageName: node linkType: hard "@mui/styles@npm:^6.1.1": - version: 6.1.10 - resolution: "@mui/styles@npm:6.1.10" + version: 6.2.0 + resolution: "@mui/styles@npm:6.2.0" dependencies: "@babel/runtime": "npm:^7.26.0" "@emotion/hash": "npm:^0.9.2" - "@mui/private-theming": "npm:^6.1.10" + "@mui/private-theming": "npm:^6.2.0" "@mui/types": "npm:^7.2.19" - "@mui/utils": "npm:^6.1.10" + "@mui/utils": "npm:^6.2.0" clsx: "npm:^2.1.1" csstype: "npm:^3.1.3" hoist-non-react-statics: "npm:^3.3.2" @@ -2894,19 +2895,19 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/1ab1a7daa605abb949bd59b3ccd1b363fc01e959090a115b9068a3f9e6371313b368d0f9c72652ade536e7da8ed2e0aac765b3e5fdc9ab4e50c7604a746ba562 + checksum: 10c0/48d5707a9d3b7f8e24bae350389f8c06900afab15b9e10e77e1b185898b3be9ab722236cf19761a842b1071507189b26217cf2bcef9a396d5bf909540a89900b languageName: node linkType: hard -"@mui/system@npm:^6.1.10": - version: 6.1.10 - resolution: "@mui/system@npm:6.1.10" +"@mui/system@npm:^6.2.0": + version: 6.2.0 + resolution: "@mui/system@npm:6.2.0" dependencies: "@babel/runtime": "npm:^7.26.0" - "@mui/private-theming": "npm:^6.1.10" - "@mui/styled-engine": "npm:^6.1.10" + "@mui/private-theming": "npm:^6.2.0" + "@mui/styled-engine": "npm:^6.2.0" "@mui/types": "npm:^7.2.19" - "@mui/utils": "npm:^6.1.10" + "@mui/utils": "npm:^6.2.0" clsx: "npm:^2.1.1" csstype: "npm:^3.1.3" prop-types: "npm:^15.8.1" @@ -2922,7 +2923,7 @@ __metadata: optional: true "@types/react": optional: true - checksum: 10c0/ba228faa0a2c3f5b25770faa1484c04846889642eda1d0c3922b324c6de2946fc4debf7ddb994f1ef349bbe260243ab5e1117b624ea5062209ba1898f5dff1a3 + checksum: 10c0/1b593985fe0428cc945e397e948500f91d9f5f8b1610cdd47b3e55dbfbe54a4467fe8af333e8261545553cfe71b394cf4762e7f93944d8bbafe0d4090310639e languageName: node linkType: hard @@ -2938,23 +2939,23 @@ __metadata: languageName: node linkType: hard -"@mui/utils@npm:^6.1.10": - version: 6.1.10 - resolution: "@mui/utils@npm:6.1.10" +"@mui/utils@npm:^6.2.0": + version: 6.2.0 + resolution: "@mui/utils@npm:6.2.0" dependencies: "@babel/runtime": "npm:^7.26.0" "@mui/types": "npm:^7.2.19" - "@types/prop-types": "npm:^15.7.13" + "@types/prop-types": "npm:^15.7.14" clsx: "npm:^2.1.1" prop-types: "npm:^15.8.1" - react-is: "npm:^18.3.1" + react-is: "npm:^19.0.0" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/0cecda147b026fbb6f397e54fc08719c5805a7e5fd4255c30a45a7155748345dbbc57fda9181986db222f93da0012f001b1f1f624084e5227ca7814ed1c3dd30 + checksum: 10c0/a010b21f16673ece7f7c05e9c8a26a3db7d1a9e5557f2669178049bdd6f64525983eee9e6e3837221ff9261981048166716f4d37ae8cc77a2f9f525514b83496 languageName: node linkType: hard @@ -3200,12 +3201,12 @@ __metadata: linkType: hard "@nx/cypress@npm:^20.2.0": - version: 20.2.0 - resolution: "@nx/cypress@npm:20.2.0" + version: 20.2.2 + resolution: "@nx/cypress@npm:20.2.2" dependencies: - "@nx/devkit": "npm:20.2.0" - "@nx/eslint": "npm:20.2.0" - "@nx/js": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" + "@nx/eslint": "npm:20.2.2" + "@nx/js": "npm:20.2.2" "@phenomnomnominal/tsquery": "npm:~5.0.1" detect-port: "npm:^1.5.1" tslib: "npm:^2.3.0" @@ -3214,13 +3215,13 @@ __metadata: peerDependenciesMeta: cypress: optional: true - checksum: 10c0/7ddda1322832c3c568cf433419d8f11b4dd5986ead5eccace88fc4b55a57a79401bec66073628dbbc1312097efc1ebffbacac4b26f248d8493dc121c71bcafc4 + checksum: 10c0/2d99f404d8edb716434fd74cabe6b23eff728c045346200c6362b06df29f8471cae47d3ed26fdf4aa71ad84c27ce0160b9d3a7838fc51e8952a859a058f6f294 languageName: node linkType: hard -"@nx/devkit@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/devkit@npm:20.2.0" +"@nx/devkit@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/devkit@npm:20.2.2" dependencies: ejs: "npm:^3.1.7" enquirer: "npm:~2.3.6" @@ -3232,16 +3233,16 @@ __metadata: yargs-parser: "npm:21.1.1" peerDependencies: nx: ">= 19 <= 21" - checksum: 10c0/7b3cd51fd135c78824e2326810cb18591a4e77ce9b47dbb2fea4bc8e36cec385815c5282358090a5377af3741f06d404ab3acb038c5796084b4780d2bbd3771a + checksum: 10c0/2e23120846f6f03a25a81dd69b3cacb5ddfd6bae070411668dcb12c507db8265d81b577a88db348ce4ef89dd8177af6532c9514a42524369d6ed33473a41abe2 languageName: node linkType: hard "@nx/esbuild@npm:^20.2.0": - version: 20.2.0 - resolution: "@nx/esbuild@npm:20.2.0" + version: 20.2.2 + resolution: "@nx/esbuild@npm:20.2.2" dependencies: - "@nx/devkit": "npm:20.2.0" - "@nx/js": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" + "@nx/js": "npm:20.2.2" fast-glob: "npm:3.2.7" picocolors: "npm:^1.1.0" tsconfig-paths: "npm:^4.1.2" @@ -3251,16 +3252,16 @@ __metadata: peerDependenciesMeta: esbuild: optional: true - checksum: 10c0/a8e4db33d0dd4be4d17c625f75d98c59909cdd9ac0633bd239c010b6c1a544e394e56c2b8ff45b8582be80e79a5c497b2bb1919609db99e951cb886ed7624526 + checksum: 10c0/80a54b70b82819092202ac268e1121e725451afd713fb797a81ce9b6dd77905a04b026430a80252c1b01b612b35812f1868fcaa1ff956b27f1f2ee55dfe3c09a languageName: node linkType: hard "@nx/eslint-plugin@npm:^20.1.3": - version: 20.2.0 - resolution: "@nx/eslint-plugin@npm:20.2.0" + version: 20.2.2 + resolution: "@nx/eslint-plugin@npm:20.2.2" dependencies: - "@nx/devkit": "npm:20.2.0" - "@nx/js": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" + "@nx/js": "npm:20.2.2" "@typescript-eslint/type-utils": "npm:^8.0.0" "@typescript-eslint/utils": "npm:^8.0.0" chalk: "npm:^4.1.0" @@ -3275,16 +3276,16 @@ __metadata: peerDependenciesMeta: eslint-config-prettier: optional: true - checksum: 10c0/3456cd2f7e2476e083c4437351574214529a7b27a8d5249c74a2c27f62b9f4e432a9a74078940a7e7660da2591153f6f36db44aee0fb30664525180e9393aee1 + checksum: 10c0/8ef82adbd6bc8160958d7a848822773c9cc211ac82a9e4f0871d457eb771df2828ed76b761a8d544ff523cb23389ecc407b65f914aacea0b3d5aa94f83846e72 languageName: node linkType: hard -"@nx/eslint@npm:20.2.0, @nx/eslint@npm:^20.2.0": - version: 20.2.0 - resolution: "@nx/eslint@npm:20.2.0" +"@nx/eslint@npm:20.2.2, @nx/eslint@npm:^20.2.0": + version: 20.2.2 + resolution: "@nx/eslint@npm:20.2.2" dependencies: - "@nx/devkit": "npm:20.2.0" - "@nx/js": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" + "@nx/js": "npm:20.2.2" semver: "npm:^7.5.3" tslib: "npm:^2.3.0" typescript: "npm:~5.6.2" @@ -3294,18 +3295,18 @@ __metadata: peerDependenciesMeta: "@zkochan/js-yaml": optional: true - checksum: 10c0/55a1a3b63518e9264a4e86140e8cfd1f886494faf6911c1fb5e3f2a0f7d3726ede54ffaa584d24956c93abcaea052df9eb87944480d556dd2f8969c8e1dd5b2f + checksum: 10c0/79b7f28b391b8f49572063d1056f2a15097d8e544c4c65ab982879e2c6680eca5c42d3e30b0d8544fb4e6372a4b124a19d00e78e7567e231e294379fa2eb1470 languageName: node linkType: hard -"@nx/jest@npm:20.2.0, @nx/jest@npm:^20.2.0": - version: 20.2.0 - resolution: "@nx/jest@npm:20.2.0" +"@nx/jest@npm:20.2.2, @nx/jest@npm:^20.2.0": + version: 20.2.2 + resolution: "@nx/jest@npm:20.2.2" dependencies: "@jest/reporters": "npm:^29.4.1" "@jest/test-result": "npm:^29.4.1" - "@nx/devkit": "npm:20.2.0" - "@nx/js": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" + "@nx/js": "npm:20.2.2" "@phenomnomnominal/tsquery": "npm:~5.0.1" chalk: "npm:^4.1.0" identity-obj-proxy: "npm:3.0.0" @@ -3317,13 +3318,13 @@ __metadata: semver: "npm:^7.5.3" tslib: "npm:^2.3.0" yargs-parser: "npm:21.1.1" - checksum: 10c0/ca77387dc51c365df935432824e7c0ff63f9a93389383bfc54a360185a209e14c9cb5789637762487e520224b64a7d801856ea1d7720cc082ea03a2aecca0a33 + checksum: 10c0/d2278ef041df12b9628c99abb6c20df72e6eed13cb27779973fd8d6db8ecd658a6142af4ff7131a7b87005555cd1453d4f9b3a0434b285794c5ce565759cfcb0 languageName: node linkType: hard -"@nx/js@npm:20.2.0, @nx/js@npm:^20.2.0": - version: 20.2.0 - resolution: "@nx/js@npm:20.2.0" +"@nx/js@npm:20.2.2, @nx/js@npm:^20.2.0": + version: 20.2.2 + resolution: "@nx/js@npm:20.2.2" dependencies: "@babel/core": "npm:^7.23.2" "@babel/plugin-proposal-decorators": "npm:^7.22.7" @@ -3332,8 +3333,8 @@ __metadata: "@babel/preset-env": "npm:^7.23.2" "@babel/preset-typescript": "npm:^7.22.5" "@babel/runtime": "npm:^7.22.6" - "@nx/devkit": "npm:20.2.0" - "@nx/workspace": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" + "@nx/workspace": "npm:20.2.2" "@zkochan/js-yaml": "npm:0.0.7" babel-plugin-const-enum: "npm:^1.0.1" babel-plugin-macros: "npm:^2.8.0" @@ -3342,7 +3343,6 @@ __metadata: columnify: "npm:^1.6.0" detect-port: "npm:^1.5.1" enquirer: "npm:~2.3.6" - fast-glob: "npm:3.2.7" ignore: "npm:^5.0.4" js-tokens: "npm:^4.0.0" jsonc-parser: "npm:3.2.0" @@ -3352,6 +3352,7 @@ __metadata: ora: "npm:5.3.0" semver: "npm:^7.5.3" source-map-support: "npm:0.5.19" + tinyglobby: "npm:^0.2.10" ts-node: "npm:10.9.1" tsconfig-paths: "npm:^4.1.2" tslib: "npm:^2.3.0" @@ -3360,40 +3361,40 @@ __metadata: peerDependenciesMeta: verdaccio: optional: true - checksum: 10c0/8cc7e743d65092f0c4e023d376088459606429c2d859b7147a67f3d890be76fd1dee19d5ad2d72af48b469be8c6e47641aa77997357c793696e30e109e49eede + checksum: 10c0/2f920ca70187f81c1afcac5254aa9d41a8047e149803b0e036b14fade9fde1b00cad7b4ff6b0c46e9ec78d878c8f128857e8288ed0fe9d0d7bf27db6310d718d languageName: node linkType: hard -"@nx/module-federation@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/module-federation@npm:20.2.0" +"@nx/module-federation@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/module-federation@npm:20.2.2" dependencies: "@module-federation/enhanced": "npm:0.7.6" "@module-federation/node": "npm:2.6.11" "@module-federation/sdk": "npm:0.7.6" - "@nx/devkit": "npm:20.2.0" - "@nx/js": "npm:20.2.0" - "@nx/web": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" + "@nx/js": "npm:20.2.2" + "@nx/web": "npm:20.2.2" "@rspack/core": "npm:^1.1.5" express: "npm:^4.19.2" http-proxy-middleware: "npm:^3.0.3" picocolors: "npm:^1.1.0" tslib: "npm:^2.3.0" webpack: "npm:5.88.0" - checksum: 10c0/51877b8ca08d2f14c1c8b09df32262af8e4f43a353bc6b2bd189f44a1f73ddcd31589bf937d7136058a351e8105ce4861c155954e53ab57fb47ce17bc3e4361c + checksum: 10c0/3024c5cdde42957cce0853fd5bd135e782c434b0129e3dd4def04ac6406f30fb6997a33fb7e452817ba7a29218bc445811a411f99eafa1bb7e5c7b81ff3173eb languageName: node linkType: hard "@nx/node@npm:^20.2.0": - version: 20.2.0 - resolution: "@nx/node@npm:20.2.0" + version: 20.2.2 + resolution: "@nx/node@npm:20.2.2" dependencies: - "@nx/devkit": "npm:20.2.0" - "@nx/eslint": "npm:20.2.0" - "@nx/jest": "npm:20.2.0" - "@nx/js": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" + "@nx/eslint": "npm:20.2.2" + "@nx/jest": "npm:20.2.2" + "@nx/js": "npm:20.2.2" tslib: "npm:^2.3.0" - checksum: 10c0/06e2b3e5f70695f0686ccefc9a3a7c0d71fc443b12528332b00d0627b76691e0a2503a60f1e5d001d1361fa852044312b1ee014f8ed27afd67d4a485ad8322ce + checksum: 10c0/6a72869bdd54e2543d44e47af51907bd30a75ec3d3d7e4f64a9241ae80a701c3d312971f9a610267d0b8a4f4f0f9a63ac41ee6bc60f4d86d24bf296879d680e8 languageName: node linkType: hard @@ -3404,9 +3405,9 @@ __metadata: languageName: node linkType: hard -"@nx/nx-darwin-arm64@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/nx-darwin-arm64@npm:20.2.0" +"@nx/nx-darwin-arm64@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/nx-darwin-arm64@npm:20.2.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -3418,9 +3419,9 @@ __metadata: languageName: node linkType: hard -"@nx/nx-darwin-x64@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/nx-darwin-x64@npm:20.2.0" +"@nx/nx-darwin-x64@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/nx-darwin-x64@npm:20.2.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -3432,9 +3433,9 @@ __metadata: languageName: node linkType: hard -"@nx/nx-freebsd-x64@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/nx-freebsd-x64@npm:20.2.0" +"@nx/nx-freebsd-x64@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/nx-freebsd-x64@npm:20.2.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -3446,9 +3447,9 @@ __metadata: languageName: node linkType: hard -"@nx/nx-linux-arm-gnueabihf@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.2.0" +"@nx/nx-linux-arm-gnueabihf@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.2.2" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -3460,9 +3461,9 @@ __metadata: languageName: node linkType: hard -"@nx/nx-linux-arm64-gnu@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/nx-linux-arm64-gnu@npm:20.2.0" +"@nx/nx-linux-arm64-gnu@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/nx-linux-arm64-gnu@npm:20.2.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard @@ -3474,9 +3475,9 @@ __metadata: languageName: node linkType: hard -"@nx/nx-linux-arm64-musl@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/nx-linux-arm64-musl@npm:20.2.0" +"@nx/nx-linux-arm64-musl@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/nx-linux-arm64-musl@npm:20.2.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard @@ -3488,9 +3489,9 @@ __metadata: languageName: node linkType: hard -"@nx/nx-linux-x64-gnu@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/nx-linux-x64-gnu@npm:20.2.0" +"@nx/nx-linux-x64-gnu@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/nx-linux-x64-gnu@npm:20.2.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard @@ -3502,9 +3503,9 @@ __metadata: languageName: node linkType: hard -"@nx/nx-linux-x64-musl@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/nx-linux-x64-musl@npm:20.2.0" +"@nx/nx-linux-x64-musl@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/nx-linux-x64-musl@npm:20.2.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard @@ -3516,9 +3517,9 @@ __metadata: languageName: node linkType: hard -"@nx/nx-win32-arm64-msvc@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/nx-win32-arm64-msvc@npm:20.2.0" +"@nx/nx-win32-arm64-msvc@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/nx-win32-arm64-msvc@npm:20.2.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -3530,22 +3531,22 @@ __metadata: languageName: node linkType: hard -"@nx/nx-win32-x64-msvc@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/nx-win32-x64-msvc@npm:20.2.0" +"@nx/nx-win32-x64-msvc@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/nx-win32-x64-msvc@npm:20.2.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@nx/react@npm:^20.2.0": - version: 20.2.0 - resolution: "@nx/react@npm:20.2.0" - dependencies: - "@nx/devkit": "npm:20.2.0" - "@nx/eslint": "npm:20.2.0" - "@nx/js": "npm:20.2.0" - "@nx/module-federation": "npm:20.2.0" - "@nx/web": "npm:20.2.0" + version: 20.2.2 + resolution: "@nx/react@npm:20.2.2" + dependencies: + "@nx/devkit": "npm:20.2.2" + "@nx/eslint": "npm:20.2.2" + "@nx/js": "npm:20.2.2" + "@nx/module-federation": "npm:20.2.2" + "@nx/web": "npm:20.2.2" "@phenomnomnominal/tsquery": "npm:~5.0.1" "@svgr/webpack": "npm:^8.0.1" express: "npm:^4.19.2" @@ -3554,31 +3555,31 @@ __metadata: minimatch: "npm:9.0.3" picocolors: "npm:^1.1.0" tslib: "npm:^2.3.0" - checksum: 10c0/cced2f13662661f638b2fa087812bfb4a80d798ebb3bad8b0368de8fe8568abf6aaa38e9ff7303f0eaa699a8adad5d8af6248f65c2dfef3ceef81b5a890113fe + checksum: 10c0/7be8ac930cd05357d3d26e9743f2930fefc11ae5fef7beb1e193ff5b42a9d75aa7aeebd60ae218fbc9f03aee6c52e306b9bf605118bce64146e3a5fc265b5fd8 languageName: node linkType: hard -"@nx/web@npm:20.2.0": - version: 20.2.0 - resolution: "@nx/web@npm:20.2.0" +"@nx/web@npm:20.2.2": + version: 20.2.2 + resolution: "@nx/web@npm:20.2.2" dependencies: - "@nx/devkit": "npm:20.2.0" - "@nx/js": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" + "@nx/js": "npm:20.2.2" detect-port: "npm:^1.5.1" http-server: "npm:^14.1.0" picocolors: "npm:^1.1.0" tslib: "npm:^2.3.0" - checksum: 10c0/7e87d56bad7cb9763d13fe63a8dec6ebe71fb14a20a8ffc957183afc5b2dbc2f59718d5ac5201e31267fc672c15ff01d90fdecd93a9c68ee8209e02d8ca6bb7b + checksum: 10c0/be80ab0936ef77d3cb57c6119e13d747df6ec4855a6d716ec30e36f0ab834509a30ae51552ce1b59fb8427dc15c2cecf312b1fd71a9f9d02d557c251246c6a4d languageName: node linkType: hard "@nx/webpack@npm:^20.2.0": - version: 20.2.0 - resolution: "@nx/webpack@npm:20.2.0" + version: 20.2.2 + resolution: "@nx/webpack@npm:20.2.2" dependencies: "@babel/core": "npm:^7.23.2" - "@nx/devkit": "npm:20.2.0" - "@nx/js": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" + "@nx/js": "npm:20.2.2" "@phenomnomnominal/tsquery": "npm:~5.0.1" ajv: "npm:^8.12.0" autoprefixer: "npm:^10.4.9" @@ -3613,21 +3614,21 @@ __metadata: webpack-dev-server: "npm:^5.0.4" webpack-node-externals: "npm:^3.0.0" webpack-subresource-integrity: "npm:^5.1.0" - checksum: 10c0/d7c08b2b8662b15c6d2a22a807e18c5f5241cd9b1299b0922a6f930eeb2eec73aed11777a78d348f031ced64f340f6ab9d5bdc0a27822c34088c2da7068349d5 + checksum: 10c0/d94a07e83a8eacd8c6b9cfc6e9f0e34ec93507b72b2c8968d77ef2969aa3e3e11648c8ce2936422f5ba0c797985bd118c08f2b25b47ec0dd5ed57771f1a0d128 languageName: node linkType: hard -"@nx/workspace@npm:20.2.0, @nx/workspace@npm:^20.2.0": - version: 20.2.0 - resolution: "@nx/workspace@npm:20.2.0" +"@nx/workspace@npm:20.2.2, @nx/workspace@npm:^20.2.0": + version: 20.2.2 + resolution: "@nx/workspace@npm:20.2.2" dependencies: - "@nx/devkit": "npm:20.2.0" + "@nx/devkit": "npm:20.2.2" chalk: "npm:^4.1.0" enquirer: "npm:~2.3.6" - nx: "npm:20.2.0" + nx: "npm:20.2.2" tslib: "npm:^2.3.0" yargs-parser: "npm:21.1.1" - checksum: 10c0/babf28ae63f2dc4de816b3bd78225841866b7cad5fc18f19211e7bf2f198ad1d9d40044b5e404b31c10ffce2f13f8853d2caa3ce1790f6a4900946fc159f2bea + checksum: 10c0/ab3a7bd1787d7534682ac6b1dbe928aea168c15c95636f68fa7885f6da2f9e4da4ff34991c385bacc5f27f0bfd850ab1553883651c5f94f4162dbac8118e2c7b languageName: node linkType: hard @@ -3801,13 +3802,13 @@ __metadata: linkType: hard "@playwright/test@npm:^1.36.0": - version: 1.49.0 - resolution: "@playwright/test@npm:1.49.0" + version: 1.49.1 + resolution: "@playwright/test@npm:1.49.1" dependencies: - playwright: "npm:1.49.0" + playwright: "npm:1.49.1" bin: playwright: cli.js - checksum: 10c0/2890d52ee45bd83b5501f17a77c77f12ba934d257fda4b288405c6d91f94b83c4fcbdff3c0be89c2aaeea3d13576b72ec9a70be667ff844b342044afd72a246e + checksum: 10c0/2fca0bb7b334f7a23c7c5dfa5dbe37b47794c56f39b747c8d74a2f95c339e7902a296f2f1dd32c47bdd723cfa92cee05219f1a5876725dc89a1871b9137a286d languageName: node linkType: hard @@ -3862,82 +3863,82 @@ __metadata: languageName: node linkType: hard -"@rspack/binding-darwin-arm64@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-darwin-arm64@npm:1.1.5" +"@rspack/binding-darwin-arm64@npm:1.1.6": + version: 1.1.6 + resolution: "@rspack/binding-darwin-arm64@npm:1.1.6" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rspack/binding-darwin-x64@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-darwin-x64@npm:1.1.5" +"@rspack/binding-darwin-x64@npm:1.1.6": + version: 1.1.6 + resolution: "@rspack/binding-darwin-x64@npm:1.1.6" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rspack/binding-linux-arm64-gnu@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-linux-arm64-gnu@npm:1.1.5" +"@rspack/binding-linux-arm64-gnu@npm:1.1.6": + version: 1.1.6 + resolution: "@rspack/binding-linux-arm64-gnu@npm:1.1.6" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rspack/binding-linux-arm64-musl@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-linux-arm64-musl@npm:1.1.5" +"@rspack/binding-linux-arm64-musl@npm:1.1.6": + version: 1.1.6 + resolution: "@rspack/binding-linux-arm64-musl@npm:1.1.6" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rspack/binding-linux-x64-gnu@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-linux-x64-gnu@npm:1.1.5" +"@rspack/binding-linux-x64-gnu@npm:1.1.6": + version: 1.1.6 + resolution: "@rspack/binding-linux-x64-gnu@npm:1.1.6" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rspack/binding-linux-x64-musl@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-linux-x64-musl@npm:1.1.5" +"@rspack/binding-linux-x64-musl@npm:1.1.6": + version: 1.1.6 + resolution: "@rspack/binding-linux-x64-musl@npm:1.1.6" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rspack/binding-win32-arm64-msvc@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-win32-arm64-msvc@npm:1.1.5" +"@rspack/binding-win32-arm64-msvc@npm:1.1.6": + version: 1.1.6 + resolution: "@rspack/binding-win32-arm64-msvc@npm:1.1.6" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rspack/binding-win32-ia32-msvc@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-win32-ia32-msvc@npm:1.1.5" +"@rspack/binding-win32-ia32-msvc@npm:1.1.6": + version: 1.1.6 + resolution: "@rspack/binding-win32-ia32-msvc@npm:1.1.6" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rspack/binding-win32-x64-msvc@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding-win32-x64-msvc@npm:1.1.5" +"@rspack/binding-win32-x64-msvc@npm:1.1.6": + version: 1.1.6 + resolution: "@rspack/binding-win32-x64-msvc@npm:1.1.6" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@rspack/binding@npm:1.1.5": - version: 1.1.5 - resolution: "@rspack/binding@npm:1.1.5" - dependencies: - "@rspack/binding-darwin-arm64": "npm:1.1.5" - "@rspack/binding-darwin-x64": "npm:1.1.5" - "@rspack/binding-linux-arm64-gnu": "npm:1.1.5" - "@rspack/binding-linux-arm64-musl": "npm:1.1.5" - "@rspack/binding-linux-x64-gnu": "npm:1.1.5" - "@rspack/binding-linux-x64-musl": "npm:1.1.5" - "@rspack/binding-win32-arm64-msvc": "npm:1.1.5" - "@rspack/binding-win32-ia32-msvc": "npm:1.1.5" - "@rspack/binding-win32-x64-msvc": "npm:1.1.5" +"@rspack/binding@npm:1.1.6": + version: 1.1.6 + resolution: "@rspack/binding@npm:1.1.6" + dependencies: + "@rspack/binding-darwin-arm64": "npm:1.1.6" + "@rspack/binding-darwin-x64": "npm:1.1.6" + "@rspack/binding-linux-arm64-gnu": "npm:1.1.6" + "@rspack/binding-linux-arm64-musl": "npm:1.1.6" + "@rspack/binding-linux-x64-gnu": "npm:1.1.6" + "@rspack/binding-linux-x64-musl": "npm:1.1.6" + "@rspack/binding-win32-arm64-msvc": "npm:1.1.6" + "@rspack/binding-win32-ia32-msvc": "npm:1.1.6" + "@rspack/binding-win32-x64-msvc": "npm:1.1.6" dependenciesMeta: "@rspack/binding-darwin-arm64": optional: true @@ -3957,16 +3958,16 @@ __metadata: optional: true "@rspack/binding-win32-x64-msvc": optional: true - checksum: 10c0/4a71e5e39240facf39bc6f35fbb8c32835bdc6e630a6fc7ace2f2078e55ae055dccec29872717709d571a47eef71c8348b6699bddfe6580cff255efe9d13ec5e + checksum: 10c0/1adc874a7795d84e1b01a0d958095adfe39199ad30b15a713b4daab2eb51ec8d48e0108b8b44a5a41767d2bb3d3f2d28fc3a975ae1ab3c324b09f8f1be0b87a4 languageName: node linkType: hard "@rspack/core@npm:^1.1.5": - version: 1.1.5 - resolution: "@rspack/core@npm:1.1.5" + version: 1.1.6 + resolution: "@rspack/core@npm:1.1.6" dependencies: "@module-federation/runtime-tools": "npm:0.5.1" - "@rspack/binding": "npm:1.1.5" + "@rspack/binding": "npm:1.1.6" "@rspack/lite-tapable": "npm:1.0.1" caniuse-lite: "npm:^1.0.30001616" peerDependencies: @@ -3974,7 +3975,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 10c0/17b1ee44a70abc9dc40ddea69b2d9c8166da486a84b99bac6c2ecf6bad52a45dfd3fed16c1515877cd2df17997a663985b5579efe0d9271e93dda9967de7f9d2 + checksum: 10c0/c435c6974de1683361d02144874fde2c33bfdc7575c706fd464d4f432178d0387d17567a64be11cf4a6650b33e6ebe693ac8ee1fccbea73c62366620add7c3d4 languageName: node linkType: hard @@ -4914,11 +4915,11 @@ __metadata: linkType: hard "@types/node@npm:*, @types/node@npm:>=10.0.0, @types/node@npm:^22.9.3": - version: 22.10.1 - resolution: "@types/node@npm:22.10.1" + version: 22.10.2 + resolution: "@types/node@npm:22.10.2" dependencies: undici-types: "npm:~6.20.0" - checksum: 10c0/0fbb6d29fa35d807f0223a4db709c598ac08d66820240a2cd6a8a69b8f0bc921d65b339d850a666b43b4e779f967e6ed6cf6f0fca3575e08241e6b900364c234 + checksum: 10c0/2c7b71a040f1ef5320938eca8ebc946e6905caa9bbf3d5665d9b3774a8d15ea9fab1582b849a6d28c7fc80756a62c5666bc66b69f42f4d5dafd1ccb193cdb4ac languageName: node linkType: hard @@ -4929,7 +4930,7 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.13": +"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.14": version: 15.7.14 resolution: "@types/prop-types@npm:15.7.14" checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1 @@ -4951,11 +4952,20 @@ __metadata: linkType: hard "@types/react-dom@npm:^18.0.0, @types/react-dom@npm:^18.3.1": - version: 18.3.2 - resolution: "@types/react-dom@npm:18.3.2" + version: 18.3.5 + resolution: "@types/react-dom@npm:18.3.5" + peerDependencies: + "@types/react": ^18.0.0 + checksum: 10c0/b163d35a6b32a79f5782574a7aeb12a31a647e248792bf437e6d596e2676961c394c5e3c6e91d1ce44ae90441dbaf93158efb4f051c0d61e2612f1cb04ce4faa + languageName: node + linkType: hard + +"@types/react-i18next@npm:^8.1.0": + version: 8.1.0 + resolution: "@types/react-i18next@npm:8.1.0" dependencies: - "@types/react": "npm:^18" - checksum: 10c0/22510231af67044a9542633b5b52ec16a8d71fa1da177f82428b8120d36619fd874c3b975b2eda6895baa53667f9fe8cba3acea1232a0244dffe8b11f6b32284 + react-i18next: "npm:*" + checksum: 10c0/0c62831244a2fb3a71880586dabfbbf4ab91a0ddd494b36e371b1443f9b884ebeb0019bee17636140ee2f8e0b20a47d200971b34ecab933b357fc7e4d81241ca languageName: node linkType: hard @@ -4981,11 +4991,11 @@ __metadata: linkType: hard "@types/react-transition-group@npm:^4.4.11": - version: 4.4.11 - resolution: "@types/react-transition-group@npm:4.4.11" - dependencies: - "@types/react": "npm:*" - checksum: 10c0/8fbf0dcc1b81985cdcebe3c59d769fe2ea3f4525f12c3a10a7429a59f93e303c82b2abb744d21cb762879f4514969d70a7ab11b9bf486f92213e8fe70e04098d + version: 4.4.12 + resolution: "@types/react-transition-group@npm:4.4.12" + peerDependencies: + "@types/react": "*" + checksum: 10c0/0441b8b47c69312c89ec0760ba477ba1a0808a10ceef8dc1c64b1013ed78517332c30f18681b0ec0b53542731f1ed015169fed1d127cc91222638ed955478ec7 languageName: node linkType: hard @@ -4998,13 +5008,13 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^18, @types/react@npm:^18.3.12": - version: 18.3.14 - resolution: "@types/react@npm:18.3.14" +"@types/react@npm:^18.3.12": + version: 18.3.16 + resolution: "@types/react@npm:18.3.16" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/d925fbfcf084238b93d1a0b5406d4cf9aeb37c4a1191559aa4ee107c2e55cc15327989140f03eddda4d471f5b935d4673fd74a86f451860edea18eae48ca44f8 + checksum: 10c0/9113d3003865eda07be0fb596f5bd8d7784b8900675090c56e75bdee45499f0b0de2481cbbeb5980c3b4ad18f234a49f39c9e62fd7b89a4e8530c74789f739bd languageName: node linkType: hard @@ -5270,13 +5280,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.17.0": - version: 8.17.0 - resolution: "@typescript-eslint/scope-manager@npm:8.17.0" +"@typescript-eslint/scope-manager@npm:8.18.0": + version: 8.18.0 + resolution: "@typescript-eslint/scope-manager@npm:8.18.0" dependencies: - "@typescript-eslint/types": "npm:8.17.0" - "@typescript-eslint/visitor-keys": "npm:8.17.0" - checksum: 10c0/0c08d14240bad4b3f6874f08ba80b29db1a6657437089a6f109db458c544d835bcdc06ba9140bb4f835233ba4326d9a86e6cf6bdb5209960d2f7025aa3191f4f + "@typescript-eslint/types": "npm:8.18.0" + "@typescript-eslint/visitor-keys": "npm:8.18.0" + checksum: 10c0/6bf6532fd43f2b55b9b47fa8b0217c5b5a03f022e869a6a21228fc3ae04c0ac6c5ae5d6026866d189ba424d2f98cc6fbd2a34f909d241c9b86c031afd808f90c languageName: node linkType: hard @@ -5298,19 +5308,17 @@ __metadata: linkType: hard "@typescript-eslint/type-utils@npm:^8.0.0": - version: 8.17.0 - resolution: "@typescript-eslint/type-utils@npm:8.17.0" + version: 8.18.0 + resolution: "@typescript-eslint/type-utils@npm:8.18.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.17.0" - "@typescript-eslint/utils": "npm:8.17.0" + "@typescript-eslint/typescript-estree": "npm:8.18.0" + "@typescript-eslint/utils": "npm:8.18.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.3.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/6138ec71b5692d4b5e0bf3d7f66a6fa4e91ddea7031907b0ac45a7693df0a2f4cc5bca7218311e0639620d636ceb7efec83a137dfcd5938304d873b774fcc8bd + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/c0fcf201c3b53f9374c0571198a639c81536170141caa08fd0f47094a596b1f82f839a849eac5832f954345c567dccb45b2ee1c0872c513331165f7bcb812396 languageName: node linkType: hard @@ -5321,10 +5329,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:8.17.0": - version: 8.17.0 - resolution: "@typescript-eslint/types@npm:8.17.0" - checksum: 10c0/26b1bf9dfc3ee783c85c6f354b84c28706d5689d777f3ff2de2cb496e45f9d0189c0d561c03ccbc8b24712438be17cf63dd0871ff3ca2083e7f48749770d1893 +"@typescript-eslint/types@npm:8.18.0": + version: 8.18.0 + resolution: "@typescript-eslint/types@npm:8.18.0" + checksum: 10c0/2dd7468c3f1c305545268b72c3a333488e6ab1b628c5f65081d895866422b9376c21634a7aac437805f84b22e352b6a8fc4dcf925ef4a8fd7d1898b8359f71be languageName: node linkType: hard @@ -5347,22 +5355,21 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.17.0, @typescript-eslint/typescript-estree@npm:^8.16.0": - version: 8.17.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.17.0" +"@typescript-eslint/typescript-estree@npm:8.18.0, @typescript-eslint/typescript-estree@npm:^8.16.0": + version: 8.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.18.0" dependencies: - "@typescript-eslint/types": "npm:8.17.0" - "@typescript-eslint/visitor-keys": "npm:8.17.0" + "@typescript-eslint/types": "npm:8.18.0" + "@typescript-eslint/visitor-keys": "npm:8.18.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" minimatch: "npm:^9.0.4" semver: "npm:^7.6.0" ts-api-utils: "npm:^1.3.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/523013f9b5cf2c58c566868e4c3b0b9ac1b4807223a6d64e2a7c58e01e53b6587ba61f1a8241eade361f3f426d6057657515473176141ef8aebb352bc0d223ce + peerDependencies: + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/87b432b190b627314f007b17b2371898db78baaa3df67a0d9a94d080d88a7a307906b54a735084cacef37f6421e2b9c3320040617e73fe54eac2bf22c610f1ec languageName: node linkType: hard @@ -5383,20 +5390,18 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.17.0, @typescript-eslint/utils@npm:^8.0.0": - version: 8.17.0 - resolution: "@typescript-eslint/utils@npm:8.17.0" +"@typescript-eslint/utils@npm:8.18.0, @typescript-eslint/utils@npm:^8.0.0": + version: 8.18.0 + resolution: "@typescript-eslint/utils@npm:8.18.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:8.17.0" - "@typescript-eslint/types": "npm:8.17.0" - "@typescript-eslint/typescript-estree": "npm:8.17.0" + "@typescript-eslint/scope-manager": "npm:8.18.0" + "@typescript-eslint/types": "npm:8.18.0" + "@typescript-eslint/typescript-estree": "npm:8.18.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/a9785ae5f7e7b51d521dc3f48b15093948e4fcd03352c0b60f39bae366cbc935947d215f91e2ae3182d52fa6affb5ccbb50feff487bd1209011f3e0da02cdf07 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/58a2fc1e404d1f905c2a958d995824eb4abc6e73836b186717550677f8b1d17954acc369feddb83277350915388bc3d8b721423c37777b8b8017fc29c89ec6ee languageName: node linkType: hard @@ -5410,20 +5415,20 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.17.0": - version: 8.17.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.17.0" +"@typescript-eslint/visitor-keys@npm:8.18.0": + version: 8.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.18.0" dependencies: - "@typescript-eslint/types": "npm:8.17.0" + "@typescript-eslint/types": "npm:8.18.0" eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/9144c4e4a63034fb2031a0ee1fc77e80594f30cab3faafa9a1f7f83782695774dd32fac8986f260698b4e150b4dd52444f2611c07e4c101501f08353eb47c82c + checksum: 10c0/d4cdc2adab553098b5be7117fb7df76fb66cfd380528881a0a8c2a9eee03bf8baddda07d15ca0bd3ed8b35c379b3f449292183df18e3e81898dbcadafcb708b8 languageName: node linkType: hard "@ungap/structured-clone@npm:^1.2.0": - version: 1.2.0 - resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d + version: 1.2.1 + resolution: "@ungap/structured-clone@npm:1.2.1" + checksum: 10c0/127afbcc75ff1532f7b1eb85ee992f9faa70e8d5bb2558da05355d423b966fc279d0a485bf19da2883280e7c299ae4170809a72e78eab086da71c6bcdda5d1e2 languageName: node linkType: hard @@ -5730,12 +5735,10 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": - version: 7.1.1 - resolution: "agent-base@npm:7.1.1" - dependencies: - debug: "npm:^4.3.4" - checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 languageName: node linkType: hard @@ -6646,7 +6649,7 @@ __metadata: languageName: node linkType: hard -"bson@npm:^6.10.0": +"bson@npm:^6.10.1": version: 6.10.1 resolution: "bson@npm:6.10.1" checksum: 10c0/89f0ee7a45211648afa5a32d7f4d7ce436e20614b7c5d37c9fd6bc6e9464eec0ddeab8432a836d819bef1f4896256d874044603cf5f4b2123c00734842799601 @@ -6768,13 +6771,13 @@ __metadata: languageName: node linkType: hard -"call-bind-apply-helpers@npm:^1.0.0": - version: 1.0.0 - resolution: "call-bind-apply-helpers@npm:1.0.0" +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "call-bind-apply-helpers@npm:1.0.1" dependencies: es-errors: "npm:^1.3.0" function-bind: "npm:^1.1.2" - checksum: 10c0/fb91dbfcb0b54b025e88dba660e2a9fe6ca69107dab2f6696e1f7cf8b9c35aafc4879ac3a47d0fa9da55eecf767f2191f5651648dce920ac9b49df0ceb65063f + checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c languageName: node linkType: hard @@ -6790,6 +6793,16 @@ __metadata: languageName: node linkType: hard +"call-bound@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bound@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.8" + get-intrinsic: "npm:^1.2.5" + checksum: 10c0/19761e1ce55578f9c41bed06b162de22058d0228cd9c14215d8db73716594ef61b87e5e7486855ea04becd86f55ed08ed81e2c25a4a56962ca12e6b0e772f141 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -6824,9 +6837,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001616, caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001669": - version: 1.0.30001687 - resolution: "caniuse-lite@npm:1.0.30001687" - checksum: 10c0/9ca0f6d33dccaf4692339d0fda50e03e4dd7eb7f25faabd1cb33e2099d9a76b0bc30c37be3315e91c1d990da1b5cc864eee2077494f4d0ba94d68b48fe2ea7f1 + version: 1.0.30001688 + resolution: "caniuse-lite@npm:1.0.30001688" + checksum: 10c0/2ef3145ac69ea5faf403b613912a3a72006db2e004e58abcf40dc89904aa05568032b5a6dcfb267556944fd380a9b018ad645f93d84e543bed3471e4950a89f4 languageName: node linkType: hard @@ -8283,9 +8296,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.41": - version: 1.5.71 - resolution: "electron-to-chromium@npm:1.5.71" - checksum: 10c0/f6fdeec0e1d68634cf92c267bdce3e50af947ce2c8fb1034df3e738c536b3033e311ad0fb9a6c4c35f678f10a299e4f78fdfcedbaa78d8992fedc443a7363d6d + version: 1.5.73 + resolution: "electron-to-chromium@npm:1.5.73" + checksum: 10c0/b97118d469f2b3b7a816932004cd36d82879829904ca4a8daf70eaefbe686a23afa6e39e0ad0cdc39d00a9ebab97160d072b786fdeb6964f13fb15aa688958f1 languageName: node linkType: hard @@ -8466,7 +8479,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.5, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5": +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5": version: 1.23.5 resolution: "es-abstract@npm:1.23.5" dependencies: @@ -8520,7 +8533,7 @@ __metadata: languageName: node linkType: hard -"es-define-property@npm:^1.0.0": +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": version: 1.0.1 resolution: "es-define-property@npm:1.0.1" checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c @@ -9173,13 +9186,13 @@ __metadata: linkType: hard "express-jwt@npm:^8.4.1": - version: 8.4.1 - resolution: "express-jwt@npm:8.4.1" + version: 8.5.1 + resolution: "express-jwt@npm:8.5.1" dependencies: "@types/jsonwebtoken": "npm:^9" express-unless: "npm:^2.1.3" jsonwebtoken: "npm:^9.0.0" - checksum: 10c0/660cd1eb3f81befb9cf0e1aa928864960fab98dac9efadcd3aa07b85849bf4c61c379791422c6a37848f55177248fade403bdb7e203dc63a93fbf2328855f589 + checksum: 10c0/62c7123b96c2045232096f7a78f9af850eac251dae22b0e8610c293023498939b32ed70bf8ff407aa0dbfba83689188775ff9d8b832bd6a1a60a0eae9bb35214 languageName: node linkType: hard @@ -9248,7 +9261,7 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.19.2": +"express@npm:^4.19.2, express@npm:^4.21.2": version: 4.21.2 resolution: "express@npm:4.21.2" dependencies: @@ -9455,6 +9468,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.4.2": + version: 6.4.2 + resolution: "fdir@npm:6.4.2" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/34829886f34a3ca4170eca7c7180ec4de51a3abb4d380344063c0ae2e289b11d2ba8b724afee974598c83027fea363ff598caf2b51bc4e6b1e0d8b80cc530573 + languageName: node + linkType: hard + "figures@npm:3.2.0, figures@npm:^3.2.0": version: 3.2.0 resolution: "figures@npm:3.2.0" @@ -9960,16 +9985,21 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": - version: 1.2.4 - resolution: "get-intrinsic@npm:1.2.4" +"get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6": + version: 1.2.6 + resolution: "get-intrinsic@npm:1.2.6" dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + dunder-proto: "npm:^1.0.0" + es-define-property: "npm:^1.0.1" es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" function-bind: "npm:^1.1.2" - has-proto: "npm:^1.0.1" - has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.0" - checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7 + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.0.0" + checksum: 10c0/0f1ea6d807d97d074e8a31ac698213a12757fcfa9a8f4778263d2e4702c40fe83198aadd3dba2e99aabc2e4cf8a38345545dbb0518297d3df8b00b56a156c32a languageName: node linkType: hard @@ -10181,7 +10211,7 @@ __metadata: languageName: node linkType: hard -"gopd@npm:^1.0.1, gopd@npm:^1.1.0, gopd@npm:^1.2.0": +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": version: 1.2.0 resolution: "gopd@npm:1.2.0" checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead @@ -10265,7 +10295,7 @@ __metadata: languageName: node linkType: hard -"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": +"has-proto@npm:^1.0.3": version: 1.2.0 resolution: "has-proto@npm:1.2.0" dependencies: @@ -10274,7 +10304,7 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": version: 1.1.0 resolution: "has-symbols@npm:1.1.0" checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e @@ -10377,7 +10407,7 @@ __metadata: languageName: node linkType: hard -"html-entities@npm:^2.1.0, html-entities@npm:^2.4.0": +"html-entities@npm:^2.1.0": version: 2.5.2 resolution: "html-entities@npm:2.5.2" checksum: 10c0/f20ffb4326606245c439c231de40a7c560607f639bf40ffbfb36b4c70729fd95d7964209045f1a4e62fe17f2364cef3d6e49b02ea09016f207fde51c2211e481 @@ -10490,7 +10520,7 @@ __metadata: languageName: node linkType: hard -"http-proxy-middleware@npm:^2.0.3": +"http-proxy-middleware@npm:^2.0.7": version: 2.0.7 resolution: "http-proxy-middleware@npm:2.0.7" dependencies: @@ -10588,12 +10618,12 @@ __metadata: linkType: hard "https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.5": - version: 7.0.5 - resolution: "https-proxy-agent@npm:7.0.5" + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" dependencies: - agent-base: "npm:^7.0.2" + agent-base: "npm:^7.1.2" debug: "npm:4" - checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac languageName: node linkType: hard @@ -10626,11 +10656,11 @@ __metadata: linkType: hard "i18next-browser-languagedetector@npm:^8.0.0": - version: 8.0.0 - resolution: "i18next-browser-languagedetector@npm:8.0.0" + version: 8.0.2 + resolution: "i18next-browser-languagedetector@npm:8.0.2" dependencies: "@babel/runtime": "npm:^7.23.2" - checksum: 10c0/08a7c747ec18a0743b54390a0b42836d814b15fb49c92b90c259298e6a6e7e001ff9df99d0fd308283a34fceea53b4d9053aa1695a37f696bc04160017bbb524 + checksum: 10c0/b4ed7531ab503da12e043209c396b1aa9a0bdb2bbb397c0c85605bf16f08bf4cdacf9c1866cd32be1f19266488accb8d15dc8a76a6046e9ee359284199a8dcbc languageName: node linkType: hard @@ -10644,8 +10674,8 @@ __metadata: linkType: hard "i18next@npm:^24.0.5": - version: 24.0.5 - resolution: "i18next@npm:24.0.5" + version: 24.1.0 + resolution: "i18next@npm:24.1.0" dependencies: "@babel/runtime": "npm:^7.23.2" peerDependencies: @@ -10653,7 +10683,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/3bcaf95c2f9a9025bbbc0efaea24f29197c6cc9465ad9fc565974d06d34e38bb7646bf79eab0a2906815cbb91b2cbf73bbf4f20aecf4fec7591def464b92796b + checksum: 10c0/90cc4c31871755493cc78695f30c658b7a7d0d986d0b1c006346e5855822203f3a9f84485ce734778268f9c84ff767c7d75aed6d1674a7abdb848ea6b82df28e languageName: node linkType: hard @@ -10914,11 +10944,13 @@ __metadata: linkType: hard "is-data-view@npm:^1.0.1": - version: 1.0.1 - resolution: "is-data-view@npm:1.0.1" + version: 1.0.2 + resolution: "is-data-view@npm:1.0.2" dependencies: + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" is-typed-array: "npm:^1.1.13" - checksum: 10c0/a3e6ec84efe303da859107aed9b970e018e2bee7ffcb48e2f8096921a493608134240e672a2072577e5f23a729846241d9634806e8a0e51d9129c56d5f65442d + checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153 languageName: node linkType: hard @@ -11106,14 +11138,14 @@ __metadata: linkType: hard "is-regex@npm:^1.1.4": - version: 1.2.0 - resolution: "is-regex@npm:1.2.0" + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" dependencies: - call-bind: "npm:^1.0.7" - gopd: "npm:^1.1.0" + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" has-tostringtag: "npm:^1.0.2" hasown: "npm:^2.0.2" - checksum: 10c0/a407fefb871ceedebe718c35d2f4ba75dc3360c335e99ff2f8bc4488bdcc7b0b3bb78a208d1aa896cf2745630b97752ffd40b501c10bb7afc31d23c2e0092e8d + checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 languageName: node linkType: hard @@ -11366,15 +11398,16 @@ __metadata: linkType: hard "iterator.prototype@npm:^1.1.3": - version: 1.1.3 - resolution: "iterator.prototype@npm:1.1.3" + version: 1.1.4 + resolution: "iterator.prototype@npm:1.1.4" dependencies: - define-properties: "npm:^1.2.1" - get-intrinsic: "npm:^1.2.1" - has-symbols: "npm:^1.0.3" - reflect.getprototypeof: "npm:^1.0.4" - set-function-name: "npm:^2.0.1" - checksum: 10c0/68b0320c14291fbb3d8ed5a17e255d3127e7971bec19108076667e79c9ff4c7d69f99de4b0b3075c789c3f318366d7a0a35bb086eae0f2cf832dd58465b2f9e6 + define-data-property: "npm:^1.1.4" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.6" + has-symbols: "npm:^1.1.0" + reflect.getprototypeof: "npm:^1.0.8" + set-function-name: "npm:^2.0.2" + checksum: 10c0/e63fcb5c1094192f43795b836fae9149a7dc2d445425958045e8e193df428407f909efca21bfdf0d885668ae8204681984afac7dd75478118e62f3cd3959c538 languageName: node linkType: hard @@ -11966,7 +11999,16 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^3.0.2, jsesc@npm:~3.0.2": +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + +"jsesc@npm:~3.0.2": version: 3.0.2 resolution: "jsesc@npm:3.0.2" bin: @@ -12869,6 +12911,13 @@ __metadata: languageName: node linkType: hard +"math-intrinsics@npm:^1.0.0": + version: 1.0.0 + resolution: "math-intrinsics@npm:1.0.0" + checksum: 10c0/470ee2f267b4b3698eb9faa7f0bcf88696d87e2eeab25bba867dc676c09ddbae9b6f2e8ac7a2c1f0c9c2c5299c2a89f4f1f6d0e70d682725e2e7fca7507eef9f + languageName: node + linkType: hard + "mdn-data@npm:2.0.28": version: 2.0.28 resolution: "mdn-data@npm:2.0.28" @@ -12900,14 +12949,14 @@ __metadata: linkType: hard "memfs@npm:^4.6.0": - version: 4.14.1 - resolution: "memfs@npm:4.14.1" + version: 4.15.0 + resolution: "memfs@npm:4.15.0" dependencies: "@jsonjoy.com/json-pack": "npm:^1.0.3" "@jsonjoy.com/util": "npm:^1.3.0" tree-dump: "npm:^1.0.1" tslib: "npm:^2.0.0" - checksum: 10c0/2cf3836aa753fd846a4f5b9d6d5e22d9f2523eb4203a12b34a2c4baa7d6d16b37e30d7bab580c52a6f94a3dfdd14309128fe3e1aa5dacb5493903ca60efc54be + checksum: 10c0/be161036983ad517b8a6cb5e4493e6e0f1cc44024bc2135d51d9b28e823bb6a68bb00233900a1e9b93e942e8f581747f432b2224eb26c0045d97f8c84d25bd27 languageName: node linkType: hard @@ -13301,15 +13350,15 @@ __metadata: linkType: hard "mongodb@npm:^6.8.0, mongodb@npm:^6.9.0": - version: 6.11.0 - resolution: "mongodb@npm:6.11.0" + version: 6.12.0 + resolution: "mongodb@npm:6.12.0" dependencies: "@mongodb-js/saslprep": "npm:^1.1.9" - bson: "npm:^6.10.0" + bson: "npm:^6.10.1" mongodb-connection-string-url: "npm:^3.0.0" peerDependencies: "@aws-sdk/credential-providers": ^3.188.0 - "@mongodb-js/zstd": ^1.1.0 + "@mongodb-js/zstd": ^1.1.0 || ^2.0.0 gcp-metadata: ^5.2.0 kerberos: ^2.0.1 mongodb-client-encryption: ">=6.0.0 <7" @@ -13330,7 +13379,7 @@ __metadata: optional: true socks: optional: true - checksum: 10c0/a3d38aef41d1656058ff6a6aecc741d0308864752ac58ffc990dcd021db514e2855390bb9f107f5b99777bc4a720c84a40818afb4ac12b4e19760ce36a664206 + checksum: 10c0/627d28e1ac6380b81e90880cf88f1bacac9109e18301dd6506d67b0ef58fcc1d15acd3e2527820dfedd81860be737a115f4bd48d6d4a689531c5a1d58587606e languageName: node linkType: hard @@ -13580,9 +13629,9 @@ __metadata: linkType: hard "node-releases@npm:^2.0.18": - version: 2.0.18 - resolution: "node-releases@npm:2.0.18" - checksum: 10c0/786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa languageName: node linkType: hard @@ -13782,21 +13831,21 @@ __metadata: languageName: node linkType: hard -"nx@npm:20.2.0": - version: 20.2.0 - resolution: "nx@npm:20.2.0" +"nx@npm:20.2.2": + version: 20.2.2 + resolution: "nx@npm:20.2.2" dependencies: "@napi-rs/wasm-runtime": "npm:0.2.4" - "@nx/nx-darwin-arm64": "npm:20.2.0" - "@nx/nx-darwin-x64": "npm:20.2.0" - "@nx/nx-freebsd-x64": "npm:20.2.0" - "@nx/nx-linux-arm-gnueabihf": "npm:20.2.0" - "@nx/nx-linux-arm64-gnu": "npm:20.2.0" - "@nx/nx-linux-arm64-musl": "npm:20.2.0" - "@nx/nx-linux-x64-gnu": "npm:20.2.0" - "@nx/nx-linux-x64-musl": "npm:20.2.0" - "@nx/nx-win32-arm64-msvc": "npm:20.2.0" - "@nx/nx-win32-x64-msvc": "npm:20.2.0" + "@nx/nx-darwin-arm64": "npm:20.2.2" + "@nx/nx-darwin-x64": "npm:20.2.2" + "@nx/nx-freebsd-x64": "npm:20.2.2" + "@nx/nx-linux-arm-gnueabihf": "npm:20.2.2" + "@nx/nx-linux-arm64-gnu": "npm:20.2.2" + "@nx/nx-linux-arm64-musl": "npm:20.2.2" + "@nx/nx-linux-x64-gnu": "npm:20.2.2" + "@nx/nx-linux-x64-musl": "npm:20.2.2" + "@nx/nx-win32-arm64-msvc": "npm:20.2.2" + "@nx/nx-win32-x64-msvc": "npm:20.2.2" "@yarnpkg/lockfile": "npm:^1.1.0" "@yarnpkg/parsers": "npm:3.0.2" "@zkochan/js-yaml": "npm:0.0.7" @@ -13826,6 +13875,7 @@ __metadata: tmp: "npm:~0.2.1" tsconfig-paths: "npm:^4.1.2" tslib: "npm:^2.3.0" + yaml: "npm:^2.6.0" yargs: "npm:^17.6.2" yargs-parser: "npm:21.1.1" peerDependencies: @@ -13860,7 +13910,7 @@ __metadata: bin: nx: bin/nx.js nx-cloud: bin/nx-cloud.js - checksum: 10c0/6c03afc6a3edffff7d737d7a668d8ea83dcba52e77a7fa591aca377dde4a45851971823fa453772c8a610235aa8c2e70d040bf1390ee96cb234cd1a4f40680ff + checksum: 10c0/2046068295be6d33fe11505978ec1a770af272c959ef9aba5341c343f590dbed634958a07dc365d90e9feb0b62b9a06289c7cf3d88090e13062ece13e187b6f3 languageName: node linkType: hard @@ -13871,7 +13921,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.13.1, object-inspect@npm:^1.13.3": +"object-inspect@npm:^1.13.3": version: 1.13.3 resolution: "object-inspect@npm:1.13.3" checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 @@ -14359,6 +14409,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + "pify@npm:^2.2.0, pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" @@ -14410,27 +14467,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.49.0": - version: 1.49.0 - resolution: "playwright-core@npm:1.49.0" +"playwright-core@npm:1.49.1": + version: 1.49.1 + resolution: "playwright-core@npm:1.49.1" bin: playwright-core: cli.js - checksum: 10c0/22c1a72fabdcc87bd1cd4d40a032d2c5b94cf94ba7484dc182048c3fa1c8ec26180b559d8cac4ca9870e8fd6bdf5ef9d9f54e7a31fd60d67d098fcffc5e4253b + checksum: 10c0/990b619c75715cd98b2c10c1180a126e3a454b247063b8352bc67792fe01183ec07f31d30c8714c3768cefed12886d1d64ac06da701f2baafc2cad9b439e3919 languageName: node linkType: hard -"playwright@npm:1.49.0": - version: 1.49.0 - resolution: "playwright@npm:1.49.0" +"playwright@npm:1.49.1": + version: 1.49.1 + resolution: "playwright@npm:1.49.1" dependencies: fsevents: "npm:2.3.2" - playwright-core: "npm:1.49.0" + playwright-core: "npm:1.49.1" dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 10c0/e94d662747cd147d0573570fec90dadc013c1097595714036fc8934a075c5a82ab04a49111b03b1f762ea86429bdb7c94460901896901e20970b30ce817cc93f + checksum: 10c0/2368762c898920d4a0a5788b153dead45f9c36c3f5cf4d2af5228d0b8ea65823e3bbe998877950a2b9bb23a211e4633996f854c6188769dc81a25543ac818ab5 languageName: node linkType: hard @@ -14637,15 +14694,15 @@ __metadata: linkType: hard "postcss-modules-local-by-default@npm:^4.0.5": - version: 4.1.0 - resolution: "postcss-modules-local-by-default@npm:4.1.0" + version: 4.2.0 + resolution: "postcss-modules-local-by-default@npm:4.2.0" dependencies: icss-utils: "npm:^5.0.0" postcss-selector-parser: "npm:^7.0.0" postcss-value-parser: "npm:^4.1.0" peerDependencies: postcss: ^8.1.0 - checksum: 10c0/d6e47d2488c6fcde2c91696d15ef094e6b1cdd8d5dcdf20c6ac72567fcc4778f5f80b8381839232b37242f200b4d83e98a947bf3b3315b0bf673ea42528a3caf + checksum: 10c0/b0b83feb2a4b61f5383979d37f23116c99bc146eba1741ca3cf1acca0e4d0dbf293ac1810a6ab4eccbe1ee76440dd0a9eb2db5b3bba4f99fc1b3ded16baa6358 languageName: node linkType: hard @@ -15079,7 +15136,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.11.0, qs@npm:^6.4.0": +"qs@npm:6.13.1, qs@npm:^6.11.0, qs@npm:^6.4.0": version: 6.13.1 resolution: "qs@npm:6.13.1" dependencies: @@ -15170,9 +15227,9 @@ __metadata: languageName: node linkType: hard -"react-i18next@npm:^15.1.3": - version: 15.1.3 - resolution: "react-i18next@npm:15.1.3" +"react-i18next@npm:*, react-i18next@npm:^15.1.3": + version: 15.1.4 + resolution: "react-i18next@npm:15.1.4" dependencies: "@babel/runtime": "npm:^7.25.0" html-parse-stringify: "npm:^3.0.1" @@ -15184,7 +15241,7 @@ __metadata: optional: true react-native: optional: true - checksum: 10c0/2f8de1757f5b4d91e034f621c0bf6422fad3cde0687d11d4fe87822db86f264c6c3512a26fafe03d91ea691b3c441ba5ca490f4e5611e147df985ee133265089 + checksum: 10c0/6c1b053fc530c3a750c8cb0a090a54cd3580cbe2103bea26579a2855a6c0a8be7e1cbffda732d4ec9c9aa8724569783dc340564855e1fe76f48c24683fe0b3d4 languageName: node linkType: hard @@ -15202,13 +15259,20 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0, react-is@npm:^18.3.1": +"react-is@npm:^18.0.0": version: 18.3.1 resolution: "react-is@npm:18.3.1" checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 languageName: node linkType: hard +"react-is@npm:^19.0.0": + version: 19.0.0 + resolution: "react-is@npm:19.0.0" + checksum: 10c0/d1be8e8500cf04f76df71942a21ef3a71266397a383d7ec8885f35190df818d35c65efd35aed7be47a89ad99aaff2c52e0c4e39e8930844a6b997622e50625a8 + languageName: node + linkType: hard + "react-refresh@npm:^0.10.0": version: 0.10.0 resolution: "react-refresh@npm:0.10.0" @@ -15324,7 +15388,7 @@ __metadata: languageName: node linkType: hard -"reflect.getprototypeof@npm:^1.0.4, reflect.getprototypeof@npm:^1.0.6": +"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.8": version: 1.0.8 resolution: "reflect.getprototypeof@npm:1.0.8" dependencies: @@ -15647,14 +15711,15 @@ __metadata: linkType: hard "safe-array-concat@npm:^1.1.2": - version: 1.1.2 - resolution: "safe-array-concat@npm:1.1.2" + version: 1.1.3 + resolution: "safe-array-concat@npm:1.1.3" dependencies: - call-bind: "npm:^1.0.7" - get-intrinsic: "npm:^1.2.4" - has-symbols: "npm:^1.0.3" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + has-symbols: "npm:^1.1.0" isarray: "npm:^2.0.5" - checksum: 10c0/12f9fdb01c8585e199a347eacc3bae7b5164ae805cdc8c6707199dbad5b9e30001a50a43c4ee24dc9ea32dbb7279397850e9208a7e217f4d8b1cf5d90129dec9 + checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d languageName: node linkType: hard @@ -15769,14 +15834,14 @@ __metadata: linkType: hard "schema-utils@npm:^4.0.0, schema-utils@npm:^4.0.1, schema-utils@npm:^4.2.0": - version: 4.2.0 - resolution: "schema-utils@npm:4.2.0" + version: 4.3.0 + resolution: "schema-utils@npm:4.3.0" dependencies: "@types/json-schema": "npm:^7.0.9" ajv: "npm:^8.9.0" ajv-formats: "npm:^2.1.1" ajv-keywords: "npm:^5.1.0" - checksum: 10c0/8dab7e7800316387fd8569870b4b668cfcecf95ac551e369ea799bbcbfb63fb0365366d4b59f64822c9f7904d8c5afcfaf5a6124a4b08783e558cd25f299a6b4 + checksum: 10c0/c23f0fa73ef71a01d4a2bb7af4c91e0d356ec640e071aa2d06ea5e67f042962bb7ac7c29a60a295bb0125878801bc3209197a2b8a833dd25bd38e37c3ed21427 languageName: node linkType: hard @@ -15925,7 +15990,7 @@ __metadata: languageName: node linkType: hard -"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": +"set-function-name@npm:^2.0.2": version: 2.0.2 resolution: "set-function-name@npm:2.0.2" dependencies: @@ -15990,15 +16055,51 @@ __metadata: languageName: node linkType: hard +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": - version: 1.0.6 - resolution: "side-channel@npm:1.0.6" + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.7" es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.4" - object-inspect: "npm:^1.13.1" - checksum: 10c0/d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 languageName: node linkType: hard @@ -16156,13 +16257,13 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^8.0.3": - version: 8.0.4 - resolution: "socks-proxy-agent@npm:8.0.4" + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" dependencies: - agent-base: "npm:^7.1.1" + agent-base: "npm:^7.1.2" debug: "npm:^4.3.4" socks: "npm:^2.8.3" - checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 languageName: node linkType: hard @@ -16481,25 +16582,29 @@ __metadata: linkType: hard "string.prototype.trim@npm:^1.2.9": - version: 1.2.9 - resolution: "string.prototype.trim@npm:1.2.9" + version: 1.2.10 + resolution: "string.prototype.trim@npm:1.2.10" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-data-property: "npm:^1.1.4" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.0" + es-abstract: "npm:^1.23.5" es-object-atoms: "npm:^1.0.0" - checksum: 10c0/dcef1a0fb61d255778155006b372dff8cc6c4394bc39869117e4241f41a2c52899c0d263ffc7738a1f9e61488c490b05c0427faa15151efad721e1a9fb2663c2 + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8 languageName: node linkType: hard "string.prototype.trimend@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimend@npm:1.0.8" + version: 1.0.9 + resolution: "string.prototype.trimend@npm:1.0.9" dependencies: - call-bind: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" define-properties: "npm:^1.2.1" es-object-atoms: "npm:^1.0.0" - checksum: 10c0/0a0b54c17c070551b38e756ae271865ac6cc5f60dabf2e7e343cceae7d9b02e1a1120a824e090e79da1b041a74464e8477e2da43e2775c85392be30a6f60963c + checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6 languageName: node linkType: hard @@ -16937,21 +17042,31 @@ __metadata: languageName: node linkType: hard -"tldts-core@npm:^6.1.65": - version: 6.1.65 - resolution: "tldts-core@npm:6.1.65" - checksum: 10c0/8e08eec0e8fce756ead9149e3ff3c42f00c96c8bbdf042d357a9b3c93cba6111f8074c8e72967344936e092f388e4e3a574ad5eb93cec8c3855c630d2bec1ccf +"tinyglobby@npm:^0.2.10": + version: 0.2.10 + resolution: "tinyglobby@npm:0.2.10" + dependencies: + fdir: "npm:^6.4.2" + picomatch: "npm:^4.0.2" + checksum: 10c0/ce946135d39b8c0e394e488ad59f4092e8c4ecd675ef1bcd4585c47de1b325e61ec6adfbfbe20c3c2bfa6fd674c5b06de2a2e65c433f752ae170aff11793e5ef + languageName: node + linkType: hard + +"tldts-core@npm:^6.1.67": + version: 6.1.67 + resolution: "tldts-core@npm:6.1.67" + checksum: 10c0/7841c8d53250bdadfdd049f5f7cde4a71f08b4a33a3f024dd62a2d68512e9eca44141395abad3841aa5024a48b47a6e11a4ef23715baab3be8986d2ed2513431 languageName: node linkType: hard "tldts@npm:^6.1.32": - version: 6.1.65 - resolution: "tldts@npm:6.1.65" + version: 6.1.67 + resolution: "tldts@npm:6.1.67" dependencies: - tldts-core: "npm:^6.1.65" + tldts-core: "npm:^6.1.67" bin: tldts: bin/cli.js - checksum: 10c0/47ee4d5efcb6e32eb3a4968ae3ed4b441d88cde34eaa23368a12ac49c17939510499f17b61617e0af129d3c02573ae97bca7fa62e7aa95146b7f5b3c715c0206 + checksum: 10c0/074edcd718ede006ff0e189701a4fda472686998aa6155ef4920e3ca17f4b54afb7f1afc9668ce33a3de523dd562eb9266e0610efd05cb2d9e9f19d9fa7510d4 languageName: node linkType: hard @@ -17729,8 +17844,8 @@ __metadata: linkType: hard "webpack-dev-server@npm:^5.0.4": - version: 5.1.0 - resolution: "webpack-dev-server@npm:5.1.0" + version: 5.2.0 + resolution: "webpack-dev-server@npm:5.2.0" dependencies: "@types/bonjour": "npm:^3.5.13" "@types/connect-history-api-fallback": "npm:^1.5.4" @@ -17745,10 +17860,9 @@ __metadata: colorette: "npm:^2.0.10" compression: "npm:^1.7.4" connect-history-api-fallback: "npm:^2.0.0" - express: "npm:^4.19.2" + express: "npm:^4.21.2" graceful-fs: "npm:^4.2.6" - html-entities: "npm:^2.4.0" - http-proxy-middleware: "npm:^2.0.3" + http-proxy-middleware: "npm:^2.0.7" ipaddr.js: "npm:^2.1.0" launch-editor: "npm:^2.6.1" open: "npm:^10.0.3" @@ -17769,7 +17883,7 @@ __metadata: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: 10c0/303c72b743d649dec706aedaeea2f0e924e3fb4432aa5a1e43f807e7c6052817027ccf33f88adb566fa7ebf89f6aed551ce2c2d76b5ccaaaefade83fde7f7a38 + checksum: 10c0/afb2e51945ac54ef3039e11e377241e1cb97a8d3f526f39f13c3fa924c530fb6063200c2c3ae4e33e6bcc110d4abed777c09ce18e2d261012853d81f3c5820ab languageName: node linkType: hard @@ -18190,6 +18304,15 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^2.6.0": + version: 2.6.1 + resolution: "yaml@npm:2.6.1" + bin: + yaml: bin.mjs + checksum: 10c0/aebf07f61c72b38c74d2b60c3a3ccf89ee4da45bcd94b2bfb7899ba07a5257625a7c9f717c65a6fc511563d48001e01deb1d9e55f0133f3e2edf86039c8c1be7 + languageName: node + linkType: hard + "yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1"