From f3f792e0530eb1e9ee1a55d08f2f653ba425e710 Mon Sep 17 00:00:00 2001 From: Daniel Luiz Alves Date: Wed, 9 Jul 2025 23:43:57 -0300 Subject: [PATCH] feat(auth): enhance trusted device management for 2FA - Added lastUsedAt timestamp to the TrustedDevice model for tracking device usage. - Implemented new endpoints for retrieving and removing trusted devices. - Updated AuthService to manage trusted devices, including methods for getting and removing devices. - Enhanced the user interface to support trusted device management, including modals for removing devices. - Added translations for new messages related to trusted devices in multiple languages. --- apps/server/prisma/schema.prisma | 1 + apps/server/src/modules/auth/controller.ts | 43 + apps/server/src/modules/auth/routes.ts | 97 + apps/server/src/modules/auth/service.ts | 25 + .../modules/auth/trusted-device.service.ts | 21 +- apps/web/messages/ar-SA.json | 268 +- apps/web/messages/de-DE.json | 268 +- apps/web/messages/en-US.json | 269 +- apps/web/messages/es-ES.json | 268 +- apps/web/messages/fr-FR.json | 268 +- apps/web/messages/hi-IN.json | 268 +- apps/web/messages/it-IT.json | 268 +- apps/web/messages/ja-JP.json | 268 +- apps/web/messages/ko-KR.json | 268 +- apps/web/messages/nl-NL.json | 268 +- apps/web/messages/pl-PL.json | 268 +- apps/web/messages/pt-BR.json | 268 +- apps/web/messages/ru-RU.json | 268 +- apps/web/messages/tr-TR.json | 268 +- apps/web/messages/zh-CN.json | 268 +- apps/web/package.json | 2 +- apps/web/pnpm-lock.yaml | 4503 ++++++++++------- .../auth/trusted-devices/[id]/route.ts | 33 + .../api/(proxy)/auth/trusted-devices/route.ts | 71 + apps/web/src/app/login/hooks/use-login.ts | 8 +- .../profile/components/two-factor-form.tsx | 252 +- .../app/profile/hooks/use-trusted-devices.ts | 144 + apps/web/src/components/ui/input-otp.tsx | 39 +- .../endpoints/auth/trusted-devices/index.ts | 24 + .../endpoints/auth/trusted-devices/types.ts | 28 + apps/web/src/http/endpoints/index.ts | 1 + apps/web/tsconfig.json | 23 +- 32 files changed, 5892 insertions(+), 3444 deletions(-) create mode 100644 apps/web/src/app/api/(proxy)/auth/trusted-devices/[id]/route.ts create mode 100644 apps/web/src/app/api/(proxy)/auth/trusted-devices/route.ts create mode 100644 apps/web/src/app/profile/hooks/use-trusted-devices.ts create mode 100644 apps/web/src/http/endpoints/auth/trusted-devices/index.ts create mode 100644 apps/web/src/http/endpoints/auth/trusted-devices/types.ts diff --git a/apps/server/prisma/schema.prisma b/apps/server/prisma/schema.prisma index b4d00e7..0d26370 100644 --- a/apps/server/prisma/schema.prisma +++ b/apps/server/prisma/schema.prisma @@ -278,6 +278,7 @@ model TrustedDevice { deviceName String? userAgent String? ipAddress String? + lastUsedAt DateTime @default(now()) expiresAt DateTime createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/apps/server/src/modules/auth/controller.ts b/apps/server/src/modules/auth/controller.ts index 586d072..e3ae03e 100644 --- a/apps/server/src/modules/auth/controller.ts +++ b/apps/server/src/modules/auth/controller.ts @@ -122,4 +122,47 @@ export class AuthController { return reply.status(400).send({ error: error.message }); } } + + async getTrustedDevices(request: FastifyRequest, reply: FastifyReply) { + try { + const userId = (request as any).user?.userId; + if (!userId) { + return reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." }); + } + + const devices = await this.authService.getTrustedDevices(userId); + return reply.send({ devices }); + } catch (error: any) { + return reply.status(400).send({ error: error.message }); + } + } + + async removeTrustedDevice(request: FastifyRequest, reply: FastifyReply) { + try { + const userId = (request as any).user?.userId; + if (!userId) { + return reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." }); + } + + const { id } = request.params as { id: string }; + await this.authService.removeTrustedDevice(userId, id); + return reply.send({ success: true, message: "Trusted device removed successfully" }); + } catch (error: any) { + return reply.status(400).send({ error: error.message }); + } + } + + async removeAllTrustedDevices(request: FastifyRequest, reply: FastifyReply) { + try { + const userId = (request as any).user?.userId; + if (!userId) { + return reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." }); + } + + const result = await this.authService.removeAllTrustedDevices(userId); + return reply.send(result); + } catch (error: any) { + return reply.status(400).send({ error: error.message }); + } + } } diff --git a/apps/server/src/modules/auth/routes.ts b/apps/server/src/modules/auth/routes.ts index 3cbd78f..9f89622 100644 --- a/apps/server/src/modules/auth/routes.ts +++ b/apps/server/src/modules/auth/routes.ts @@ -183,4 +183,101 @@ export async function authRoutes(app: FastifyInstance) { }, authController.getCurrentUser.bind(authController) ); + + app.get( + "/auth/trusted-devices", + { + schema: { + tags: ["Authentication"], + operationId: "getTrustedDevices", + summary: "Get Trusted Devices", + description: "Get all trusted devices for the current user", + response: { + 200: z.object({ + devices: z.array( + z.object({ + id: z.string().describe("Device ID"), + deviceName: z.string().nullable().describe("Device name"), + userAgent: z.string().nullable().describe("User agent"), + ipAddress: z.string().nullable().describe("IP address"), + createdAt: z.date().describe("Creation date"), + lastUsedAt: z.date().describe("Last used date"), + expiresAt: z.date().describe("Expiration date"), + }) + ), + }), + 401: z.object({ error: z.string().describe("Error message") }), + }, + }, + preValidation: async (request: FastifyRequest, reply: FastifyReply) => { + try { + await request.jwtVerify(); + } catch (err) { + console.error(err); + reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." }); + } + }, + }, + authController.getTrustedDevices.bind(authController) + ); + + app.delete( + "/auth/trusted-devices/:id", + { + schema: { + tags: ["Authentication"], + operationId: "removeTrustedDevice", + summary: "Remove Trusted Device", + description: "Remove a specific trusted device", + params: z.object({ + id: z.string().describe("Device ID"), + }), + response: { + 200: z.object({ + success: z.boolean().describe("Success status"), + message: z.string().describe("Success message"), + }), + 401: z.object({ error: z.string().describe("Error message") }), + }, + }, + preValidation: async (request: FastifyRequest, reply: FastifyReply) => { + try { + await request.jwtVerify(); + } catch (err) { + console.error(err); + reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." }); + } + }, + }, + authController.removeTrustedDevice.bind(authController) + ); + + app.delete( + "/auth/trusted-devices", + { + schema: { + tags: ["Authentication"], + operationId: "removeAllTrustedDevices", + summary: "Remove All Trusted Devices", + description: "Remove all trusted devices for the current user", + response: { + 200: z.object({ + success: z.boolean().describe("Success status"), + message: z.string().describe("Success message"), + removedCount: z.number().describe("Number of devices removed"), + }), + 401: z.object({ error: z.string().describe("Error message") }), + }, + }, + preValidation: async (request: FastifyRequest, reply: FastifyReply) => { + try { + await request.jwtVerify(); + } catch (err) { + console.error(err); + reply.status(401).send({ error: "Unauthorized: a valid token is required to access this resource." }); + } + }, + }, + authController.removeAllTrustedDevices.bind(authController) + ); } diff --git a/apps/server/src/modules/auth/service.ts b/apps/server/src/modules/auth/service.ts index b23420d..06cd859 100644 --- a/apps/server/src/modules/auth/service.ts +++ b/apps/server/src/modules/auth/service.ts @@ -87,6 +87,8 @@ export class AuthService { if (userAgent && ipAddress) { const isDeviceTrusted = await this.trustedDeviceService.isDeviceTrusted(user.id, userAgent, ipAddress); if (isDeviceTrusted) { + // Update last used timestamp for trusted device + await this.trustedDeviceService.updateLastUsed(user.id, userAgent, ipAddress); return UserResponseSchema.parse(user); } } @@ -132,6 +134,12 @@ export class AuthService { if (rememberDevice && userAgent && ipAddress) { await this.trustedDeviceService.addTrustedDevice(userId, userAgent, ipAddress); + } else if (userAgent && ipAddress) { + // Update last used timestamp if this is already a trusted device + const isDeviceTrusted = await this.trustedDeviceService.isDeviceTrusted(userId, userAgent, ipAddress); + if (isDeviceTrusted) { + await this.trustedDeviceService.updateLastUsed(userId, userAgent, ipAddress); + } } return UserResponseSchema.parse(user); @@ -203,4 +211,21 @@ export class AuthService { } return UserResponseSchema.parse(user); } + + async getTrustedDevices(userId: string) { + return await this.trustedDeviceService.getUserTrustedDevices(userId); + } + + async removeTrustedDevice(userId: string, deviceId: string) { + return await this.trustedDeviceService.removeTrustedDevice(userId, deviceId); + } + + async removeAllTrustedDevices(userId: string) { + const result = await this.trustedDeviceService.removeAllTrustedDevices(userId); + return { + success: true, + message: "All trusted devices removed successfully", + removedCount: result.count, + }; + } } diff --git a/apps/server/src/modules/auth/trusted-device.service.ts b/apps/server/src/modules/auth/trusted-device.service.ts index 1c0e7bd..036612c 100644 --- a/apps/server/src/modules/auth/trusted-device.service.ts +++ b/apps/server/src/modules/auth/trusted-device.service.ts @@ -40,11 +40,13 @@ export class TrustedDeviceService { userAgent, ipAddress, expiresAt, + lastUsedAt: new Date(), }, update: { expiresAt, userAgent, ipAddress, + lastUsedAt: new Date(), }, }); } @@ -82,11 +84,26 @@ export class TrustedDeviceService { }); } - async removeAllTrustedDevices(userId: string): Promise { - await prisma.trustedDevice.deleteMany({ + async removeAllTrustedDevices(userId: string): Promise<{ count: number }> { + const result = await prisma.trustedDevice.deleteMany({ where: { userId, }, }); + return { count: result.count }; + } + + async updateLastUsed(userId: string, userAgent: string, ipAddress: string): Promise { + const deviceHash = this.generateDeviceHash(userAgent, ipAddress); + + await prisma.trustedDevice.updateMany({ + where: { + userId, + deviceHash, + }, + data: { + lastUsedAt: new Date(), + }, + }); } } diff --git a/apps/web/messages/ar-SA.json b/apps/web/messages/ar-SA.json index 7908813..25b971a 100644 --- a/apps/web/messages/ar-SA.json +++ b/apps/web/messages/ar-SA.json @@ -143,7 +143,8 @@ "saving": "جاري الحفظ...", "update": "تحديث", "click": "انقر على", - "creating": "جاري الإنشاء..." + "creating": "جاري الإنشاء...", + "loadingSimple": "جاري التحميل..." }, "createShare": { "title": "إنشاء مشاركة", @@ -189,7 +190,8 @@ "Password verification required": "مطلوب التحقق من كلمة المرور", "Two-factor authentication is already enabled": "المصادقة الثنائية مفعلة بالفعل", "Two-factor authentication is not enabled": "المصادقة الثنائية غير مفعلة", - "Two-factor authentication required": "المصادقة الثنائية مطلوبة" + "Two-factor authentication required": "المصادقة الثنائية مطلوبة", + "noUserData": "لا يوجد بيانات المستخدم" }, "fileActions": { "editFile": "تعديل الملف", @@ -338,6 +340,21 @@ }, "pageTitle": "الصفحة الرئيسية" }, + "iconPicker": { + "title": "اختر أيقونة", + "placeholder": "اختر أيقونة", + "searchPlaceholder": "البحث عن الأيقونات...", + "loadingMore": "جاري تحميل المزيد من الأيقونات...", + "allIconsLoaded": "تم تحميل جميع الأيقونات {count}", + "noIconsFound": "لم يتم العثور على أيقونات لـ \"{search}\"", + "tabs": { + "all": "جميع الأيقونات", + "popular": "الشائعة", + "auth": "مزودي المصادقة" + }, + "stats": "{iconCount} أيقونة من {libraryCount} مكتبة", + "categoryBadge": "{category} ({count} أيقونات)" + }, "login": { "welcome": "مرحبا بك", "signInToContinue": "قم بتسجيل الدخول للمتابعة", @@ -1428,6 +1445,160 @@ "dark": "داكن", "system": "النظام" }, + "twoFactor": { + "title": "المصادقة الثنائية", + "description": "أضف طبقة إضافية من الأمان إلى حسابك", + "enabled": "حسابك محمي بالمصادقة الثنائية", + "disabled": "المصادقة الثنائية غير مفعلة", + "setup": { + "title": "تفعيل المصادقة الثنائية", + "description": "امسح رمز QR باستخدام تطبيق المصادقة، ثم أدخل رمز التحقق.", + "qrCode": "رمز QR", + "manualEntryKey": "مفتاح الإدخال اليدوي", + "verificationCode": "رمز التحقق", + "verificationCodePlaceholder": "أدخل الرمز المكون من 6 أرقام", + "verificationCodeDescription": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة", + "verifyAndEnable": "تحقق وتفعيل", + "cancel": "إلغاء" + }, + "disable": { + "title": "تعطيل المصادقة الثنائية", + "description": "أدخل كلمة المرور للتأكيد على تعطيل المصادقة الثنائية.", + "password": "كلمة المرور", + "passwordPlaceholder": "أدخل كلمة المرور", + "confirm": "تأكيد التعطيل", + "cancel": "إلغاء" + }, + "backupCodes": { + "title": "رموز النسخ الاحتياطي", + "description": "احفظ رموز النسخ الاحتياطي هذه في مكان آمن. يمكنك استخدامها للوصول إلى حسابك في حالة فقدان جهاز المصادقة.", + "warning": "هام:", + "warningText": "يمكن استخدام كل رمز نسخ احتياطي مرة واحدة فقط. احتفظ بها بشكل آمن ولا تشاركها مع أي شخص.", + "generateNew": "إنشاء رموز نسخ احتياطي جديدة", + "download": "تحميل رموز النسخ الاحتياطي", + "copyToClipboard": "نسخ إلى الحافظة", + "savedMessage": "لقد حفظت رموز النسخ الاحتياطي", + "available": "{count} رموز نسخ احتياطي متاحة", + "instructions": [ + "• احفظ هذه الرموز في مكان آمن", + "• يمكن استخدام كل رمز نسخ احتياطي مرة واحدة فقط", + "• يمكنك إنشاء رموز جديدة في أي وقت" + ] + }, + "verification": { + "title": "المصادقة الثنائية", + "description": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة", + "backupDescription": "أدخل أحد رموز النسخ الاحتياطي للمتابعة", + "verificationCode": "رمز التحقق", + "backupCode": "رمز النسخ الاحتياطي", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "تحقق", + "verifying": "جاري التحقق...", + "useBackupCode": "استخدم رمز النسخ الاحتياطي بدلاً من ذلك", + "useAuthenticatorCode": "استخدم رمز المصادقة بدلاً من ذلك", + "rememberDevice": "تذكر هذا الجهاز لمدة 30 يومًا", + "rememberDeviceDescription": "لن تحتاج إلى إدخال رموز المصادقة الثنائية على هذا الجهاز لمدة 30 يومًا" + }, + "messages": { + "enabledSuccess": "تم تفعيل المصادقة الثنائية بنجاح!", + "disabledSuccess": "تم تعطيل المصادقة الثنائية بنجاح", + "backupCodesGenerated": "تم إنشاء رموز النسخ الاحتياطي الجديدة بنجاح", + "backupCodesCopied": "تم نسخ رموز النسخ الاحتياطي إلى الحافظة", + "setupFailed": "فشل في إنشاء إعداد المصادقة الثنائية", + "verificationFailed": "رمز التحقق غير صالح", + "disableFailed": "فشل في تعطيل المصادقة الثنائية. يرجى التحقق من كلمة المرور.", + "backupCodesFailed": "فشل في إنشاء رموز النسخ الاحتياطي", + "backupCodesCopyFailed": "فشل في نسخ رموز النسخ الاحتياطي", + "statusLoadFailed": "فشل في تحميل حالة المصادقة الثنائية", + "enterVerificationCode": "يرجى إدخال رمز التحقق", + "enterPassword": "يرجى إدخال كلمة المرور", + "deviceTrusted": "تم تحديد هذا الجهاز كجهاز موثوق به لمدة 30 يومًا" + }, + "errors": { + "invalidVerificationCode": "رمز التحقق غير صالح", + "invalidTwoFactorCode": "رمز المصادقة الثنائية غير صالح", + "twoFactorRequired": "المصادقة الثنائية مطلوبة", + "twoFactorAlreadyEnabled": "المصادقة الثنائية مفعلة بالفعل", + "twoFactorNotEnabled": "المصادقة الثنائية غير مفعلة", + "passwordVerificationRequired": "التحقق من كلمة المرور مطلوب", + "invalidPassword": "كلمة المرور غير صالحة", + "userNotFound": "المستخدم غير موجود" + }, + "buttons": { + "enable2FA": "تفعيل المصادقة الثنائية", + "disable2FA": "تعطيل المصادقة الثنائية" + }, + "deviceNames": { + "unknownDevice": "جهاز غير معروف", + "browsers": { + "chrome": "كروم", + "firefox": "فايرفوكس", + "safari": "سفاري", + "edge": "إيدج" + }, + "platforms": { + "windows": " على ويندوز", + "macos": " على ماك", + "linux": " على لينكس", + "iphone": " على آيفون", + "android": " على أندرويد" + } + }, + "status": { + "label": "الحالة:", + "enabled": "مفعل", + "disabled": "معطل" + }, + "trustedDevices": { + "title": "الأجهزة الموثوقة - المصادقة الثنائية", + "description": "الأجهزة التي لا تتطلب التحقق من المصادقة الثنائية", + "noDevices": "لا توجد أجهزة موثوقة", + "deviceName": "الجهاز", + "addedOn": "تمت الإضافة في", + "expiresOn": "تنتهي في", + "remove": "إزالة", + "removeAll": "إزالة الكل", + "confirmRemove": "هل أنت متأكد أنك تريد إزالة هذا الجهاز الموثوق به؟", + "confirmRemoveAll": "هل أنت متأكد أنك تريد إزالة جميع الأجهزة الموثوقة؟", + "deviceRemoved": "تمت إزالة الجهاز الموثوق به بنجاح", + "allDevicesRemoved": "تمت إزالة جميع الأجهزة الموثوقة بنجاح", + "loadFailed": "فشل في تحميل الأجهزة الموثوقة", + "removeFailed": "فشل في إزالة الجهاز الموثوق به", + "removeAllFailed": "فشل في إزالة جميع الأجهزة الموثوقة", + "loading": "جاري تحميل الأجهزة الموثوقة...", + "noDevicesDescription": "ستظهر الأجهزة هنا عندما تختار الوثوق بها أثناء التحقق من المصادقة الثنائية", + "tableHeaders": { + "device": "الجهاز", + "added": "تمت الإضافة", + "expires": "تنتهي", + "lastUsed": "آخر استخدام", + "ipAddress": "عنوان IP", + "actions": "الإجراءات" + }, + "status": { + "never": "أبداً", + "expired": "منتهي الصلاحية" + }, + "modals": { + "removeDevice": { + "title": "إزالة الجهاز الموثوق به", + "added": "تمت الإضافة:", + "ip": "عنوان IP:" + }, + "removeAllDevices": { + "title": "إزالة جميع الأجهزة الموثوقة", + "description": "سيؤدي هذا إلى إزالة {count} جهاز موثوق به{count, plural, =1 {} other {}}. ستحتاج إلى التحقق من المصادقة الثنائية على جميع الأجهزة مرة أخرى." + }, + "buttons": { + "cancel": "إلغاء", + "removing": "جاري الإزالة...", + "removeDevice": "إزالة الجهاز", + "removeAllDevices": "إزالة جميع الأجهزة" + } + } + } + }, "uploadFile": { "title": "رفع ملف", "multipleTitle": "رفع ملفات متعددة", @@ -1544,98 +1715,5 @@ "passwordRequired": "كلمة المرور مطلوبة", "nameRequired": "الاسم مطلوب", "required": "هذا الحقل مطلوب" - }, - "iconPicker": { - "title": "اختر أيقونة", - "placeholder": "اختر أيقونة", - "searchPlaceholder": "البحث عن الأيقونات...", - "loadingMore": "جاري تحميل المزيد من الأيقونات...", - "allIconsLoaded": "تم تحميل جميع الأيقونات {count}", - "noIconsFound": "لم يتم العثور على أيقونات لـ \"{search}\"", - "tabs": { - "all": "جميع الأيقونات", - "popular": "الشائعة", - "auth": "مزودي المصادقة" - }, - "stats": "{iconCount} أيقونة من {libraryCount} مكتبة", - "categoryBadge": "{category} ({count} أيقونات)" - }, - "twoFactor": { - "title": "المصادقة الثنائية", - "description": "أضف طبقة إضافية من الأمان إلى حسابك", - "enabled": "حسابك محمي بالمصادقة الثنائية", - "disabled": "المصادقة الثنائية غير مفعلة", - "setup": { - "title": "تفعيل المصادقة الثنائية", - "description": "امسح رمز QR باستخدام تطبيق المصادقة، ثم أدخل رمز التحقق.", - "qrCode": "رمز QR", - "manualEntryKey": "مفتاح الإدخال اليدوي", - "verificationCode": "رمز التحقق", - "verificationCodePlaceholder": "أدخل الرمز المكون من 6 أرقام", - "verificationCodeDescription": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة", - "verifyAndEnable": "تحقق وتفعيل", - "cancel": "إلغاء" - }, - "disable": { - "title": "تعطيل المصادقة الثنائية", - "description": "أدخل كلمة المرور للتأكيد على تعطيل المصادقة الثنائية.", - "password": "كلمة المرور", - "passwordPlaceholder": "أدخل كلمة المرور", - "confirm": "تأكيد التعطيل", - "cancel": "إلغاء" - }, - "backupCodes": { - "title": "رموز النسخ الاحتياطي", - "description": "احفظ رموز النسخ الاحتياطي هذه في مكان آمن. يمكنك استخدامها للوصول إلى حسابك في حالة فقدان جهاز المصادقة.", - "warning": "هام:", - "warningText": "يمكن استخدام كل رمز نسخ احتياطي مرة واحدة فقط. احتفظ بها بشكل آمن ولا تشاركها مع أي شخص.", - "generateNew": "إنشاء رموز نسخ احتياطي جديدة", - "download": "تحميل رموز النسخ الاحتياطي", - "copyToClipboard": "نسخ إلى الحافظة", - "savedMessage": "لقد حفظت رموز النسخ الاحتياطي", - "available": "{count} رموز نسخ احتياطي متاحة", - "instructions": [ - "• احفظ هذه الرموز في مكان آمن", - "• يمكن استخدام كل رمز نسخ احتياطي مرة واحدة فقط", - "• يمكنك إنشاء رموز جديدة في أي وقت" - ] - }, - "verification": { - "title": "المصادقة الثنائية", - "description": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة", - "backupDescription": "أدخل أحد رموز النسخ الاحتياطي للمتابعة", - "verificationCode": "رمز التحقق", - "backupCode": "رمز النسخ الاحتياطي", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "تحقق", - "verifying": "جاري التحقق...", - "useBackupCode": "استخدم رمز النسخ الاحتياطي بدلاً من ذلك", - "useAuthenticatorCode": "استخدم رمز المصادقة بدلاً من ذلك" - }, - "messages": { - "enabledSuccess": "تم تفعيل المصادقة الثنائية بنجاح!", - "disabledSuccess": "تم تعطيل المصادقة الثنائية بنجاح", - "backupCodesGenerated": "تم إنشاء رموز النسخ الاحتياطي الجديدة بنجاح", - "backupCodesCopied": "تم نسخ رموز النسخ الاحتياطي إلى الحافظة", - "setupFailed": "فشل في إنشاء إعداد المصادقة الثنائية", - "verificationFailed": "رمز التحقق غير صالح", - "disableFailed": "فشل في تعطيل المصادقة الثنائية. يرجى التحقق من كلمة المرور.", - "backupCodesFailed": "فشل في إنشاء رموز النسخ الاحتياطي", - "backupCodesCopyFailed": "فشل في نسخ رموز النسخ الاحتياطي", - "statusLoadFailed": "فشل في تحميل حالة المصادقة الثنائية", - "enterVerificationCode": "يرجى إدخال رمز التحقق", - "enterPassword": "يرجى إدخال كلمة المرور" - }, - "errors": { - "invalidVerificationCode": "رمز التحقق غير صالح", - "invalidTwoFactorCode": "رمز المصادقة الثنائية غير صالح", - "twoFactorRequired": "المصادقة الثنائية مطلوبة", - "twoFactorAlreadyEnabled": "المصادقة الثنائية مفعلة بالفعل", - "twoFactorNotEnabled": "المصادقة الثنائية غير مفعلة", - "passwordVerificationRequired": "التحقق من كلمة المرور مطلوب", - "invalidPassword": "كلمة المرور غير صالحة", - "userNotFound": "المستخدم غير موجود" - } } } \ No newline at end of file diff --git a/apps/web/messages/de-DE.json b/apps/web/messages/de-DE.json index 51451c0..faa5536 100644 --- a/apps/web/messages/de-DE.json +++ b/apps/web/messages/de-DE.json @@ -143,7 +143,8 @@ "saving": "Speichere...", "update": "Aktualisieren", "click": "Klicken Sie auf", - "creating": "Erstellen..." + "creating": "Erstellen...", + "loadingSimple": "Lade..." }, "createShare": { "title": "Freigabe Erstellen", @@ -189,7 +190,8 @@ "Password verification required": "Passwortüberprüfung erforderlich", "Two-factor authentication is already enabled": "Zwei-Faktor-Authentifizierung ist bereits aktiviert", "Two-factor authentication is not enabled": "Zwei-Faktor-Authentifizierung ist nicht aktiviert", - "Two-factor authentication required": "Zwei-Faktor-Authentifizierung erforderlich" + "Two-factor authentication required": "Zwei-Faktor-Authentifizierung erforderlich", + "noUserData": "Keine Benutzerdaten" }, "fileActions": { "editFile": "Datei bearbeiten", @@ -338,6 +340,21 @@ }, "pageTitle": "Startseite" }, + "iconPicker": { + "title": "Symbol auswählen", + "placeholder": "Wählen Sie ein Symbol", + "searchPlaceholder": "Symbole suchen...", + "loadingMore": "Weitere Symbole werden geladen...", + "allIconsLoaded": "Alle {count} Symbole geladen", + "noIconsFound": "Keine Symbole für \"{search}\" gefunden", + "tabs": { + "all": "Alle Symbole", + "popular": "Beliebt", + "auth": "Authentifizierungsanbieter" + }, + "stats": "{iconCount} Symbole aus {libraryCount} Bibliotheken", + "categoryBadge": "{category} ({count} Symbole)" + }, "login": { "welcome": "Willkommen zu", "signInToContinue": "Melden Sie sich an, um fortzufahren", @@ -1426,6 +1443,160 @@ "dark": "Dunkel", "system": "System" }, + "twoFactor": { + "title": "Zwei-Faktor-Authentifizierung", + "description": "Fügen Sie Ihrem Konto eine zusätzliche Sicherheitsebene hinzu", + "enabled": "Ihr Konto ist mit Zwei-Faktor-Authentifizierung geschützt", + "disabled": "Zwei-Faktor-Authentifizierung ist nicht aktiviert", + "setup": { + "title": "Zwei-Faktor-Authentifizierung aktivieren", + "description": "Scannen Sie den QR-Code mit Ihrer Authenticator-App und geben Sie dann den Bestätigungscode ein.", + "qrCode": "QR-Code", + "manualEntryKey": "Manueller Eingabeschlüssel", + "verificationCode": "Bestätigungscode", + "verificationCodePlaceholder": "6-stelligen Code eingeben", + "verificationCodeDescription": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein", + "verifyAndEnable": "Überprüfen & Aktivieren", + "cancel": "Abbrechen" + }, + "disable": { + "title": "Zwei-Faktor-Authentifizierung deaktivieren", + "description": "Geben Sie Ihr Passwort ein, um die Deaktivierung der Zwei-Faktor-Authentifizierung zu bestätigen.", + "password": "Passwort", + "passwordPlaceholder": "Geben Sie Ihr Passwort ein", + "confirm": "Deaktivierung bestätigen", + "cancel": "Abbrechen" + }, + "backupCodes": { + "title": "Backup-Codes", + "description": "Speichern Sie diese Backup-Codes an einem sicheren Ort. Sie können sie verwenden, um auf Ihr Konto zuzugreifen, wenn Sie Ihr Authentifizierungsgerät verlieren.", + "warning": "Wichtig:", + "warningText": "Jeder Backup-Code kann nur einmal verwendet werden. Bewahren Sie sie sicher auf und teilen Sie sie mit niemandem.", + "generateNew": "Neue Backup-Codes generieren", + "download": "Backup-Codes herunterladen", + "copyToClipboard": "In die Zwischenablage kopieren", + "savedMessage": "Ich habe meine Backup-Codes gespeichert", + "available": "{count} Backup-Codes verfügbar", + "instructions": [ + "• Speichern Sie diese Codes an einem sicheren Ort", + "• Jeder Backup-Code kann nur einmal verwendet werden", + "• Sie können jederzeit neue Codes generieren" + ] + }, + "verification": { + "title": "Zwei-Faktor-Authentifizierung", + "description": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein", + "backupDescription": "Geben Sie einen Ihrer Backup-Codes ein, um fortzufahren", + "verificationCode": "Bestätigungscode", + "backupCode": "Backup-Code", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "Überprüfen", + "verifying": "Überprüfung läuft...", + "useBackupCode": "Stattdessen Backup-Code verwenden", + "useAuthenticatorCode": "Stattdessen Authenticator-Code verwenden", + "rememberDevice": "Dieses Gerät für 30 Tage merken", + "rememberDeviceDescription": "Sie müssen auf diesem Gerät 30 Tage lang keine 2FA-Codes eingeben" + }, + "messages": { + "enabledSuccess": "Zwei-Faktor-Authentifizierung erfolgreich aktiviert!", + "disabledSuccess": "Zwei-Faktor-Authentifizierung erfolgreich deaktiviert", + "backupCodesGenerated": "Neue Backup-Codes erfolgreich generiert", + "backupCodesCopied": "Backup-Codes in die Zwischenablage kopiert", + "setupFailed": "2FA-Setup konnte nicht generiert werden", + "verificationFailed": "Ungültiger Bestätigungscode", + "disableFailed": "2FA konnte nicht deaktiviert werden. Bitte überprüfen Sie Ihr Passwort.", + "backupCodesFailed": "Backup-Codes konnten nicht generiert werden", + "backupCodesCopyFailed": "Backup-Codes konnten nicht kopiert werden", + "statusLoadFailed": "2FA-Status konnte nicht geladen werden", + "enterVerificationCode": "Bitte geben Sie den Bestätigungscode ein", + "enterPassword": "Bitte geben Sie Ihr Passwort ein", + "deviceTrusted": "Dieses Gerät wurde für 30 Tage als vertrauenswürdig markiert" + }, + "errors": { + "invalidVerificationCode": "Ungültiger Bestätigungscode", + "invalidTwoFactorCode": "Ungültiger Zwei-Faktor-Authentifizierungscode", + "twoFactorRequired": "Zwei-Faktor-Authentifizierung erforderlich", + "twoFactorAlreadyEnabled": "Zwei-Faktor-Authentifizierung ist bereits aktiviert", + "twoFactorNotEnabled": "Zwei-Faktor-Authentifizierung ist nicht aktiviert", + "passwordVerificationRequired": "Passwortüberprüfung erforderlich", + "invalidPassword": "Ungültiges Passwort", + "userNotFound": "Benutzer nicht gefunden" + }, + "buttons": { + "enable2FA": "2FA aktivieren", + "disable2FA": "2FA deaktivieren" + }, + "deviceNames": { + "unknownDevice": "Unbekanntes Gerät", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " auf Windows", + "macos": " auf macOS", + "linux": " auf Linux", + "iphone": " auf iPhone", + "android": " auf Android" + } + }, + "status": { + "label": "Status:", + "enabled": "Aktiviert", + "disabled": "Deaktiviert" + }, + "trustedDevices": { + "title": "Vertrauenswürdige Geräte - 2FA", + "description": "Geräte, die keine 2FA-Verifizierung benötigen", + "noDevices": "Keine vertrauenswürdigen Geräte", + "deviceName": "Gerät", + "addedOn": "Hinzugefügt am", + "expiresOn": "Läuft ab am", + "remove": "Entfernen", + "removeAll": "Alle entfernen", + "confirmRemove": "Möchten Sie dieses vertrauenswürdige Gerät wirklich entfernen?", + "confirmRemoveAll": "Möchten Sie wirklich alle vertrauenswürdigen Geräte entfernen?", + "deviceRemoved": "Vertrauenswürdiges Gerät erfolgreich entfernt", + "allDevicesRemoved": "Alle vertrauenswürdigen Geräte erfolgreich entfernt", + "loadFailed": "Fehler beim Laden der vertrauenswürdigen Geräte", + "removeFailed": "Fehler beim Entfernen des vertrauenswürdigen Geräts", + "removeAllFailed": "Fehler beim Entfernen aller vertrauenswürdigen Geräte", + "loading": "Lade vertrauenswürdige Geräte...", + "noDevicesDescription": "Geräte erscheinen hier, wenn Sie sie während der 2FA-Verifizierung als vertrauenswürdig markieren", + "tableHeaders": { + "device": "Gerät", + "added": "Hinzugefügt", + "expires": "Läuft ab", + "lastUsed": "Zuletzt verwendet", + "ipAddress": "IP-Adresse", + "actions": "Aktionen" + }, + "status": { + "never": "Nie", + "expired": "Abgelaufen" + }, + "modals": { + "removeDevice": { + "title": "Vertrauenswürdiges Gerät entfernen", + "added": "Hinzugefügt:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "Alle vertrauenswürdigen Geräte entfernen", + "description": "Dies wird {count} vertrauenswürdige{count, plural, =1 {s Gerät} other { Geräte}} entfernen. Sie müssen die 2FA auf allen Geräten erneut verifizieren." + }, + "buttons": { + "cancel": "Abbrechen", + "removing": "Wird entfernt...", + "removeDevice": "Gerät entfernen", + "removeAllDevices": "Alle Geräte entfernen" + } + } + } + }, "uploadFile": { "title": "Datei hochladen", "multipleTitle": "Mehrere Dateien Hochladen", @@ -1542,98 +1713,5 @@ "passwordRequired": "Passwort ist erforderlich", "nameRequired": "Name ist erforderlich", "required": "Dieses Feld ist erforderlich" - }, - "iconPicker": { - "title": "Symbol auswählen", - "placeholder": "Wählen Sie ein Symbol", - "searchPlaceholder": "Symbole suchen...", - "loadingMore": "Weitere Symbole werden geladen...", - "allIconsLoaded": "Alle {count} Symbole geladen", - "noIconsFound": "Keine Symbole für \"{search}\" gefunden", - "tabs": { - "all": "Alle Symbole", - "popular": "Beliebt", - "auth": "Authentifizierungsanbieter" - }, - "stats": "{iconCount} Symbole aus {libraryCount} Bibliotheken", - "categoryBadge": "{category} ({count} Symbole)" - }, - "twoFactor": { - "title": "Zwei-Faktor-Authentifizierung", - "description": "Fügen Sie Ihrem Konto eine zusätzliche Sicherheitsebene hinzu", - "enabled": "Ihr Konto ist mit Zwei-Faktor-Authentifizierung geschützt", - "disabled": "Zwei-Faktor-Authentifizierung ist nicht aktiviert", - "setup": { - "title": "Zwei-Faktor-Authentifizierung aktivieren", - "description": "Scannen Sie den QR-Code mit Ihrer Authenticator-App und geben Sie dann den Bestätigungscode ein.", - "qrCode": "QR-Code", - "manualEntryKey": "Manueller Eingabeschlüssel", - "verificationCode": "Bestätigungscode", - "verificationCodePlaceholder": "6-stelligen Code eingeben", - "verificationCodeDescription": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein", - "verifyAndEnable": "Überprüfen & Aktivieren", - "cancel": "Abbrechen" - }, - "disable": { - "title": "Zwei-Faktor-Authentifizierung deaktivieren", - "description": "Geben Sie Ihr Passwort ein, um die Deaktivierung der Zwei-Faktor-Authentifizierung zu bestätigen.", - "password": "Passwort", - "passwordPlaceholder": "Geben Sie Ihr Passwort ein", - "confirm": "Deaktivierung bestätigen", - "cancel": "Abbrechen" - }, - "backupCodes": { - "title": "Backup-Codes", - "description": "Speichern Sie diese Backup-Codes an einem sicheren Ort. Sie können sie verwenden, um auf Ihr Konto zuzugreifen, wenn Sie Ihr Authentifizierungsgerät verlieren.", - "warning": "Wichtig:", - "warningText": "Jeder Backup-Code kann nur einmal verwendet werden. Bewahren Sie sie sicher auf und teilen Sie sie mit niemandem.", - "generateNew": "Neue Backup-Codes generieren", - "download": "Backup-Codes herunterladen", - "copyToClipboard": "In die Zwischenablage kopieren", - "savedMessage": "Ich habe meine Backup-Codes gespeichert", - "available": "{count} Backup-Codes verfügbar", - "instructions": [ - "• Speichern Sie diese Codes an einem sicheren Ort", - "• Jeder Backup-Code kann nur einmal verwendet werden", - "• Sie können jederzeit neue Codes generieren" - ] - }, - "verification": { - "title": "Zwei-Faktor-Authentifizierung", - "description": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein", - "backupDescription": "Geben Sie einen Ihrer Backup-Codes ein, um fortzufahren", - "verificationCode": "Bestätigungscode", - "backupCode": "Backup-Code", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "Überprüfen", - "verifying": "Überprüfung läuft...", - "useBackupCode": "Stattdessen Backup-Code verwenden", - "useAuthenticatorCode": "Stattdessen Authenticator-Code verwenden" - }, - "messages": { - "enabledSuccess": "Zwei-Faktor-Authentifizierung erfolgreich aktiviert!", - "disabledSuccess": "Zwei-Faktor-Authentifizierung erfolgreich deaktiviert", - "backupCodesGenerated": "Neue Backup-Codes erfolgreich generiert", - "backupCodesCopied": "Backup-Codes in die Zwischenablage kopiert", - "setupFailed": "2FA-Setup konnte nicht generiert werden", - "verificationFailed": "Ungültiger Bestätigungscode", - "disableFailed": "2FA konnte nicht deaktiviert werden. Bitte überprüfen Sie Ihr Passwort.", - "backupCodesFailed": "Backup-Codes konnten nicht generiert werden", - "backupCodesCopyFailed": "Backup-Codes konnten nicht kopiert werden", - "statusLoadFailed": "2FA-Status konnte nicht geladen werden", - "enterVerificationCode": "Bitte geben Sie den Bestätigungscode ein", - "enterPassword": "Bitte geben Sie Ihr Passwort ein" - }, - "errors": { - "invalidVerificationCode": "Ungültiger Bestätigungscode", - "invalidTwoFactorCode": "Ungültiger Zwei-Faktor-Authentifizierungscode", - "twoFactorRequired": "Zwei-Faktor-Authentifizierung erforderlich", - "twoFactorAlreadyEnabled": "Zwei-Faktor-Authentifizierung ist bereits aktiviert", - "twoFactorNotEnabled": "Zwei-Faktor-Authentifizierung ist nicht aktiviert", - "passwordVerificationRequired": "Passwortüberprüfung erforderlich", - "invalidPassword": "Ungültiges Passwort", - "userNotFound": "Benutzer nicht gefunden" - } } } \ No newline at end of file diff --git a/apps/web/messages/en-US.json b/apps/web/messages/en-US.json index 5f89f69..140dbb8 100644 --- a/apps/web/messages/en-US.json +++ b/apps/web/messages/en-US.json @@ -129,6 +129,7 @@ }, "common": { "loading": "Loading, please wait...", + "loadingSimple": "Loading...", "cancel": "Cancel", "save": "Save", "saving": "Saving...", @@ -189,7 +190,8 @@ "Invalid password": "Invalid password", "Password verification required": "Password verification required", "Invalid two-factor authentication code": "Invalid two-factor authentication code", - "Two-factor authentication required": "Two-factor authentication required" + "Two-factor authentication required": "Two-factor authentication required", + "noUserData": "No user data" }, "fileActions": { "editFile": "Edit File", @@ -338,6 +340,21 @@ }, "pageTitle": "Home" }, + "iconPicker": { + "title": "Select Icon", + "placeholder": "Select an icon", + "searchPlaceholder": "Search icons...", + "loadingMore": "Loading more icons...", + "allIconsLoaded": "All {count} icons loaded", + "noIconsFound": "No icons found for \"{search}\"", + "tabs": { + "all": "All Icons", + "popular": "Popular", + "auth": "Auth Providers" + }, + "stats": "{iconCount} icons from {libraryCount} libraries", + "categoryBadge": "{category} ({count} icons)" + }, "login": { "welcome": "Welcome to", "signInToContinue": "Sign in to continue", @@ -1426,6 +1443,160 @@ "dark": "Dark", "system": "System" }, + "twoFactor": { + "title": "Two-Factor Authentication", + "description": "Add an extra layer of security to your account", + "enabled": "Your account is protected with two-factor authentication", + "disabled": "Two-factor authentication is not enabled", + "status": { + "label": "Status:", + "enabled": "Enabled", + "disabled": "Disabled" + }, + "buttons": { + "enable2FA": "Enable 2FA", + "disable2FA": "Disable 2FA" + }, + "setup": { + "title": "Enable Two-Factor Authentication", + "description": "Scan the QR code with your authenticator app, then enter the verification code.", + "qrCode": "QR Code", + "manualEntryKey": "Manual Entry Key", + "verificationCode": "Verification Code", + "verificationCodePlaceholder": "Enter 6-digit code", + "verificationCodeDescription": "Enter the 6-digit code from your authenticator app", + "verifyAndEnable": "Verify & Enable", + "cancel": "Cancel" + }, + "disable": { + "title": "Disable Two-Factor Authentication", + "description": "Enter your password to confirm disabling two-factor authentication.", + "password": "Password", + "passwordPlaceholder": "Enter your password", + "confirm": "Confirm Disable", + "cancel": "Cancel" + }, + "backupCodes": { + "title": "Backup Codes", + "description": "Save these backup codes in a safe place. You can use them to access your account if you lose your authenticator device.", + "warning": "Important:", + "warningText": "Each backup code can only be used once. Keep them secure and don't share them with anyone.", + "generateNew": "Generate New Backup Codes", + "download": "Download Backup Codes", + "copyToClipboard": "Copy to Clipboard", + "savedMessage": "I've Saved My Backup Codes", + "available": "{count} backup codes available", + "instructions": [ + "• Save these codes in a secure location", + "• Each backup code can only be used once", + "• You can generate new codes anytime" + ] + }, + "verification": { + "title": "Two-Factor Authentication", + "description": "Enter the 6-digit code from your authenticator app", + "backupDescription": "Enter one of your backup codes to continue", + "verificationCode": "Verification Code", + "backupCode": "Backup Code", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "Verify", + "verifying": "Verifying...", + "useBackupCode": "Use backup code instead", + "useAuthenticatorCode": "Use authenticator code instead", + "rememberDevice": "Remember this device for 30 days", + "rememberDeviceDescription": "You won't need to enter 2FA codes on this device for 30 days" + }, + "trustedDevices": { + "title": "Trusted Devices - 2FA", + "description": "Devices that don't require 2FA verification", + "noDevices": "No trusted devices", + "deviceName": "Device", + "addedOn": "Added on", + "expiresOn": "Expires on", + "remove": "Remove", + "removeAll": "Remove All", + "confirmRemove": "Are you sure you want to remove this trusted device?", + "confirmRemoveAll": "Are you sure you want to remove all trusted devices?", + "deviceRemoved": "Trusted device removed successfully", + "allDevicesRemoved": "All trusted devices removed successfully", + "loadFailed": "Failed to load trusted devices", + "removeFailed": "Failed to remove trusted device", + "removeAllFailed": "Failed to remove all trusted devices", + "loading": "Loading trusted devices...", + "noDevicesDescription": "Devices will appear here when you choose to trust them during 2FA verification", + "tableHeaders": { + "device": "Device", + "added": "Added", + "expires": "Expires", + "lastUsed": "Last Used", + "ipAddress": "IP Address", + "actions": "Actions" + }, + "status": { + "never": "Never", + "expired": "Expired" + }, + "modals": { + "removeDevice": { + "title": "Remove Trusted Device", + "added": "Added:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "Remove All Trusted Devices", + "description": "This will remove {count} trusted device{count, plural, =1 {} other {s}}. You will need to verify 2FA on all devices again." + }, + "buttons": { + "cancel": "Cancel", + "removing": "Removing...", + "removeDevice": "Remove Device", + "removeAllDevices": "Remove All Devices" + } + } + }, + "messages": { + "enabledSuccess": "Two-factor authentication enabled successfully!", + "disabledSuccess": "Two-factor authentication disabled successfully", + "backupCodesGenerated": "New backup codes generated successfully", + "backupCodesCopied": "Backup codes copied to clipboard", + "setupFailed": "Failed to generate 2FA setup", + "verificationFailed": "Invalid verification code", + "disableFailed": "Failed to disable 2FA. Please check your password.", + "backupCodesFailed": "Failed to generate backup codes", + "backupCodesCopyFailed": "Failed to copy backup codes", + "statusLoadFailed": "Failed to load 2FA status", + "enterVerificationCode": "Please enter the verification code", + "enterPassword": "Please enter your password", + "deviceTrusted": "This device has been marked as trusted for 30 days" + }, + "errors": { + "invalidVerificationCode": "Invalid verification code", + "invalidTwoFactorCode": "Invalid two-factor authentication code", + "twoFactorRequired": "Two-factor authentication required", + "twoFactorAlreadyEnabled": "Two-factor authentication is already enabled", + "twoFactorNotEnabled": "Two-factor authentication is not enabled", + "passwordVerificationRequired": "Password verification required", + "invalidPassword": "Invalid password", + "userNotFound": "User not found" + }, + "deviceNames": { + "unknownDevice": "Unknown Device", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " on Windows", + "macos": " on macOS", + "linux": " on Linux", + "iphone": " on iPhone", + "android": " on Android" + } + } + }, "uploadFile": { "title": "Upload File", "multipleTitle": "Upload Files", @@ -1542,101 +1713,5 @@ "passwordMinLength": "Password must be at least 6 characters", "nameRequired": "Name is required", "required": "This field is required" - }, - "twoFactor": { - "title": "Two-Factor Authentication", - "description": "Add an extra layer of security to your account", - "enabled": "Your account is protected with two-factor authentication", - "disabled": "Two-factor authentication is not enabled", - "setup": { - "title": "Enable Two-Factor Authentication", - "description": "Scan the QR code with your authenticator app, then enter the verification code.", - "qrCode": "QR Code", - "manualEntryKey": "Manual Entry Key", - "verificationCode": "Verification Code", - "verificationCodePlaceholder": "Enter 6-digit code", - "verificationCodeDescription": "Enter the 6-digit code from your authenticator app", - "verifyAndEnable": "Verify & Enable", - "cancel": "Cancel" - }, - "disable": { - "title": "Disable Two-Factor Authentication", - "description": "Enter your password to confirm disabling two-factor authentication.", - "password": "Password", - "passwordPlaceholder": "Enter your password", - "confirm": "Confirm Disable", - "cancel": "Cancel" - }, - "backupCodes": { - "title": "Backup Codes", - "description": "Save these backup codes in a safe place. You can use them to access your account if you lose your authenticator device.", - "warning": "Important:", - "warningText": "Each backup code can only be used once. Keep them secure and don't share them with anyone.", - "generateNew": "Generate New Backup Codes", - "download": "Download Backup Codes", - "copyToClipboard": "Copy to Clipboard", - "savedMessage": "I've Saved My Backup Codes", - "available": "{count} backup codes available", - "instructions": [ - "• Save these codes in a secure location", - "• Each backup code can only be used once", - "• You can generate new codes anytime" - ] - }, - "verification": { - "title": "Two-Factor Authentication", - "description": "Enter the 6-digit code from your authenticator app", - "backupDescription": "Enter one of your backup codes to continue", - "verificationCode": "Verification Code", - "backupCode": "Backup Code", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "Verify", - "verifying": "Verifying...", - "useBackupCode": "Use backup code instead", - "useAuthenticatorCode": "Use authenticator code instead", - "rememberDevice": "Remember this device for 30 days", - "rememberDeviceDescription": "You won't need to enter 2FA codes on this device for 30 days" - }, - "messages": { - "enabledSuccess": "Two-factor authentication enabled successfully!", - "disabledSuccess": "Two-factor authentication disabled successfully", - "backupCodesGenerated": "New backup codes generated successfully", - "backupCodesCopied": "Backup codes copied to clipboard", - "setupFailed": "Failed to generate 2FA setup", - "verificationFailed": "Invalid verification code", - "disableFailed": "Failed to disable 2FA. Please check your password.", - "backupCodesFailed": "Failed to generate backup codes", - "backupCodesCopyFailed": "Failed to copy backup codes", - "statusLoadFailed": "Failed to load 2FA status", - "enterVerificationCode": "Please enter the verification code", - "enterPassword": "Please enter your password", - "deviceTrusted": "This device has been marked as trusted for 30 days" - }, - "errors": { - "invalidVerificationCode": "Invalid verification code", - "invalidTwoFactorCode": "Invalid two-factor authentication code", - "twoFactorRequired": "Two-factor authentication required", - "twoFactorAlreadyEnabled": "Two-factor authentication is already enabled", - "twoFactorNotEnabled": "Two-factor authentication is not enabled", - "passwordVerificationRequired": "Password verification required", - "invalidPassword": "Invalid password", - "userNotFound": "User not found" - } - }, - "iconPicker": { - "title": "Select Icon", - "placeholder": "Select an icon", - "searchPlaceholder": "Search icons...", - "loadingMore": "Loading more icons...", - "allIconsLoaded": "All {count} icons loaded", - "noIconsFound": "No icons found for \"{search}\"", - "tabs": { - "all": "All Icons", - "popular": "Popular", - "auth": "Auth Providers" - }, - "stats": "{iconCount} icons from {libraryCount} libraries", - "categoryBadge": "{category} ({count} icons)" } } \ No newline at end of file diff --git a/apps/web/messages/es-ES.json b/apps/web/messages/es-ES.json index 5467563..47ec01e 100644 --- a/apps/web/messages/es-ES.json +++ b/apps/web/messages/es-ES.json @@ -143,7 +143,8 @@ "saving": "Guardando...", "update": "Actualizar", "click": "Haga clic para", - "creating": "Creando..." + "creating": "Creando...", + "loadingSimple": "Cargando..." }, "createShare": { "title": "Crear Compartir", @@ -189,7 +190,8 @@ "Password verification required": "Se requiere verificación de contraseña", "Two-factor authentication is already enabled": "La autenticación de dos factores ya está habilitada", "Two-factor authentication is not enabled": "La autenticación de dos factores no está habilitada", - "Two-factor authentication required": "Se requiere autenticación de dos factores" + "Two-factor authentication required": "Se requiere autenticación de dos factores", + "noUserData": "No hay datos del usuario" }, "fileActions": { "editFile": "Editar archivo", @@ -338,6 +340,21 @@ }, "pageTitle": "Inicio" }, + "iconPicker": { + "title": "Seleccionar Icono", + "placeholder": "Seleccionar un icono", + "searchPlaceholder": "Buscar iconos...", + "loadingMore": "Cargando más iconos...", + "allIconsLoaded": "Todos los {count} iconos cargados", + "noIconsFound": "No se encontraron iconos para \"{search}\"", + "tabs": { + "all": "Todos los Iconos", + "popular": "Populares", + "auth": "Proveedores de Autenticación" + }, + "stats": "{iconCount} iconos de {libraryCount} bibliotecas", + "categoryBadge": "{category} ({count} iconos)" + }, "login": { "welcome": "Bienvenido a", "signInToContinue": "Inicia sesión para continuar", @@ -1426,6 +1443,160 @@ "dark": "Oscuro", "system": "Sistema" }, + "twoFactor": { + "title": "Autenticación de dos factores", + "description": "Añade una capa extra de seguridad a tu cuenta", + "enabled": "Tu cuenta está protegida con autenticación de dos factores", + "disabled": "La autenticación de dos factores no está habilitada", + "setup": { + "title": "Habilitar autenticación de dos factores", + "description": "Escanea el código QR con tu aplicación de autenticación y luego ingresa el código de verificación.", + "qrCode": "Código QR", + "manualEntryKey": "Clave de entrada manual", + "verificationCode": "Código de verificación", + "verificationCodePlaceholder": "Ingresa el código de 6 dígitos", + "verificationCodeDescription": "Ingresa el código de 6 dígitos de tu aplicación de autenticación", + "verifyAndEnable": "Verificar y habilitar", + "cancel": "Cancelar" + }, + "disable": { + "title": "Deshabilitar autenticación de dos factores", + "description": "Ingresa tu contraseña para confirmar la desactivación de la autenticación de dos factores.", + "password": "Contraseña", + "passwordPlaceholder": "Ingresa tu contraseña", + "confirm": "Confirmar desactivación", + "cancel": "Cancelar" + }, + "backupCodes": { + "title": "Códigos de respaldo", + "description": "Guarda estos códigos de respaldo en un lugar seguro. Puedes usarlos para acceder a tu cuenta si pierdes tu dispositivo de autenticación.", + "warning": "Importante:", + "warningText": "Cada código de respaldo solo se puede usar una vez. Mantenlos seguros y no los compartas con nadie.", + "generateNew": "Generar nuevos códigos de respaldo", + "download": "Descargar códigos de respaldo", + "copyToClipboard": "Copiar al portapapeles", + "savedMessage": "He guardado mis códigos de respaldo", + "available": "{count} códigos de respaldo disponibles", + "instructions": [ + "• Guarda estos códigos en un lugar seguro", + "• Cada código de respaldo solo se puede usar una vez", + "• Puedes generar nuevos códigos en cualquier momento" + ] + }, + "verification": { + "title": "Autenticación de dos factores", + "description": "Ingresa el código de 6 dígitos de tu aplicación de autenticación", + "backupDescription": "Ingresa uno de tus códigos de respaldo para continuar", + "verificationCode": "Código de verificación", + "backupCode": "Código de respaldo", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "Verificar", + "verifying": "Verificando...", + "useBackupCode": "Usar código de respaldo en su lugar", + "useAuthenticatorCode": "Usar código de autenticación en su lugar", + "rememberDevice": "Recordar este dispositivo durante 30 días", + "rememberDeviceDescription": "No necesitarás ingresar códigos 2FA en este dispositivo durante 30 días" + }, + "messages": { + "enabledSuccess": "¡Autenticación de dos factores habilitada exitosamente!", + "disabledSuccess": "Autenticación de dos factores deshabilitada exitosamente", + "backupCodesGenerated": "Nuevos códigos de respaldo generados exitosamente", + "backupCodesCopied": "Códigos de respaldo copiados al portapapeles", + "setupFailed": "Error al generar la configuración de 2FA", + "verificationFailed": "Código de verificación inválido", + "disableFailed": "Error al deshabilitar 2FA. Por favor verifica tu contraseña.", + "backupCodesFailed": "Error al generar códigos de respaldo", + "backupCodesCopyFailed": "Error al copiar códigos de respaldo", + "statusLoadFailed": "Error al cargar el estado de 2FA", + "enterVerificationCode": "Por favor ingresa el código de verificación", + "enterPassword": "Por favor ingresa tu contraseña", + "deviceTrusted": "Este dispositivo ha sido marcado como confiable durante 30 días" + }, + "errors": { + "invalidVerificationCode": "Código de verificación inválido", + "invalidTwoFactorCode": "Código de autenticación de dos factores inválido", + "twoFactorRequired": "Se requiere autenticación de dos factores", + "twoFactorAlreadyEnabled": "La autenticación de dos factores ya está habilitada", + "twoFactorNotEnabled": "La autenticación de dos factores no está habilitada", + "passwordVerificationRequired": "Se requiere verificación de contraseña", + "invalidPassword": "Contraseña inválida", + "userNotFound": "Usuario no encontrado" + }, + "buttons": { + "enable2FA": "Habilitar 2FA", + "disable2FA": "Deshabilitar 2FA" + }, + "deviceNames": { + "unknownDevice": "Dispositivo Desconocido", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " en Windows", + "macos": " en macOS", + "linux": " en Linux", + "iphone": " en iPhone", + "android": " en Android" + } + }, + "status": { + "label": "Estado:", + "enabled": "Habilitado", + "disabled": "Deshabilitado" + }, + "trustedDevices": { + "title": "Dispositivos Confiables - 2FA", + "description": "Dispositivos que no requieren verificación 2FA", + "noDevices": "No hay dispositivos confiables", + "deviceName": "Dispositivo", + "addedOn": "Agregado el", + "expiresOn": "Expira el", + "remove": "Eliminar", + "removeAll": "Eliminar Todos", + "confirmRemove": "¿Estás seguro de que deseas eliminar este dispositivo confiable?", + "confirmRemoveAll": "¿Estás seguro de que deseas eliminar todos los dispositivos confiables?", + "deviceRemoved": "Dispositivo confiable eliminado exitosamente", + "allDevicesRemoved": "Todos los dispositivos confiables fueron eliminados exitosamente", + "loadFailed": "Error al cargar los dispositivos confiables", + "removeFailed": "Error al eliminar el dispositivo confiable", + "removeAllFailed": "Error al eliminar todos los dispositivos confiables", + "loading": "Cargando dispositivos confiables...", + "noDevicesDescription": "Los dispositivos aparecerán aquí cuando elijas confiar en ellos durante la verificación 2FA", + "tableHeaders": { + "device": "Dispositivo", + "added": "Agregado", + "expires": "Expira", + "lastUsed": "Último uso", + "ipAddress": "Dirección IP", + "actions": "Acciones" + }, + "status": { + "never": "Nunca", + "expired": "Expirado" + }, + "modals": { + "removeDevice": { + "title": "Eliminar Dispositivo Confiable", + "added": "Agregado:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "Eliminar Todos los Dispositivos Confiables", + "description": "Esto eliminará {count} dispositivo{count, plural, =1 {} other {s}} confiable{count, plural, =1 {} other {s}}. Necesitarás verificar 2FA en todos los dispositivos nuevamente." + }, + "buttons": { + "cancel": "Cancelar", + "removing": "Eliminando...", + "removeDevice": "Eliminar Dispositivo", + "removeAllDevices": "Eliminar Todos los Dispositivos" + } + } + } + }, "uploadFile": { "title": "Subir archivo", "multipleTitle": "Subir Múltiples Archivos", @@ -1542,98 +1713,5 @@ "passwordRequired": "Se requiere la contraseña", "nameRequired": "El nombre es obligatorio", "required": "Este campo es obligatorio" - }, - "iconPicker": { - "title": "Seleccionar Icono", - "placeholder": "Seleccionar un icono", - "searchPlaceholder": "Buscar iconos...", - "loadingMore": "Cargando más iconos...", - "allIconsLoaded": "Todos los {count} iconos cargados", - "noIconsFound": "No se encontraron iconos para \"{search}\"", - "tabs": { - "all": "Todos los Iconos", - "popular": "Populares", - "auth": "Proveedores de Autenticación" - }, - "stats": "{iconCount} iconos de {libraryCount} bibliotecas", - "categoryBadge": "{category} ({count} iconos)" - }, - "twoFactor": { - "title": "Autenticación de dos factores", - "description": "Añade una capa extra de seguridad a tu cuenta", - "enabled": "Tu cuenta está protegida con autenticación de dos factores", - "disabled": "La autenticación de dos factores no está habilitada", - "setup": { - "title": "Habilitar autenticación de dos factores", - "description": "Escanea el código QR con tu aplicación de autenticación y luego ingresa el código de verificación.", - "qrCode": "Código QR", - "manualEntryKey": "Clave de entrada manual", - "verificationCode": "Código de verificación", - "verificationCodePlaceholder": "Ingresa el código de 6 dígitos", - "verificationCodeDescription": "Ingresa el código de 6 dígitos de tu aplicación de autenticación", - "verifyAndEnable": "Verificar y habilitar", - "cancel": "Cancelar" - }, - "disable": { - "title": "Deshabilitar autenticación de dos factores", - "description": "Ingresa tu contraseña para confirmar la desactivación de la autenticación de dos factores.", - "password": "Contraseña", - "passwordPlaceholder": "Ingresa tu contraseña", - "confirm": "Confirmar desactivación", - "cancel": "Cancelar" - }, - "backupCodes": { - "title": "Códigos de respaldo", - "description": "Guarda estos códigos de respaldo en un lugar seguro. Puedes usarlos para acceder a tu cuenta si pierdes tu dispositivo de autenticación.", - "warning": "Importante:", - "warningText": "Cada código de respaldo solo se puede usar una vez. Mantenlos seguros y no los compartas con nadie.", - "generateNew": "Generar nuevos códigos de respaldo", - "download": "Descargar códigos de respaldo", - "copyToClipboard": "Copiar al portapapeles", - "savedMessage": "He guardado mis códigos de respaldo", - "available": "{count} códigos de respaldo disponibles", - "instructions": [ - "• Guarda estos códigos en un lugar seguro", - "• Cada código de respaldo solo se puede usar una vez", - "• Puedes generar nuevos códigos en cualquier momento" - ] - }, - "verification": { - "title": "Autenticación de dos factores", - "description": "Ingresa el código de 6 dígitos de tu aplicación de autenticación", - "backupDescription": "Ingresa uno de tus códigos de respaldo para continuar", - "verificationCode": "Código de verificación", - "backupCode": "Código de respaldo", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "Verificar", - "verifying": "Verificando...", - "useBackupCode": "Usar código de respaldo en su lugar", - "useAuthenticatorCode": "Usar código de autenticación en su lugar" - }, - "messages": { - "enabledSuccess": "¡Autenticación de dos factores habilitada exitosamente!", - "disabledSuccess": "Autenticación de dos factores deshabilitada exitosamente", - "backupCodesGenerated": "Nuevos códigos de respaldo generados exitosamente", - "backupCodesCopied": "Códigos de respaldo copiados al portapapeles", - "setupFailed": "Error al generar la configuración de 2FA", - "verificationFailed": "Código de verificación inválido", - "disableFailed": "Error al deshabilitar 2FA. Por favor verifica tu contraseña.", - "backupCodesFailed": "Error al generar códigos de respaldo", - "backupCodesCopyFailed": "Error al copiar códigos de respaldo", - "statusLoadFailed": "Error al cargar el estado de 2FA", - "enterVerificationCode": "Por favor ingresa el código de verificación", - "enterPassword": "Por favor ingresa tu contraseña" - }, - "errors": { - "invalidVerificationCode": "Código de verificación inválido", - "invalidTwoFactorCode": "Código de autenticación de dos factores inválido", - "twoFactorRequired": "Se requiere autenticación de dos factores", - "twoFactorAlreadyEnabled": "La autenticación de dos factores ya está habilitada", - "twoFactorNotEnabled": "La autenticación de dos factores no está habilitada", - "passwordVerificationRequired": "Se requiere verificación de contraseña", - "invalidPassword": "Contraseña inválida", - "userNotFound": "Usuario no encontrado" - } } } \ No newline at end of file diff --git a/apps/web/messages/fr-FR.json b/apps/web/messages/fr-FR.json index f090386..539dc7c 100644 --- a/apps/web/messages/fr-FR.json +++ b/apps/web/messages/fr-FR.json @@ -143,7 +143,8 @@ "saving": "Enregistrement...", "update": "Mettre à jour", "click": "Clique para", - "creating": "Criando..." + "creating": "Criando...", + "loadingSimple": "Chargement..." }, "createShare": { "title": "Créer un Partage", @@ -189,7 +190,8 @@ "Password verification required": "Vérification du mot de passe requise", "Two-factor authentication is already enabled": "L'authentification à deux facteurs est déjà activée", "Two-factor authentication is not enabled": "L'authentification à deux facteurs n'est pas activée", - "Two-factor authentication required": "L'authentification à deux facteurs est requise" + "Two-factor authentication required": "L'authentification à deux facteurs est requise", + "noUserData": "Aucune donnée utilisateur" }, "fileActions": { "editFile": "Modifier le Fichier", @@ -338,6 +340,21 @@ }, "pageTitle": "Accueil" }, + "iconPicker": { + "title": "Sélectionner une Icône", + "placeholder": "Sélectionner une icône", + "searchPlaceholder": "Rechercher des icônes...", + "loadingMore": "Chargement d'autres icônes...", + "allIconsLoaded": "Toutes les {count} icônes sont chargées", + "noIconsFound": "Aucune icône trouvée pour \"{search}\"", + "tabs": { + "all": "Toutes les Icônes", + "popular": "Populaires", + "auth": "Fournisseurs d'Authentification" + }, + "stats": "{iconCount} icônes de {libraryCount} bibliothèques", + "categoryBadge": "{category} ({count} icônes)" + }, "login": { "welcome": "Bienvenue à", "signInToContinue": "Connectez-vous pour continuer", @@ -1426,6 +1443,160 @@ "dark": "Sombre", "system": "Système" }, + "twoFactor": { + "title": "Authentification à Deux Facteurs", + "description": "Ajoutez une couche de sécurité supplémentaire à votre compte", + "enabled": "Votre compte est protégé par l'authentification à deux facteurs", + "disabled": "L'authentification à deux facteurs n'est pas activée", + "setup": { + "title": "Activer l'Authentification à Deux Facteurs", + "description": "Scannez le code QR avec votre application d'authentification, puis saisissez le code de vérification.", + "qrCode": "Code QR", + "manualEntryKey": "Clé de Saisie Manuelle", + "verificationCode": "Code de Vérification", + "verificationCodePlaceholder": "Entrez le code à 6 chiffres", + "verificationCodeDescription": "Saisissez le code à 6 chiffres de votre application d'authentification", + "verifyAndEnable": "Vérifier et Activer", + "cancel": "Annuler" + }, + "disable": { + "title": "Désactiver l'Authentification à Deux Facteurs", + "description": "Saisissez votre mot de passe pour confirmer la désactivation de l'authentification à deux facteurs.", + "password": "Mot de passe", + "passwordPlaceholder": "Entrez votre mot de passe", + "confirm": "Confirmer la Désactivation", + "cancel": "Annuler" + }, + "backupCodes": { + "title": "Codes de Secours", + "description": "Conservez ces codes de secours dans un endroit sûr. Vous pouvez les utiliser pour accéder à votre compte si vous perdez votre appareil d'authentification.", + "warning": "Important :", + "warningText": "Chaque code de secours ne peut être utilisé qu'une seule fois. Gardez-les en sécurité et ne les partagez avec personne.", + "generateNew": "Générer de Nouveaux Codes de Secours", + "download": "Télécharger les Codes de Secours", + "copyToClipboard": "Copier dans le Presse-papiers", + "savedMessage": "J'ai Sauvegardé Mes Codes de Secours", + "available": "{count} codes de secours disponibles", + "instructions": [ + "• Sauvegardez ces codes dans un endroit sécurisé", + "• Chaque code de secours ne peut être utilisé qu'une seule fois", + "• Vous pouvez générer de nouveaux codes à tout moment" + ] + }, + "verification": { + "title": "Authentification à Deux Facteurs", + "description": "Saisissez le code à 6 chiffres de votre application d'authentification", + "backupDescription": "Saisissez l'un de vos codes de secours pour continuer", + "verificationCode": "Code de Vérification", + "backupCode": "Code de Secours", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "Vérifier", + "verifying": "Vérification en cours...", + "useBackupCode": "Utiliser un code de secours à la place", + "useAuthenticatorCode": "Utiliser le code d'authentification à la place", + "rememberDevice": "Se souvenir de cet appareil pendant 30 jours", + "rememberDeviceDescription": "Vous n'aurez pas besoin de saisir de codes 2FA sur cet appareil pendant 30 jours" + }, + "messages": { + "enabledSuccess": "L'authentification à deux facteurs a été activée avec succès !", + "disabledSuccess": "L'authentification à deux facteurs a été désactivée avec succès", + "backupCodesGenerated": "Nouveaux codes de secours générés avec succès", + "backupCodesCopied": "Codes de secours copiés dans le presse-papiers", + "setupFailed": "Échec de la génération de la configuration 2FA", + "verificationFailed": "Code de vérification invalide", + "disableFailed": "Échec de la désactivation de la 2FA. Veuillez vérifier votre mot de passe.", + "backupCodesFailed": "Échec de la génération des codes de secours", + "backupCodesCopyFailed": "Échec de la copie des codes de secours", + "statusLoadFailed": "Échec du chargement du statut 2FA", + "enterVerificationCode": "Veuillez saisir le code de vérification", + "enterPassword": "Veuillez saisir votre mot de passe", + "deviceTrusted": "Cet appareil a été marqué comme fiable pendant 30 jours" + }, + "errors": { + "invalidVerificationCode": "Code de vérification invalide", + "invalidTwoFactorCode": "Code d'authentification à deux facteurs invalide", + "twoFactorRequired": "L'authentification à deux facteurs est requise", + "twoFactorAlreadyEnabled": "L'authentification à deux facteurs est déjà activée", + "twoFactorNotEnabled": "L'authentification à deux facteurs n'est pas activée", + "passwordVerificationRequired": "Vérification du mot de passe requise", + "invalidPassword": "Mot de passe invalide", + "userNotFound": "Utilisateur non trouvé" + }, + "buttons": { + "enable2FA": "Activer 2FA", + "disable2FA": "Désactiver 2FA" + }, + "deviceNames": { + "unknownDevice": "Appareil Inconnu", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " sur Windows", + "macos": " sur macOS", + "linux": " sur Linux", + "iphone": " sur iPhone", + "android": " sur Android" + } + }, + "status": { + "label": "Statut :", + "enabled": "Activé", + "disabled": "Désactivé" + }, + "trustedDevices": { + "title": "Appareils de Confiance - 2FA", + "description": "Appareils qui ne nécessitent pas de vérification 2FA", + "noDevices": "Aucun appareil de confiance", + "deviceName": "Appareil", + "addedOn": "Ajouté le", + "expiresOn": "Expire le", + "remove": "Supprimer", + "removeAll": "Tout Supprimer", + "confirmRemove": "Êtes-vous sûr de vouloir supprimer cet appareil de confiance ?", + "confirmRemoveAll": "Êtes-vous sûr de vouloir supprimer tous les appareils de confiance ?", + "deviceRemoved": "Appareil de confiance supprimé avec succès", + "allDevicesRemoved": "Tous les appareils de confiance ont été supprimés avec succès", + "loadFailed": "Échec du chargement des appareils de confiance", + "removeFailed": "Échec de la suppression de l'appareil de confiance", + "removeAllFailed": "Échec de la suppression de tous les appareils de confiance", + "loading": "Chargement des appareils de confiance...", + "noDevicesDescription": "Les appareils apparaîtront ici lorsque vous choisirez de leur faire confiance lors de la vérification 2FA", + "tableHeaders": { + "device": "Appareil", + "added": "Ajouté", + "expires": "Expire", + "lastUsed": "Dernière Utilisation", + "ipAddress": "Adresse IP", + "actions": "Actions" + }, + "status": { + "never": "Jamais", + "expired": "Expiré" + }, + "modals": { + "removeDevice": { + "title": "Supprimer l'Appareil de Confiance", + "added": "Ajouté :", + "ip": "IP :" + }, + "removeAllDevices": { + "title": "Supprimer Tous les Appareils de Confiance", + "description": "Cela supprimera {count} appareil{count, plural, =1 {} other {s}} de confiance. Vous devrez vérifier la 2FA sur tous les appareils à nouveau." + }, + "buttons": { + "cancel": "Annuler", + "removing": "Suppression...", + "removeDevice": "Supprimer l'Appareil", + "removeAllDevices": "Supprimer Tous les Appareils" + } + } + } + }, "uploadFile": { "title": "Télécharger fichier", "multipleTitle": "Télécharger Plusieurs Fichiers", @@ -1542,98 +1713,5 @@ "passwordRequired": "Le mot de passe est requis", "nameRequired": "Nome é obrigatório", "required": "Este campo é obrigatório" - }, - "iconPicker": { - "title": "Sélectionner une Icône", - "placeholder": "Sélectionner une icône", - "searchPlaceholder": "Rechercher des icônes...", - "loadingMore": "Chargement d'autres icônes...", - "allIconsLoaded": "Toutes les {count} icônes sont chargées", - "noIconsFound": "Aucune icône trouvée pour \"{search}\"", - "tabs": { - "all": "Toutes les Icônes", - "popular": "Populaires", - "auth": "Fournisseurs d'Authentification" - }, - "stats": "{iconCount} icônes de {libraryCount} bibliothèques", - "categoryBadge": "{category} ({count} icônes)" - }, - "twoFactor": { - "title": "Authentification à Deux Facteurs", - "description": "Ajoutez une couche de sécurité supplémentaire à votre compte", - "enabled": "Votre compte est protégé par l'authentification à deux facteurs", - "disabled": "L'authentification à deux facteurs n'est pas activée", - "setup": { - "title": "Activer l'Authentification à Deux Facteurs", - "description": "Scannez le code QR avec votre application d'authentification, puis saisissez le code de vérification.", - "qrCode": "Code QR", - "manualEntryKey": "Clé de Saisie Manuelle", - "verificationCode": "Code de Vérification", - "verificationCodePlaceholder": "Entrez le code à 6 chiffres", - "verificationCodeDescription": "Saisissez le code à 6 chiffres de votre application d'authentification", - "verifyAndEnable": "Vérifier et Activer", - "cancel": "Annuler" - }, - "disable": { - "title": "Désactiver l'Authentification à Deux Facteurs", - "description": "Saisissez votre mot de passe pour confirmer la désactivation de l'authentification à deux facteurs.", - "password": "Mot de passe", - "passwordPlaceholder": "Entrez votre mot de passe", - "confirm": "Confirmer la Désactivation", - "cancel": "Annuler" - }, - "backupCodes": { - "title": "Codes de Secours", - "description": "Conservez ces codes de secours dans un endroit sûr. Vous pouvez les utiliser pour accéder à votre compte si vous perdez votre appareil d'authentification.", - "warning": "Important :", - "warningText": "Chaque code de secours ne peut être utilisé qu'une seule fois. Gardez-les en sécurité et ne les partagez avec personne.", - "generateNew": "Générer de Nouveaux Codes de Secours", - "download": "Télécharger les Codes de Secours", - "copyToClipboard": "Copier dans le Presse-papiers", - "savedMessage": "J'ai Sauvegardé Mes Codes de Secours", - "available": "{count} codes de secours disponibles", - "instructions": [ - "• Sauvegardez ces codes dans un endroit sécurisé", - "• Chaque code de secours ne peut être utilisé qu'une seule fois", - "• Vous pouvez générer de nouveaux codes à tout moment" - ] - }, - "verification": { - "title": "Authentification à Deux Facteurs", - "description": "Saisissez le code à 6 chiffres de votre application d'authentification", - "backupDescription": "Saisissez l'un de vos codes de secours pour continuer", - "verificationCode": "Code de Vérification", - "backupCode": "Code de Secours", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "Vérifier", - "verifying": "Vérification en cours...", - "useBackupCode": "Utiliser un code de secours à la place", - "useAuthenticatorCode": "Utiliser le code d'authentification à la place" - }, - "messages": { - "enabledSuccess": "L'authentification à deux facteurs a été activée avec succès !", - "disabledSuccess": "L'authentification à deux facteurs a été désactivée avec succès", - "backupCodesGenerated": "Nouveaux codes de secours générés avec succès", - "backupCodesCopied": "Codes de secours copiés dans le presse-papiers", - "setupFailed": "Échec de la génération de la configuration 2FA", - "verificationFailed": "Code de vérification invalide", - "disableFailed": "Échec de la désactivation de la 2FA. Veuillez vérifier votre mot de passe.", - "backupCodesFailed": "Échec de la génération des codes de secours", - "backupCodesCopyFailed": "Échec de la copie des codes de secours", - "statusLoadFailed": "Échec du chargement du statut 2FA", - "enterVerificationCode": "Veuillez saisir le code de vérification", - "enterPassword": "Veuillez saisir votre mot de passe" - }, - "errors": { - "invalidVerificationCode": "Code de vérification invalide", - "invalidTwoFactorCode": "Code d'authentification à deux facteurs invalide", - "twoFactorRequired": "L'authentification à deux facteurs est requise", - "twoFactorAlreadyEnabled": "L'authentification à deux facteurs est déjà activée", - "twoFactorNotEnabled": "L'authentification à deux facteurs n'est pas activée", - "passwordVerificationRequired": "Vérification du mot de passe requise", - "invalidPassword": "Mot de passe invalide", - "userNotFound": "Utilisateur non trouvé" - } } } \ No newline at end of file diff --git a/apps/web/messages/hi-IN.json b/apps/web/messages/hi-IN.json index 7d7d1e6..6b571ab 100644 --- a/apps/web/messages/hi-IN.json +++ b/apps/web/messages/hi-IN.json @@ -143,7 +143,8 @@ "saving": "सहेज रहा है...", "update": "अपडेट करें", "click": "क्लिक करें", - "creating": "बना रहा है..." + "creating": "बना रहा है...", + "loadingSimple": "लोड हो रहा है..." }, "createShare": { "title": "साझाकरण बनाएं", @@ -189,7 +190,8 @@ "Password verification required": "पासवर्ड सत्यापन आवश्यक है", "Two-factor authentication is already enabled": "दो-कारक प्रमाणीकरण पहले से सक्षम है", "Two-factor authentication is not enabled": "दो-कारक प्रमाणीकरण सक्षम नहीं है", - "Two-factor authentication required": "दो-कारक प्रमाणीकरण आवश्यक है" + "Two-factor authentication required": "दो-कारक प्रमाणीकरण आवश्यक है", + "noUserData": "उपयोगकर्ता डेटा नहीं मिला" }, "fileActions": { "editFile": "फाइल संपादित करें", @@ -338,6 +340,21 @@ }, "pageTitle": "होम" }, + "iconPicker": { + "title": "आइकन चुनें", + "placeholder": "एक आइकन चुनें", + "searchPlaceholder": "आइकन खोजें...", + "loadingMore": "अधिक आइकन लोड हो रहे हैं...", + "allIconsLoaded": "सभी {count} आइकन लोड हो गए", + "noIconsFound": "\"{search}\" के लिए कोई आइकन नहीं मिला", + "tabs": { + "all": "सभी आइकन", + "popular": "लोकप्रिय", + "auth": "प्रमाणीकरण प्रदाता" + }, + "stats": "{libraryCount} लाइब्रेरी से {iconCount} आइकन", + "categoryBadge": "{category} ({count} आइकन)" + }, "login": { "welcome": "स्वागत है में", "signInToContinue": "जारी रखने के लिए साइन इन करें", @@ -1426,6 +1443,160 @@ "dark": "डार्क", "system": "सिस्टम" }, + "twoFactor": { + "title": "दो-कारक प्रमाणीकरण", + "description": "अपने खाते में अतिरिक्त सुरक्षा स्तर जोड़ें", + "enabled": "आपका खाता दो-कारक प्रमाणीकरण से सुरक्षित है", + "disabled": "दो-कारक प्रमाणीकरण सक्षम नहीं है", + "setup": { + "title": "दो-कारक प्रमाणीकरण सक्षम करें", + "description": "अपने प्रमाणीकरण ऐप से QR कोड स्कैन करें, फिर सत्यापन कोड दर्ज करें।", + "qrCode": "QR कोड", + "manualEntryKey": "मैनुअल एंट्री कुंजी", + "verificationCode": "सत्यापन कोड", + "verificationCodePlaceholder": "6-अंकों का कोड दर्ज करें", + "verificationCodeDescription": "अपने प्रमाणीकरण ऐप से 6-अंकों का कोड दर्ज करें", + "verifyAndEnable": "सत्यापित करें और सक्षम करें", + "cancel": "रद्द करें" + }, + "disable": { + "title": "दो-कारक प्रमाणीकरण अक्षम करें", + "description": "दो-कारक प्रमाणीकरण को अक्षम करने की पुष्टि के लिए अपना पासवर्ड दर्ज करें।", + "password": "पासवर्ड", + "passwordPlaceholder": "अपना पासवर्ड दर्ज करें", + "confirm": "अक्षम करने की पुष्टि करें", + "cancel": "रद्द करें" + }, + "backupCodes": { + "title": "बैकअप कोड", + "description": "इन बैकअप कोड को सुरक्षित स्थान पर सहेजें। यदि आप अपना प्रमाणीकरण डिवाइस खो देते हैं तो आप इनका उपयोग अपने खाते तक पहुंचने के लिए कर सकते हैं।", + "warning": "महत्वपूर्ण:", + "warningText": "प्रत्येक बैकअप कोड का उपयोग केवल एक बार किया जा सकता है। उन्हें सुरक्षित रखें और किसी के साथ साझा न करें।", + "generateNew": "नए बैकअप कोड जनरेट करें", + "download": "बैकअप कोड डाउनलोड करें", + "copyToClipboard": "क्लिपबोर्ड पर कॉपी करें", + "savedMessage": "मैंने अपने बैकअप कोड सहेज लिए हैं", + "available": "{count} बैकअप कोड उपलब्ध हैं", + "instructions": [ + "• इन कोड को सुरक्षित स्थान पर सहेजें", + "• प्रत्येक बैकअप कोड का उपयोग केवल एक बार किया जा सकता है", + "• आप कभी भी नए कोड जनरेट कर सकते हैं" + ] + }, + "verification": { + "title": "दो-कारक प्रमाणीकरण", + "description": "अपने प्रमाणीकरण ऐप से 6-अंकों का कोड दर्ज करें", + "backupDescription": "जारी रखने के लिए अपने बैकअप कोड में से एक दर्ज करें", + "verificationCode": "सत्यापन कोड", + "backupCode": "बैकअप कोड", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "सत्यापित करें", + "verifying": "सत्यापन हो रहा है...", + "useBackupCode": "इसके बजाय बैकअप कोड का उपयोग करें", + "useAuthenticatorCode": "इसके बजाय प्रमाणीकरण कोड का उपयोग करें", + "rememberDevice": "इस डिवाइस को 30 दिनों के लिए याद रखें", + "rememberDeviceDescription": "आपको इस डिवाइस पर 30 दिनों तक 2FA कोड दर्ज करने की आवश्यकता नहीं होगी" + }, + "messages": { + "enabledSuccess": "दो-कारक प्रमाणीकरण सफलतापूर्वक सक्षम किया गया!", + "disabledSuccess": "दो-कारक प्रमाणीकरण सफलतापूर्वक अक्षम किया गया", + "backupCodesGenerated": "नए बैकअप कोड सफलतापूर्वक जनरेट किए गए", + "backupCodesCopied": "बैकअप कोड क्लिपबोर्ड पर कॉपी किए गए", + "setupFailed": "2FA सेटअप जनरेट करने में विफल", + "verificationFailed": "अमान्य सत्यापन कोड", + "disableFailed": "2FA अक्षम करने में विफल। कृपया अपना पासवर्ड जांचें।", + "backupCodesFailed": "बैकअप कोड जनरेट करने में विफल", + "backupCodesCopyFailed": "बैकअप कोड कॉपी करने में विफल", + "statusLoadFailed": "2FA स्थिति लोड करने में विफल", + "enterVerificationCode": "कृपया सत्यापन कोड दर्ज करें", + "enterPassword": "कृपया अपना पासवर्ड दर्ज करें", + "deviceTrusted": "यह डिवाइस 30 दिनों के लिए विश्वसनीय के रूप में चिह्नित किया गया है" + }, + "errors": { + "invalidVerificationCode": "अमान्य सत्यापन कोड", + "invalidTwoFactorCode": "अमान्य दो-कारक प्रमाणीकरण कोड", + "twoFactorRequired": "दो-कारक प्रमाणीकरण आवश्यक है", + "twoFactorAlreadyEnabled": "दो-कारक प्रमाणीकरण पहले से सक्षम है", + "twoFactorNotEnabled": "दो-कारक प्रमाणीकरण सक्षम नहीं है", + "passwordVerificationRequired": "पासवर्ड सत्यापन आवश्यक है", + "invalidPassword": "अमान्य पासवर्ड", + "userNotFound": "उपयोगकर्ता नहीं मिला" + }, + "buttons": { + "enable2FA": "2FA सक्षम करें", + "disable2FA": "2FA अक्षम करें" + }, + "deviceNames": { + "unknownDevice": "अज्ञात डिवाइस", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " Windows पर", + "macos": " macOS पर", + "linux": " Linux पर", + "iphone": " iPhone पर", + "android": " Android पर" + } + }, + "status": { + "label": "स्थिति:", + "enabled": "सक्षम", + "disabled": "अक्षम" + }, + "trustedDevices": { + "title": "विश्वसनीय डिवाइस - 2FA", + "description": "डिवाइस जिन्हें 2FA सत्यापन की आवश्यकता नहीं है", + "noDevices": "कोई विश्वसनीय डिवाइस नहीं", + "deviceName": "डिवाइस", + "addedOn": "जोड़ा गया", + "expiresOn": "समाप्ति तिथि", + "remove": "हटाएं", + "removeAll": "सभी हटाएं", + "confirmRemove": "क्या आप वाकई इस विश्वसनीय डिवाइस को हटाना चाहते हैं?", + "confirmRemoveAll": "क्या आप वाकई सभी विश्वसनीय डिवाइस हटाना चाहते हैं?", + "deviceRemoved": "विश्वसनीय डिवाइस सफलतापूर्वक हटाया गया", + "allDevicesRemoved": "सभी विश्वसनीय डिवाइस सफलतापूर्वक हटाए गए", + "loadFailed": "विश्वसनीय डिवाइस लोड करने में विफल", + "removeFailed": "विश्वसनीय डिवाइस हटाने में विफल", + "removeAllFailed": "सभी विश्वसनीय डिवाइस हटाने में विफल", + "loading": "विश्वसनीय डिवाइस लोड हो रहे हैं...", + "noDevicesDescription": "जब आप 2FA सत्यापन के दौरान उन्हें विश्वसनीय मानने का चयन करेंगे तो डिवाइस यहां दिखाई देंगे", + "tableHeaders": { + "device": "डिवाइस", + "added": "जोड़ा गया", + "expires": "समाप्ति", + "lastUsed": "अंतिम उपयोग", + "ipAddress": "IP पता", + "actions": "कार्रवाई" + }, + "status": { + "never": "कभी नहीं", + "expired": "समाप्त" + }, + "modals": { + "removeDevice": { + "title": "विश्वसनीय डिवाइस हटाएं", + "added": "जोड़ा गया:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "सभी विश्वसनीय डिवाइस हटाएं", + "description": "यह {count} विश्वसनीय डिवाइस{count, plural, =1 {} other {s}} को हटा देगा। आपको सभी डिवाइस पर फिर से 2FA सत्यापित करना होगा।" + }, + "buttons": { + "cancel": "रद्द करें", + "removing": "हटाया जा रहा है...", + "removeDevice": "डिवाइस हटाएं", + "removeAllDevices": "सभी डिवाइस हटाएं" + } + } + } + }, "uploadFile": { "title": "फ़ाइल अपलोड करें", "multipleTitle": "कई फ़ाइलें अपलोड करें", @@ -1542,98 +1713,5 @@ "passwordRequired": "पासवर्ड आवश्यक है", "nameRequired": "नाम आवश्यक है", "required": "यह फ़ील्ड आवश्यक है" - }, - "iconPicker": { - "title": "आइकन चुनें", - "placeholder": "एक आइकन चुनें", - "searchPlaceholder": "आइकन खोजें...", - "loadingMore": "अधिक आइकन लोड हो रहे हैं...", - "allIconsLoaded": "सभी {count} आइकन लोड हो गए", - "noIconsFound": "\"{search}\" के लिए कोई आइकन नहीं मिला", - "tabs": { - "all": "सभी आइकन", - "popular": "लोकप्रिय", - "auth": "प्रमाणीकरण प्रदाता" - }, - "stats": "{libraryCount} लाइब्रेरी से {iconCount} आइकन", - "categoryBadge": "{category} ({count} आइकन)" - }, - "twoFactor": { - "title": "दो-कारक प्रमाणीकरण", - "description": "अपने खाते में अतिरिक्त सुरक्षा स्तर जोड़ें", - "enabled": "आपका खाता दो-कारक प्रमाणीकरण से सुरक्षित है", - "disabled": "दो-कारक प्रमाणीकरण सक्षम नहीं है", - "setup": { - "title": "दो-कारक प्रमाणीकरण सक्षम करें", - "description": "अपने प्रमाणीकरण ऐप से QR कोड स्कैन करें, फिर सत्यापन कोड दर्ज करें।", - "qrCode": "QR कोड", - "manualEntryKey": "मैनुअल एंट्री कुंजी", - "verificationCode": "सत्यापन कोड", - "verificationCodePlaceholder": "6-अंकों का कोड दर्ज करें", - "verificationCodeDescription": "अपने प्रमाणीकरण ऐप से 6-अंकों का कोड दर्ज करें", - "verifyAndEnable": "सत्यापित करें और सक्षम करें", - "cancel": "रद्द करें" - }, - "disable": { - "title": "दो-कारक प्रमाणीकरण अक्षम करें", - "description": "दो-कारक प्रमाणीकरण को अक्षम करने की पुष्टि के लिए अपना पासवर्ड दर्ज करें।", - "password": "पासवर्ड", - "passwordPlaceholder": "अपना पासवर्ड दर्ज करें", - "confirm": "अक्षम करने की पुष्टि करें", - "cancel": "रद्द करें" - }, - "backupCodes": { - "title": "बैकअप कोड", - "description": "इन बैकअप कोड को सुरक्षित स्थान पर सहेजें। यदि आप अपना प्रमाणीकरण डिवाइस खो देते हैं तो आप इनका उपयोग अपने खाते तक पहुंचने के लिए कर सकते हैं।", - "warning": "महत्वपूर्ण:", - "warningText": "प्रत्येक बैकअप कोड का उपयोग केवल एक बार किया जा सकता है। उन्हें सुरक्षित रखें और किसी के साथ साझा न करें।", - "generateNew": "नए बैकअप कोड जनरेट करें", - "download": "बैकअप कोड डाउनलोड करें", - "copyToClipboard": "क्लिपबोर्ड पर कॉपी करें", - "savedMessage": "मैंने अपने बैकअप कोड सहेज लिए हैं", - "available": "{count} बैकअप कोड उपलब्ध हैं", - "instructions": [ - "• इन कोड को सुरक्षित स्थान पर सहेजें", - "• प्रत्येक बैकअप कोड का उपयोग केवल एक बार किया जा सकता है", - "• आप कभी भी नए कोड जनरेट कर सकते हैं" - ] - }, - "verification": { - "title": "दो-कारक प्रमाणीकरण", - "description": "अपने प्रमाणीकरण ऐप से 6-अंकों का कोड दर्ज करें", - "backupDescription": "जारी रखने के लिए अपने बैकअप कोड में से एक दर्ज करें", - "verificationCode": "सत्यापन कोड", - "backupCode": "बैकअप कोड", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "सत्यापित करें", - "verifying": "सत्यापन हो रहा है...", - "useBackupCode": "इसके बजाय बैकअप कोड का उपयोग करें", - "useAuthenticatorCode": "इसके बजाय प्रमाणीकरण कोड का उपयोग करें" - }, - "messages": { - "enabledSuccess": "दो-कारक प्रमाणीकरण सफलतापूर्वक सक्षम किया गया!", - "disabledSuccess": "दो-कारक प्रमाणीकरण सफलतापूर्वक अक्षम किया गया", - "backupCodesGenerated": "नए बैकअप कोड सफलतापूर्वक जनरेट किए गए", - "backupCodesCopied": "बैकअप कोड क्लिपबोर्ड पर कॉपी किए गए", - "setupFailed": "2FA सेटअप जनरेट करने में विफल", - "verificationFailed": "अमान्य सत्यापन कोड", - "disableFailed": "2FA अक्षम करने में विफल। कृपया अपना पासवर्ड जांचें।", - "backupCodesFailed": "बैकअप कोड जनरेट करने में विफल", - "backupCodesCopyFailed": "बैकअप कोड कॉपी करने में विफल", - "statusLoadFailed": "2FA स्थिति लोड करने में विफल", - "enterVerificationCode": "कृपया सत्यापन कोड दर्ज करें", - "enterPassword": "कृपया अपना पासवर्ड दर्ज करें" - }, - "errors": { - "invalidVerificationCode": "अमान्य सत्यापन कोड", - "invalidTwoFactorCode": "अमान्य दो-कारक प्रमाणीकरण कोड", - "twoFactorRequired": "दो-कारक प्रमाणीकरण आवश्यक है", - "twoFactorAlreadyEnabled": "दो-कारक प्रमाणीकरण पहले से सक्षम है", - "twoFactorNotEnabled": "दो-कारक प्रमाणीकरण सक्षम नहीं है", - "passwordVerificationRequired": "पासवर्ड सत्यापन आवश्यक है", - "invalidPassword": "अमान्य पासवर्ड", - "userNotFound": "उपयोगकर्ता नहीं मिला" - } } } \ No newline at end of file diff --git a/apps/web/messages/it-IT.json b/apps/web/messages/it-IT.json index 1b10366..60cdc2f 100644 --- a/apps/web/messages/it-IT.json +++ b/apps/web/messages/it-IT.json @@ -143,7 +143,8 @@ "saving": "Salvataggio...", "update": "Aggiorna", "click": "Clicca per", - "creating": "Creazione in corso..." + "creating": "Creazione in corso...", + "loadingSimple": "Caricamento..." }, "createShare": { "title": "Crea Condivisione", @@ -189,7 +190,8 @@ "Password verification required": "Verifica della password richiesta", "Two-factor authentication is already enabled": "L'autenticazione a due fattori è già abilitata", "Two-factor authentication is not enabled": "L'autenticazione a due fattori non è abilitata", - "Two-factor authentication required": "Autenticazione a due fattori richiesta" + "Two-factor authentication required": "Autenticazione a due fattori richiesta", + "noUserData": "Nessun dato utente" }, "fileActions": { "editFile": "Modifica File", @@ -338,6 +340,21 @@ }, "pageTitle": "Pagina iniziale" }, + "iconPicker": { + "title": "Seleziona Icona", + "placeholder": "Seleziona un'icona", + "searchPlaceholder": "Cerca icone...", + "loadingMore": "Caricamento altre icone...", + "allIconsLoaded": "Tutte le {count} icone caricate", + "noIconsFound": "Nessuna icona trovata per \"{search}\"", + "tabs": { + "all": "Tutte le Icone", + "popular": "Popolari", + "auth": "Provider di Autenticazione" + }, + "stats": "{iconCount} icone da {libraryCount} librerie", + "categoryBadge": "{category} ({count} icone)" + }, "login": { "welcome": "Benvenuto in", "signInToContinue": "Accedi per continuare", @@ -1426,6 +1443,160 @@ "dark": "Scuro", "system": "Sistema" }, + "twoFactor": { + "title": "Autenticazione a Due Fattori", + "description": "Aggiungi un ulteriore livello di sicurezza al tuo account", + "enabled": "Il tuo account è protetto con l'autenticazione a due fattori", + "disabled": "L'autenticazione a due fattori non è abilitata", + "setup": { + "title": "Abilita Autenticazione a Due Fattori", + "description": "Scansiona il codice QR con la tua app di autenticazione, quindi inserisci il codice di verifica.", + "qrCode": "Codice QR", + "manualEntryKey": "Chiave per Inserimento Manuale", + "verificationCode": "Codice di Verifica", + "verificationCodePlaceholder": "Inserisci il codice a 6 cifre", + "verificationCodeDescription": "Inserisci il codice a 6 cifre dalla tua app di autenticazione", + "verifyAndEnable": "Verifica e Abilita", + "cancel": "Annulla" + }, + "disable": { + "title": "Disabilita Autenticazione a Due Fattori", + "description": "Inserisci la tua password per confermare la disabilitazione dell'autenticazione a due fattori.", + "password": "Password", + "passwordPlaceholder": "Inserisci la tua password", + "confirm": "Conferma Disabilitazione", + "cancel": "Annulla" + }, + "backupCodes": { + "title": "Codici di Backup", + "description": "Salva questi codici di backup in un luogo sicuro. Puoi usarli per accedere al tuo account se perdi il tuo dispositivo di autenticazione.", + "warning": "Importante:", + "warningText": "Ogni codice di backup può essere utilizzato una sola volta. Conservali in modo sicuro e non condividerli con nessuno.", + "generateNew": "Genera Nuovi Codici di Backup", + "download": "Scarica Codici di Backup", + "copyToClipboard": "Copia negli Appunti", + "savedMessage": "Ho Salvato i Miei Codici di Backup", + "available": "{count} codici di backup disponibili", + "instructions": [ + "• Salva questi codici in un luogo sicuro", + "• Ogni codice di backup può essere utilizzato una sola volta", + "• Puoi generare nuovi codici in qualsiasi momento" + ] + }, + "verification": { + "title": "Autenticazione a Due Fattori", + "description": "Inserisci il codice a 6 cifre dalla tua app di autenticazione", + "backupDescription": "Inserisci uno dei tuoi codici di backup per continuare", + "verificationCode": "Codice di Verifica", + "backupCode": "Codice di Backup", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "Verifica", + "verifying": "Verifica in corso...", + "useBackupCode": "Usa invece un codice di backup", + "useAuthenticatorCode": "Usa invece il codice dell'autenticatore", + "rememberDevice": "Ricorda questo dispositivo per 30 giorni", + "rememberDeviceDescription": "Non dovrai inserire codici 2FA su questo dispositivo per 30 giorni" + }, + "messages": { + "enabledSuccess": "Autenticazione a due fattori abilitata con successo!", + "disabledSuccess": "Autenticazione a due fattori disabilitata con successo", + "backupCodesGenerated": "Nuovi codici di backup generati con successo", + "backupCodesCopied": "Codici di backup copiati negli appunti", + "setupFailed": "Impossibile generare la configurazione 2FA", + "verificationFailed": "Codice di verifica non valido", + "disableFailed": "Impossibile disabilitare 2FA. Verifica la tua password.", + "backupCodesFailed": "Impossibile generare i codici di backup", + "backupCodesCopyFailed": "Impossibile copiare i codici di backup", + "statusLoadFailed": "Impossibile caricare lo stato 2FA", + "enterVerificationCode": "Inserisci il codice di verifica", + "enterPassword": "Inserisci la tua password", + "deviceTrusted": "Questo dispositivo è stato contrassegnato come affidabile per 30 giorni" + }, + "errors": { + "invalidVerificationCode": "Codice di verifica non valido", + "invalidTwoFactorCode": "Codice di autenticazione a due fattori non valido", + "twoFactorRequired": "Autenticazione a due fattori richiesta", + "twoFactorAlreadyEnabled": "L'autenticazione a due fattori è già abilitata", + "twoFactorNotEnabled": "L'autenticazione a due fattori non è abilitata", + "passwordVerificationRequired": "Verifica password richiesta", + "invalidPassword": "Password non valida", + "userNotFound": "Utente non trovato" + }, + "buttons": { + "enable2FA": "Abilita 2FA", + "disable2FA": "Disabilita 2FA" + }, + "deviceNames": { + "unknownDevice": "Dispositivo Sconosciuto", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " su Windows", + "macos": " su macOS", + "linux": " su Linux", + "iphone": " su iPhone", + "android": " su Android" + } + }, + "status": { + "label": "Stato:", + "enabled": "Abilitato", + "disabled": "Disabilitato" + }, + "trustedDevices": { + "title": "Dispositivi Affidabili - 2FA", + "description": "Dispositivi che non richiedono la verifica 2FA", + "noDevices": "Nessun dispositivo affidabile", + "deviceName": "Dispositivo", + "addedOn": "Aggiunto il", + "expiresOn": "Scade il", + "remove": "Rimuovi", + "removeAll": "Rimuovi Tutti", + "confirmRemove": "Sei sicuro di voler rimuovere questo dispositivo affidabile?", + "confirmRemoveAll": "Sei sicuro di voler rimuovere tutti i dispositivi affidabili?", + "deviceRemoved": "Dispositivo affidabile rimosso con successo", + "allDevicesRemoved": "Tutti i dispositivi affidabili rimossi con successo", + "loadFailed": "Impossibile caricare i dispositivi affidabili", + "removeFailed": "Impossibile rimuovere il dispositivo affidabile", + "removeAllFailed": "Impossibile rimuovere tutti i dispositivi affidabili", + "loading": "Caricamento dispositivi affidabili...", + "noDevicesDescription": "I dispositivi appariranno qui quando scegli di fidarti di loro durante la verifica 2FA", + "tableHeaders": { + "device": "Dispositivo", + "added": "Aggiunto", + "expires": "Scade", + "lastUsed": "Ultimo Utilizzo", + "ipAddress": "Indirizzo IP", + "actions": "Azioni" + }, + "status": { + "never": "Mai", + "expired": "Scaduto" + }, + "modals": { + "removeDevice": { + "title": "Rimuovi Dispositivo Affidabile", + "added": "Aggiunto:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "Rimuovi Tutti i Dispositivi Affidabili", + "description": "Questo rimuoverà {count} dispositivo{count, plural, =1 {} other {i}} affidabile{count, plural, =1 {} other {i}}. Dovrai verificare 2FA su tutti i dispositivi nuovamente." + }, + "buttons": { + "cancel": "Annulla", + "removing": "Rimozione in corso...", + "removeDevice": "Rimuovi Dispositivo", + "removeAllDevices": "Rimuovi Tutti i Dispositivi" + } + } + } + }, "uploadFile": { "title": "Carica file", "multipleTitle": "Carica Più File", @@ -1542,98 +1713,5 @@ "passwordMinLength": "La password deve contenere almeno 6 caratteri", "nameRequired": "Il nome è obbligatorio", "required": "Questo campo è obbligatorio" - }, - "iconPicker": { - "title": "Seleziona Icona", - "placeholder": "Seleziona un'icona", - "searchPlaceholder": "Cerca icone...", - "loadingMore": "Caricamento altre icone...", - "allIconsLoaded": "Tutte le {count} icone caricate", - "noIconsFound": "Nessuna icona trovata per \"{search}\"", - "tabs": { - "all": "Tutte le Icone", - "popular": "Popolari", - "auth": "Provider di Autenticazione" - }, - "stats": "{iconCount} icone da {libraryCount} librerie", - "categoryBadge": "{category} ({count} icone)" - }, - "twoFactor": { - "title": "Autenticazione a Due Fattori", - "description": "Aggiungi un ulteriore livello di sicurezza al tuo account", - "enabled": "Il tuo account è protetto con l'autenticazione a due fattori", - "disabled": "L'autenticazione a due fattori non è abilitata", - "setup": { - "title": "Abilita Autenticazione a Due Fattori", - "description": "Scansiona il codice QR con la tua app di autenticazione, quindi inserisci il codice di verifica.", - "qrCode": "Codice QR", - "manualEntryKey": "Chiave per Inserimento Manuale", - "verificationCode": "Codice di Verifica", - "verificationCodePlaceholder": "Inserisci il codice a 6 cifre", - "verificationCodeDescription": "Inserisci il codice a 6 cifre dalla tua app di autenticazione", - "verifyAndEnable": "Verifica e Abilita", - "cancel": "Annulla" - }, - "disable": { - "title": "Disabilita Autenticazione a Due Fattori", - "description": "Inserisci la tua password per confermare la disabilitazione dell'autenticazione a due fattori.", - "password": "Password", - "passwordPlaceholder": "Inserisci la tua password", - "confirm": "Conferma Disabilitazione", - "cancel": "Annulla" - }, - "backupCodes": { - "title": "Codici di Backup", - "description": "Salva questi codici di backup in un luogo sicuro. Puoi usarli per accedere al tuo account se perdi il tuo dispositivo di autenticazione.", - "warning": "Importante:", - "warningText": "Ogni codice di backup può essere utilizzato una sola volta. Conservali in modo sicuro e non condividerli con nessuno.", - "generateNew": "Genera Nuovi Codici di Backup", - "download": "Scarica Codici di Backup", - "copyToClipboard": "Copia negli Appunti", - "savedMessage": "Ho Salvato i Miei Codici di Backup", - "available": "{count} codici di backup disponibili", - "instructions": [ - "• Salva questi codici in un luogo sicuro", - "• Ogni codice di backup può essere utilizzato una sola volta", - "• Puoi generare nuovi codici in qualsiasi momento" - ] - }, - "verification": { - "title": "Autenticazione a Due Fattori", - "description": "Inserisci il codice a 6 cifre dalla tua app di autenticazione", - "backupDescription": "Inserisci uno dei tuoi codici di backup per continuare", - "verificationCode": "Codice di Verifica", - "backupCode": "Codice di Backup", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "Verifica", - "verifying": "Verifica in corso...", - "useBackupCode": "Usa invece un codice di backup", - "useAuthenticatorCode": "Usa invece il codice dell'autenticatore" - }, - "messages": { - "enabledSuccess": "Autenticazione a due fattori abilitata con successo!", - "disabledSuccess": "Autenticazione a due fattori disabilitata con successo", - "backupCodesGenerated": "Nuovi codici di backup generati con successo", - "backupCodesCopied": "Codici di backup copiati negli appunti", - "setupFailed": "Impossibile generare la configurazione 2FA", - "verificationFailed": "Codice di verifica non valido", - "disableFailed": "Impossibile disabilitare 2FA. Verifica la tua password.", - "backupCodesFailed": "Impossibile generare i codici di backup", - "backupCodesCopyFailed": "Impossibile copiare i codici di backup", - "statusLoadFailed": "Impossibile caricare lo stato 2FA", - "enterVerificationCode": "Inserisci il codice di verifica", - "enterPassword": "Inserisci la tua password" - }, - "errors": { - "invalidVerificationCode": "Codice di verifica non valido", - "invalidTwoFactorCode": "Codice di autenticazione a due fattori non valido", - "twoFactorRequired": "Autenticazione a due fattori richiesta", - "twoFactorAlreadyEnabled": "L'autenticazione a due fattori è già abilitata", - "twoFactorNotEnabled": "L'autenticazione a due fattori non è abilitata", - "passwordVerificationRequired": "Verifica password richiesta", - "invalidPassword": "Password non valida", - "userNotFound": "Utente non trovato" - } } } \ No newline at end of file diff --git a/apps/web/messages/ja-JP.json b/apps/web/messages/ja-JP.json index ed21e63..b8ade15 100644 --- a/apps/web/messages/ja-JP.json +++ b/apps/web/messages/ja-JP.json @@ -143,7 +143,8 @@ "saving": "保存中...", "update": "更新", "click": "クリックして", - "creating": "作成中..." + "creating": "作成中...", + "loadingSimple": "読み込み中..." }, "createShare": { "title": "共有を作成", @@ -189,7 +190,8 @@ "Password verification required": "パスワードの確認が必要です", "Two-factor authentication is already enabled": "二要素認証は既に有効になっています", "Two-factor authentication is not enabled": "二要素認証が有効になっていません", - "Two-factor authentication required": "二要素認証が必要です" + "Two-factor authentication required": "二要素認証が必要です", + "noUserData": "ユーザーデータがありません" }, "fileActions": { "editFile": "ファイルを編集", @@ -338,6 +340,21 @@ }, "pageTitle": "ホーム" }, + "iconPicker": { + "title": "アイコンを選択", + "placeholder": "アイコンを選択してください", + "searchPlaceholder": "アイコンを検索...", + "loadingMore": "アイコンを読み込み中...", + "allIconsLoaded": "全{count}個のアイコンを読み込みました", + "noIconsFound": "\"{search}\"に一致するアイコンが見つかりませんでした", + "tabs": { + "all": "すべてのアイコン", + "popular": "人気", + "auth": "認証プロバイダー" + }, + "stats": "{libraryCount}ライブラリから{iconCount}個のアイコン", + "categoryBadge": "{category}({count}個のアイコン)" + }, "login": { "welcome": "ようこそへ", "signInToContinue": "続行するにはサインインしてください", @@ -1426,6 +1443,160 @@ "dark": "ダーク", "system": "システム" }, + "twoFactor": { + "title": "二要素認証", + "description": "アカウントにセキュリティ層を追加", + "enabled": "アカウントは二要素認証で保護されています", + "disabled": "二要素認証は有効になっていません", + "setup": { + "title": "二要素認証を有効にする", + "description": "認証アプリでQRコードをスキャンし、確認コードを入力してください。", + "qrCode": "QRコード", + "manualEntryKey": "手動入力キー", + "verificationCode": "確認コード", + "verificationCodePlaceholder": "6桁のコードを入力", + "verificationCodeDescription": "認証アプリから6桁のコードを入力してください", + "verifyAndEnable": "確認して有効化", + "cancel": "キャンセル" + }, + "disable": { + "title": "二要素認証を無効にする", + "description": "二要素認証を無効にするには、パスワードを入力して確認してください。", + "password": "パスワード", + "passwordPlaceholder": "パスワードを入力", + "confirm": "無効化を確認", + "cancel": "キャンセル" + }, + "backupCodes": { + "title": "バックアップコード", + "description": "これらのバックアップコードを安全な場所に保管してください。認証デバイスを紛失した場合、アカウントへのアクセスに使用できます。", + "warning": "重要:", + "warningText": "各バックアップコードは1回のみ使用できます。安全に保管し、誰とも共有しないでください。", + "generateNew": "新しいバックアップコードを生成", + "download": "バックアップコードをダウンロード", + "copyToClipboard": "クリップボードにコピー", + "savedMessage": "バックアップコードを保存しました", + "available": "利用可能なバックアップコード:{count}個", + "instructions": [ + "• これらのコードを安全な場所に保管してください", + "• 各バックアップコードは1回のみ使用できます", + "• いつでも新しいコードを生成できます" + ] + }, + "verification": { + "title": "二要素認証", + "description": "認証アプリから6桁のコードを入力してください", + "backupDescription": "続行するにはバックアップコードを入力してください", + "verificationCode": "確認コード", + "backupCode": "バックアップコード", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "確認", + "verifying": "確認中...", + "useBackupCode": "代わりにバックアップコードを使用", + "useAuthenticatorCode": "代わりに認証アプリのコードを使用", + "rememberDevice": "このデバイスを30日間記憶する", + "rememberDeviceDescription": "このデバイスでは30日間2FAコードを入力する必要はありません" + }, + "messages": { + "enabledSuccess": "二要素認証が正常に有効化されました!", + "disabledSuccess": "二要素認証が正常に無効化されました", + "backupCodesGenerated": "新しいバックアップコードが正常に生成されました", + "backupCodesCopied": "バックアップコードがクリップボードにコピーされました", + "setupFailed": "2FA設定の生成に失敗しました", + "verificationFailed": "確認コードが無効です", + "disableFailed": "2FAの無効化に失敗しました。パスワードを確認してください。", + "backupCodesFailed": "バックアップコードの生成に失敗しました", + "backupCodesCopyFailed": "バックアップコードのコピーに失敗しました", + "statusLoadFailed": "2FAステータスの読み込みに失敗しました", + "enterVerificationCode": "確認コードを入力してください", + "enterPassword": "パスワードを入力してください", + "deviceTrusted": "このデバイスは30日間信頼できるデバイスとしてマークされました" + }, + "errors": { + "invalidVerificationCode": "確認コードが無効です", + "invalidTwoFactorCode": "二要素認証コードが無効です", + "twoFactorRequired": "二要素認証が必要です", + "twoFactorAlreadyEnabled": "二要素認証はすでに有効になっています", + "twoFactorNotEnabled": "二要素認証が有効になっていません", + "passwordVerificationRequired": "パスワードの確認が必要です", + "invalidPassword": "パスワードが無効です", + "userNotFound": "ユーザーが見つかりません" + }, + "buttons": { + "enable2FA": "2FAを有効にする", + "disable2FA": "2FAを無効にする" + }, + "deviceNames": { + "unknownDevice": "不明なデバイス", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " on Windows", + "macos": " on macOS", + "linux": " on Linux", + "iphone": " on iPhone", + "android": " on Android" + } + }, + "status": { + "label": "状態:", + "enabled": "有効", + "disabled": "無効" + }, + "trustedDevices": { + "title": "信頼済みデバイス - 2FA", + "description": "2FA認証が不要なデバイス", + "noDevices": "信頼済みデバイスはありません", + "deviceName": "デバイス", + "addedOn": "追加日", + "expiresOn": "有効期限", + "remove": "削除", + "removeAll": "すべて削除", + "confirmRemove": "この信頼済みデバイスを削除してもよろしいですか?", + "confirmRemoveAll": "すべての信頼済みデバイスを削除してもよろしいですか?", + "deviceRemoved": "信頼済みデバイスが正常に削除されました", + "allDevicesRemoved": "すべての信頼済みデバイスが正常に削除されました", + "loadFailed": "信頼済みデバイスの読み込みに失敗しました", + "removeFailed": "信頼済みデバイスの削除に失敗しました", + "removeAllFailed": "すべての信頼済みデバイスの削除に失敗しました", + "loading": "信頼済みデバイスを読み込み中...", + "noDevicesDescription": "2FA認証時にデバイスを信頼するように選択すると、ここに表示されます", + "tableHeaders": { + "device": "デバイス", + "added": "追加日", + "expires": "有効期限", + "lastUsed": "最終使用日", + "ipAddress": "IPアドレス", + "actions": "アクション" + }, + "status": { + "never": "なし", + "expired": "期限切れ" + }, + "modals": { + "removeDevice": { + "title": "信頼済みデバイスを削除", + "added": "追加日:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "すべての信頼済みデバイスを削除", + "description": "{count}個の信頼済みデバイスを削除します。すべてのデバイスで再度2FA認証が必要になります。" + }, + "buttons": { + "cancel": "キャンセル", + "removing": "削除中...", + "removeDevice": "デバイスを削除", + "removeAllDevices": "すべてのデバイスを削除" + } + } + } + }, "uploadFile": { "title": "ファイルをアップロード", "selectFile": "ファイルを選択するにはクリックしてください", @@ -1542,98 +1713,5 @@ "passwordRequired": "パスワードは必須です", "nameRequired": "名前は必須です", "required": "このフィールドは必須です" - }, - "iconPicker": { - "title": "アイコンを選択", - "placeholder": "アイコンを選択してください", - "searchPlaceholder": "アイコンを検索...", - "loadingMore": "アイコンを読み込み中...", - "allIconsLoaded": "全{count}個のアイコンを読み込みました", - "noIconsFound": "\"{search}\"に一致するアイコンが見つかりませんでした", - "tabs": { - "all": "すべてのアイコン", - "popular": "人気", - "auth": "認証プロバイダー" - }, - "stats": "{libraryCount}ライブラリから{iconCount}個のアイコン", - "categoryBadge": "{category}({count}個のアイコン)" - }, - "twoFactor": { - "title": "二要素認証", - "description": "アカウントにセキュリティ層を追加", - "enabled": "アカウントは二要素認証で保護されています", - "disabled": "二要素認証は有効になっていません", - "setup": { - "title": "二要素認証を有効にする", - "description": "認証アプリでQRコードをスキャンし、確認コードを入力してください。", - "qrCode": "QRコード", - "manualEntryKey": "手動入力キー", - "verificationCode": "確認コード", - "verificationCodePlaceholder": "6桁のコードを入力", - "verificationCodeDescription": "認証アプリから6桁のコードを入力してください", - "verifyAndEnable": "確認して有効化", - "cancel": "キャンセル" - }, - "disable": { - "title": "二要素認証を無効にする", - "description": "二要素認証を無効にするには、パスワードを入力して確認してください。", - "password": "パスワード", - "passwordPlaceholder": "パスワードを入力", - "confirm": "無効化を確認", - "cancel": "キャンセル" - }, - "backupCodes": { - "title": "バックアップコード", - "description": "これらのバックアップコードを安全な場所に保管してください。認証デバイスを紛失した場合、アカウントへのアクセスに使用できます。", - "warning": "重要:", - "warningText": "各バックアップコードは1回のみ使用できます。安全に保管し、誰とも共有しないでください。", - "generateNew": "新しいバックアップコードを生成", - "download": "バックアップコードをダウンロード", - "copyToClipboard": "クリップボードにコピー", - "savedMessage": "バックアップコードを保存しました", - "available": "利用可能なバックアップコード:{count}個", - "instructions": [ - "• これらのコードを安全な場所に保管してください", - "• 各バックアップコードは1回のみ使用できます", - "• いつでも新しいコードを生成できます" - ] - }, - "verification": { - "title": "二要素認証", - "description": "認証アプリから6桁のコードを入力してください", - "backupDescription": "続行するにはバックアップコードを入力してください", - "verificationCode": "確認コード", - "backupCode": "バックアップコード", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "確認", - "verifying": "確認中...", - "useBackupCode": "代わりにバックアップコードを使用", - "useAuthenticatorCode": "代わりに認証アプリのコードを使用" - }, - "messages": { - "enabledSuccess": "二要素認証が正常に有効化されました!", - "disabledSuccess": "二要素認証が正常に無効化されました", - "backupCodesGenerated": "新しいバックアップコードが正常に生成されました", - "backupCodesCopied": "バックアップコードがクリップボードにコピーされました", - "setupFailed": "2FA設定の生成に失敗しました", - "verificationFailed": "確認コードが無効です", - "disableFailed": "2FAの無効化に失敗しました。パスワードを確認してください。", - "backupCodesFailed": "バックアップコードの生成に失敗しました", - "backupCodesCopyFailed": "バックアップコードのコピーに失敗しました", - "statusLoadFailed": "2FAステータスの読み込みに失敗しました", - "enterVerificationCode": "確認コードを入力してください", - "enterPassword": "パスワードを入力してください" - }, - "errors": { - "invalidVerificationCode": "確認コードが無効です", - "invalidTwoFactorCode": "二要素認証コードが無効です", - "twoFactorRequired": "二要素認証が必要です", - "twoFactorAlreadyEnabled": "二要素認証はすでに有効になっています", - "twoFactorNotEnabled": "二要素認証が有効になっていません", - "passwordVerificationRequired": "パスワードの確認が必要です", - "invalidPassword": "パスワードが無効です", - "userNotFound": "ユーザーが見つかりません" - } } } \ No newline at end of file diff --git a/apps/web/messages/ko-KR.json b/apps/web/messages/ko-KR.json index 29a3ad3..393db11 100644 --- a/apps/web/messages/ko-KR.json +++ b/apps/web/messages/ko-KR.json @@ -143,7 +143,8 @@ "saving": "저장 중...", "update": "업데이트", "click": "클릭하여", - "creating": "생성 중..." + "creating": "생성 중...", + "loadingSimple": "로딩 중..." }, "createShare": { "title": "공유 생성", @@ -189,7 +190,8 @@ "Password verification required": "비밀번호 확인이 필요합니다", "Two-factor authentication is already enabled": "2단계 인증이 이미 활성화되어 있습니다", "Two-factor authentication is not enabled": "2단계 인증이 활성화되어 있지 않습니다", - "Two-factor authentication required": "2단계 인증이 필요합니다" + "Two-factor authentication required": "2단계 인증이 필요합니다", + "noUserData": "사용자 데이터가 없습니다" }, "fileActions": { "editFile": "파일 편집", @@ -338,6 +340,21 @@ }, "pageTitle": "홈" }, + "iconPicker": { + "title": "아이콘 선택", + "placeholder": "아이콘 선택", + "searchPlaceholder": "아이콘 검색...", + "loadingMore": "아이콘 더 불러오는 중...", + "allIconsLoaded": "모든 {count}개의 아이콘이 로드됨", + "noIconsFound": "\"{search}\"에 대한 아이콘을 찾을 수 없습니다", + "tabs": { + "all": "모든 아이콘", + "popular": "인기", + "auth": "인증 제공자" + }, + "stats": "{libraryCount}개의 라이브러리에서 {iconCount}개의 아이콘", + "categoryBadge": "{category} ({count}개의 아이콘)" + }, "login": { "welcome": "에 오신 것을 환영합니다", "signInToContinue": "계속하려면 로그인하세요", @@ -1426,6 +1443,160 @@ "dark": "다크", "system": "시스템" }, + "twoFactor": { + "title": "2단계 인증", + "description": "계정에 추가 보안 계층 추가", + "enabled": "귀하의 계정은 2단계 인증으로 보호되고 있습니다", + "disabled": "2단계 인증이 활성화되지 않았습니다", + "setup": { + "title": "2단계 인증 활성화", + "description": "인증 앱으로 QR 코드를 스캔한 다음 인증 코드를 입력하세요.", + "qrCode": "QR 코드", + "manualEntryKey": "수동 입력 키", + "verificationCode": "인증 코드", + "verificationCodePlaceholder": "6자리 코드 입력", + "verificationCodeDescription": "인증 앱에서 6자리 코드를 입력하세요", + "verifyAndEnable": "확인 및 활성화", + "cancel": "취소" + }, + "disable": { + "title": "2단계 인증 비활성화", + "description": "2단계 인증 비활성화를 확인하려면 비밀번호를 입력하세요.", + "password": "비밀번호", + "passwordPlaceholder": "비밀번호 입력", + "confirm": "비활성화 확인", + "cancel": "취소" + }, + "backupCodes": { + "title": "백업 코드", + "description": "이 백업 코드를 안전한 곳에 보관하세요. 인증 기기를 분실한 경우 계정에 액세스하는 데 사용할 수 있습니다.", + "warning": "중요:", + "warningText": "각 백업 코드는 한 번만 사용할 수 있습니다. 안전하게 보관하고 다른 사람과 공유하지 마세요.", + "generateNew": "새 백업 코드 생성", + "download": "백업 코드 다운로드", + "copyToClipboard": "클립보드에 복사", + "savedMessage": "백업 코드를 저장했습니다", + "available": "사용 가능한 백업 코드 {count}개", + "instructions": [ + "• 이 코드를 안전한 곳에 보관하세요", + "• 각 백업 코드는 한 번만 사용할 수 있습니다", + "• 언제든지 새 코드를 생성할 수 있습니다" + ] + }, + "verification": { + "title": "2단계 인증", + "description": "인증 앱에서 6자리 코드를 입력하세요", + "backupDescription": "계속하려면 백업 코드 중 하나를 입력하세요", + "verificationCode": "인증 코드", + "backupCode": "백업 코드", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "확인", + "verifying": "확인 중...", + "useBackupCode": "대신 백업 코드 사용", + "useAuthenticatorCode": "대신 인증 앱 코드 사용", + "rememberDevice": "이 기기를 30일 동안 기억하기", + "rememberDeviceDescription": "30일 동안 이 기기에서 2단계 인증 코드를 입력할 필요가 없습니다" + }, + "messages": { + "enabledSuccess": "2단계 인증이 성공적으로 활성화되었습니다!", + "disabledSuccess": "2단계 인증이 성공적으로 비활성화되었습니다", + "backupCodesGenerated": "새 백업 코드가 성공적으로 생성되었습니다", + "backupCodesCopied": "백업 코드가 클립보드에 복사되었습니다", + "setupFailed": "2단계 인증 설정 생성 실패", + "verificationFailed": "잘못된 인증 코드", + "disableFailed": "2단계 인증 비활성화 실패. 비밀번호를 확인하세요.", + "backupCodesFailed": "백업 코드 생성 실패", + "backupCodesCopyFailed": "백업 코드 복사 실패", + "statusLoadFailed": "2단계 인증 상태 로드 실패", + "enterVerificationCode": "인증 코드를 입력하세요", + "enterPassword": "비밀번호를 입력하세요", + "deviceTrusted": "이 기기는 30일 동안 신뢰할 수 있는 기기로 표시되었습니다" + }, + "errors": { + "invalidVerificationCode": "잘못된 인증 코드", + "invalidTwoFactorCode": "잘못된 2단계 인증 코드", + "twoFactorRequired": "2단계 인증이 필요합니다", + "twoFactorAlreadyEnabled": "2단계 인증이 이미 활성화되어 있습니다", + "twoFactorNotEnabled": "2단계 인증이 활성화되어 있지 않습니다", + "passwordVerificationRequired": "비밀번호 확인이 필요합니다", + "invalidPassword": "잘못된 비밀번호", + "userNotFound": "사용자를 찾을 수 없습니다" + }, + "buttons": { + "enable2FA": "2단계 인증 활성화", + "disable2FA": "2단계 인증 비활성화" + }, + "deviceNames": { + "unknownDevice": "알 수 없는 기기", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " Windows에서", + "macos": " macOS에서", + "linux": " Linux에서", + "iphone": " iPhone에서", + "android": " Android에서" + } + }, + "status": { + "label": "상태:", + "enabled": "활성화됨", + "disabled": "비활성화됨" + }, + "trustedDevices": { + "title": "신뢰할 수 있는 기기 - 2단계 인증", + "description": "2단계 인증 확인이 필요하지 않은 기기", + "noDevices": "신뢰할 수 있는 기기 없음", + "deviceName": "기기", + "addedOn": "추가된 날짜", + "expiresOn": "만료 날짜", + "remove": "제거", + "removeAll": "모두 제거", + "confirmRemove": "이 신뢰할 수 있는 기기를 제거하시겠습니까?", + "confirmRemoveAll": "모든 신뢰할 수 있는 기기를 제거하시겠습니까?", + "deviceRemoved": "신뢰할 수 있는 기기가 성공적으로 제거되었습니다", + "allDevicesRemoved": "모든 신뢰할 수 있는 기기가 성공적으로 제거되었습니다", + "loadFailed": "신뢰할 수 있는 기기 로드 실패", + "removeFailed": "신뢰할 수 있는 기기 제거 실패", + "removeAllFailed": "모든 신뢰할 수 있는 기기 제거 실패", + "loading": "신뢰할 수 있는 기기 로드 중...", + "noDevicesDescription": "2단계 인증 확인 중에 기기를 신뢰하도록 선택하면 여기에 표시됩니다", + "tableHeaders": { + "device": "기기", + "added": "추가됨", + "expires": "만료", + "lastUsed": "마지막 사용", + "ipAddress": "IP 주소", + "actions": "작업" + }, + "status": { + "never": "없음", + "expired": "만료됨" + }, + "modals": { + "removeDevice": { + "title": "신뢰할 수 있는 기기 제거", + "added": "추가됨:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "모든 신뢰할 수 있는 기기 제거", + "description": "{count}개의 신뢰할 수 있는 기기를 제거합니다. 모든 기기에서 다시 2단계 인증을 확인해야 합니다." + }, + "buttons": { + "cancel": "취소", + "removing": "제거 중...", + "removeDevice": "기기 제거", + "removeAllDevices": "모든 기기 제거" + } + } + } + }, "uploadFile": { "title": "파일 업로드", "multipleTitle": "여러 파일 업로드", @@ -1542,98 +1713,5 @@ "passwordRequired": "비밀번호는 필수입니다", "nameRequired": "이름은 필수입니다", "required": "이 필드는 필수입니다" - }, - "iconPicker": { - "title": "아이콘 선택", - "placeholder": "아이콘 선택", - "searchPlaceholder": "아이콘 검색...", - "loadingMore": "아이콘 더 불러오는 중...", - "allIconsLoaded": "모든 {count}개의 아이콘이 로드됨", - "noIconsFound": "\"{search}\"에 대한 아이콘을 찾을 수 없습니다", - "tabs": { - "all": "모든 아이콘", - "popular": "인기", - "auth": "인증 제공자" - }, - "stats": "{libraryCount}개의 라이브러리에서 {iconCount}개의 아이콘", - "categoryBadge": "{category} ({count}개의 아이콘)" - }, - "twoFactor": { - "title": "2단계 인증", - "description": "계정에 추가 보안 계층 추가", - "enabled": "귀하의 계정은 2단계 인증으로 보호되고 있습니다", - "disabled": "2단계 인증이 활성화되지 않았습니다", - "setup": { - "title": "2단계 인증 활성화", - "description": "인증 앱으로 QR 코드를 스캔한 다음 인증 코드를 입력하세요.", - "qrCode": "QR 코드", - "manualEntryKey": "수동 입력 키", - "verificationCode": "인증 코드", - "verificationCodePlaceholder": "6자리 코드 입력", - "verificationCodeDescription": "인증 앱에서 6자리 코드를 입력하세요", - "verifyAndEnable": "확인 및 활성화", - "cancel": "취소" - }, - "disable": { - "title": "2단계 인증 비활성화", - "description": "2단계 인증 비활성화를 확인하려면 비밀번호를 입력하세요.", - "password": "비밀번호", - "passwordPlaceholder": "비밀번호 입력", - "confirm": "비활성화 확인", - "cancel": "취소" - }, - "backupCodes": { - "title": "백업 코드", - "description": "이 백업 코드를 안전한 곳에 보관하세요. 인증 기기를 분실한 경우 계정에 액세스하는 데 사용할 수 있습니다.", - "warning": "중요:", - "warningText": "각 백업 코드는 한 번만 사용할 수 있습니다. 안전하게 보관하고 다른 사람과 공유하지 마세요.", - "generateNew": "새 백업 코드 생성", - "download": "백업 코드 다운로드", - "copyToClipboard": "클립보드에 복사", - "savedMessage": "백업 코드를 저장했습니다", - "available": "사용 가능한 백업 코드 {count}개", - "instructions": [ - "• 이 코드를 안전한 곳에 보관하세요", - "• 각 백업 코드는 한 번만 사용할 수 있습니다", - "• 언제든지 새 코드를 생성할 수 있습니다" - ] - }, - "verification": { - "title": "2단계 인증", - "description": "인증 앱에서 6자리 코드를 입력하세요", - "backupDescription": "계속하려면 백업 코드 중 하나를 입력하세요", - "verificationCode": "인증 코드", - "backupCode": "백업 코드", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "확인", - "verifying": "확인 중...", - "useBackupCode": "대신 백업 코드 사용", - "useAuthenticatorCode": "대신 인증 앱 코드 사용" - }, - "messages": { - "enabledSuccess": "2단계 인증이 성공적으로 활성화되었습니다!", - "disabledSuccess": "2단계 인증이 성공적으로 비활성화되었습니다", - "backupCodesGenerated": "새 백업 코드가 성공적으로 생성되었습니다", - "backupCodesCopied": "백업 코드가 클립보드에 복사되었습니다", - "setupFailed": "2단계 인증 설정 생성 실패", - "verificationFailed": "잘못된 인증 코드", - "disableFailed": "2단계 인증 비활성화 실패. 비밀번호를 확인하세요.", - "backupCodesFailed": "백업 코드 생성 실패", - "backupCodesCopyFailed": "백업 코드 복사 실패", - "statusLoadFailed": "2단계 인증 상태 로드 실패", - "enterVerificationCode": "인증 코드를 입력하세요", - "enterPassword": "비밀번호를 입력하세요" - }, - "errors": { - "invalidVerificationCode": "잘못된 인증 코드", - "invalidTwoFactorCode": "잘못된 2단계 인증 코드", - "twoFactorRequired": "2단계 인증이 필요합니다", - "twoFactorAlreadyEnabled": "2단계 인증이 이미 활성화되어 있습니다", - "twoFactorNotEnabled": "2단계 인증이 활성화되어 있지 않습니다", - "passwordVerificationRequired": "비밀번호 확인이 필요합니다", - "invalidPassword": "잘못된 비밀번호", - "userNotFound": "사용자를 찾을 수 없습니다" - } } } \ No newline at end of file diff --git a/apps/web/messages/nl-NL.json b/apps/web/messages/nl-NL.json index c4cbc41..d84d073 100644 --- a/apps/web/messages/nl-NL.json +++ b/apps/web/messages/nl-NL.json @@ -143,7 +143,8 @@ "saving": "Opslaan...", "update": "Bijwerken", "click": "Klik om", - "creating": "Maken..." + "creating": "Maken...", + "loadingSimple": "Laden..." }, "createShare": { "title": "Delen Maken", @@ -189,7 +190,8 @@ "Password verification required": "Wachtwoordverificatie vereist", "Two-factor authentication is already enabled": "Tweefactorauthenticatie is al ingeschakeld", "Two-factor authentication is not enabled": "Tweefactorauthenticatie is niet ingeschakeld", - "Two-factor authentication required": "Tweefactorauthenticatie vereist" + "Two-factor authentication required": "Tweefactorauthenticatie vereist", + "noUserData": "Geen gebruikersgegevens" }, "fileActions": { "editFile": "Bestand Bewerken", @@ -338,6 +340,21 @@ }, "pageTitle": "Startpagina" }, + "iconPicker": { + "title": "Selecteer Pictogram", + "placeholder": "Selecteer een pictogram", + "searchPlaceholder": "Zoek pictogrammen...", + "loadingMore": "Meer pictogrammen laden...", + "allIconsLoaded": "Alle {count} pictogrammen geladen", + "noIconsFound": "Geen pictogrammen gevonden voor \"{search}\"", + "tabs": { + "all": "Alle Pictogrammen", + "popular": "Populair", + "auth": "Authenticatie Providers" + }, + "stats": "{iconCount} pictogrammen van {libraryCount} bibliotheken", + "categoryBadge": "{category} ({count} pictogrammen)" + }, "login": { "welcome": "Welkom bij", "signInToContinue": "Log in om door te gaan", @@ -1426,6 +1443,160 @@ "dark": "Donker", "system": "Systeem" }, + "twoFactor": { + "title": "Twee-Factor Authenticatie", + "description": "Voeg een extra beveiligingslaag toe aan uw account", + "enabled": "Uw account is beveiligd met twee-factor authenticatie", + "disabled": "Twee-factor authenticatie is niet ingeschakeld", + "setup": { + "title": "Twee-Factor Authenticatie Inschakelen", + "description": "Scan de QR-code met uw authenticator-app en voer vervolgens de verificatiecode in.", + "qrCode": "QR-Code", + "manualEntryKey": "Handmatige Invoersleutel", + "verificationCode": "Verificatiecode", + "verificationCodePlaceholder": "Voer 6-cijferige code in", + "verificationCodeDescription": "Voer de 6-cijferige code van uw authenticator-app in", + "verifyAndEnable": "Verifiëren & Inschakelen", + "cancel": "Annuleren" + }, + "disable": { + "title": "Twee-Factor Authenticatie Uitschakelen", + "description": "Voer uw wachtwoord in om het uitschakelen van twee-factor authenticatie te bevestigen.", + "password": "Wachtwoord", + "passwordPlaceholder": "Voer uw wachtwoord in", + "confirm": "Bevestig Uitschakelen", + "cancel": "Annuleren" + }, + "backupCodes": { + "title": "Back-upcodes", + "description": "Bewaar deze back-upcodes op een veilige plaats. U kunt ze gebruiken om toegang te krijgen tot uw account als u uw authenticator-apparaat verliest.", + "warning": "Belangrijk:", + "warningText": "Elke back-upcode kan slechts één keer worden gebruikt. Bewaar ze veilig en deel ze met niemand.", + "generateNew": "Genereer Nieuwe Back-upcodes", + "download": "Download Back-upcodes", + "copyToClipboard": "Kopiëren naar Klembord", + "savedMessage": "Ik heb mijn back-upcodes opgeslagen", + "available": "{count} back-upcodes beschikbaar", + "instructions": [ + "• Bewaar deze codes op een veilige plaats", + "• Elke back-upcode kan slechts één keer worden gebruikt", + "• U kunt op elk moment nieuwe codes genereren" + ] + }, + "verification": { + "title": "Twee-Factor Authenticatie", + "description": "Voer de 6-cijferige code van uw authenticator-app in", + "backupDescription": "Voer een van uw back-upcodes in om door te gaan", + "verificationCode": "Verificatiecode", + "backupCode": "Back-upcode", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "Verifiëren", + "verifying": "Verifiëren...", + "useBackupCode": "Gebruik in plaats daarvan een back-upcode", + "useAuthenticatorCode": "Gebruik in plaats daarvan authenticator-code", + "rememberDevice": "Onthoud dit apparaat voor 30 dagen", + "rememberDeviceDescription": "U hoeft gedurende 30 dagen geen 2FA-codes in te voeren op dit apparaat" + }, + "messages": { + "enabledSuccess": "Twee-factor authenticatie succesvol ingeschakeld!", + "disabledSuccess": "Twee-factor authenticatie succesvol uitgeschakeld", + "backupCodesGenerated": "Nieuwe back-upcodes succesvol gegenereerd", + "backupCodesCopied": "Back-upcodes gekopieerd naar klembord", + "setupFailed": "Genereren van 2FA-configuratie mislukt", + "verificationFailed": "Ongeldige verificatiecode", + "disableFailed": "Uitschakelen van 2FA mislukt. Controleer uw wachtwoord.", + "backupCodesFailed": "Genereren van back-upcodes mislukt", + "backupCodesCopyFailed": "Kopiëren van back-upcodes mislukt", + "statusLoadFailed": "Laden van 2FA-status mislukt", + "enterVerificationCode": "Voer de verificatiecode in", + "enterPassword": "Voer uw wachtwoord in", + "deviceTrusted": "Dit apparaat is als vertrouwd gemarkeerd voor 30 dagen" + }, + "errors": { + "invalidVerificationCode": "Ongeldige verificatiecode", + "invalidTwoFactorCode": "Ongeldige twee-factor authenticatiecode", + "twoFactorRequired": "Twee-factor authenticatie vereist", + "twoFactorAlreadyEnabled": "Twee-factor authenticatie is al ingeschakeld", + "twoFactorNotEnabled": "Twee-factor authenticatie is niet ingeschakeld", + "passwordVerificationRequired": "Wachtwoordverificatie vereist", + "invalidPassword": "Ongeldig wachtwoord", + "userNotFound": "Gebruiker niet gevonden" + }, + "buttons": { + "enable2FA": "2FA Inschakelen", + "disable2FA": "2FA Uitschakelen" + }, + "deviceNames": { + "unknownDevice": "Onbekend Apparaat", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " op Windows", + "macos": " op macOS", + "linux": " op Linux", + "iphone": " op iPhone", + "android": " op Android" + } + }, + "status": { + "label": "Status:", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld" + }, + "trustedDevices": { + "title": "Vertrouwde Apparaten - 2FA", + "description": "Apparaten die geen 2FA-verificatie vereisen", + "noDevices": "Geen vertrouwde apparaten", + "deviceName": "Apparaat", + "addedOn": "Toegevoegd op", + "expiresOn": "Verloopt op", + "remove": "Verwijderen", + "removeAll": "Alles Verwijderen", + "confirmRemove": "Weet u zeker dat u dit vertrouwde apparaat wilt verwijderen?", + "confirmRemoveAll": "Weet u zeker dat u alle vertrouwde apparaten wilt verwijderen?", + "deviceRemoved": "Vertrouwd apparaat succesvol verwijderd", + "allDevicesRemoved": "Alle vertrouwde apparaten succesvol verwijderd", + "loadFailed": "Laden van vertrouwde apparaten mislukt", + "removeFailed": "Verwijderen van vertrouwd apparaat mislukt", + "removeAllFailed": "Verwijderen van alle vertrouwde apparaten mislukt", + "loading": "Vertrouwde apparaten laden...", + "noDevicesDescription": "Apparaten verschijnen hier wanneer u ervoor kiest om ze te vertrouwen tijdens 2FA-verificatie", + "tableHeaders": { + "device": "Apparaat", + "added": "Toegevoegd", + "expires": "Verloopt", + "lastUsed": "Laatst Gebruikt", + "ipAddress": "IP-Adres", + "actions": "Acties" + }, + "status": { + "never": "Nooit", + "expired": "Verlopen" + }, + "modals": { + "removeDevice": { + "title": "Vertrouwd Apparaat Verwijderen", + "added": "Toegevoegd:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "Alle Vertrouwde Apparaten Verwijderen", + "description": "Dit zal {count} vertrouwd{count, plural, =1 { apparaat} other {e apparaten}} verwijderen. U moet 2FA opnieuw verifiëren op alle apparaten." + }, + "buttons": { + "cancel": "Annuleren", + "removing": "Verwijderen...", + "removeDevice": "Apparaat Verwijderen", + "removeAllDevices": "Alle Apparaten Verwijderen" + } + } + } + }, "uploadFile": { "title": "Bestand uploaden", "multipleTitle": "Meerdere Bestanden Uploaden", @@ -1542,98 +1713,5 @@ "passwordMinLength": "Wachtwoord moet minimaal 6 tekens bevatten", "nameRequired": "Naam is verplicht", "required": "Dit veld is verplicht" - }, - "iconPicker": { - "title": "Selecteer Pictogram", - "placeholder": "Selecteer een pictogram", - "searchPlaceholder": "Zoek pictogrammen...", - "loadingMore": "Meer pictogrammen laden...", - "allIconsLoaded": "Alle {count} pictogrammen geladen", - "noIconsFound": "Geen pictogrammen gevonden voor \"{search}\"", - "tabs": { - "all": "Alle Pictogrammen", - "popular": "Populair", - "auth": "Authenticatie Providers" - }, - "stats": "{iconCount} pictogrammen van {libraryCount} bibliotheken", - "categoryBadge": "{category} ({count} pictogrammen)" - }, - "twoFactor": { - "title": "Twee-Factor Authenticatie", - "description": "Voeg een extra beveiligingslaag toe aan uw account", - "enabled": "Uw account is beveiligd met twee-factor authenticatie", - "disabled": "Twee-factor authenticatie is niet ingeschakeld", - "setup": { - "title": "Twee-Factor Authenticatie Inschakelen", - "description": "Scan de QR-code met uw authenticator-app en voer vervolgens de verificatiecode in.", - "qrCode": "QR-Code", - "manualEntryKey": "Handmatige Invoersleutel", - "verificationCode": "Verificatiecode", - "verificationCodePlaceholder": "Voer 6-cijferige code in", - "verificationCodeDescription": "Voer de 6-cijferige code van uw authenticator-app in", - "verifyAndEnable": "Verifiëren & Inschakelen", - "cancel": "Annuleren" - }, - "disable": { - "title": "Twee-Factor Authenticatie Uitschakelen", - "description": "Voer uw wachtwoord in om het uitschakelen van twee-factor authenticatie te bevestigen.", - "password": "Wachtwoord", - "passwordPlaceholder": "Voer uw wachtwoord in", - "confirm": "Bevestig Uitschakelen", - "cancel": "Annuleren" - }, - "backupCodes": { - "title": "Back-upcodes", - "description": "Bewaar deze back-upcodes op een veilige plaats. U kunt ze gebruiken om toegang te krijgen tot uw account als u uw authenticator-apparaat verliest.", - "warning": "Belangrijk:", - "warningText": "Elke back-upcode kan slechts één keer worden gebruikt. Bewaar ze veilig en deel ze met niemand.", - "generateNew": "Genereer Nieuwe Back-upcodes", - "download": "Download Back-upcodes", - "copyToClipboard": "Kopiëren naar Klembord", - "savedMessage": "Ik heb mijn back-upcodes opgeslagen", - "available": "{count} back-upcodes beschikbaar", - "instructions": [ - "• Bewaar deze codes op een veilige plaats", - "• Elke back-upcode kan slechts één keer worden gebruikt", - "• U kunt op elk moment nieuwe codes genereren" - ] - }, - "verification": { - "title": "Twee-Factor Authenticatie", - "description": "Voer de 6-cijferige code van uw authenticator-app in", - "backupDescription": "Voer een van uw back-upcodes in om door te gaan", - "verificationCode": "Verificatiecode", - "backupCode": "Back-upcode", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "Verifiëren", - "verifying": "Verifiëren...", - "useBackupCode": "Gebruik in plaats daarvan een back-upcode", - "useAuthenticatorCode": "Gebruik in plaats daarvan authenticator-code" - }, - "messages": { - "enabledSuccess": "Twee-factor authenticatie succesvol ingeschakeld!", - "disabledSuccess": "Twee-factor authenticatie succesvol uitgeschakeld", - "backupCodesGenerated": "Nieuwe back-upcodes succesvol gegenereerd", - "backupCodesCopied": "Back-upcodes gekopieerd naar klembord", - "setupFailed": "Genereren van 2FA-configuratie mislukt", - "verificationFailed": "Ongeldige verificatiecode", - "disableFailed": "Uitschakelen van 2FA mislukt. Controleer uw wachtwoord.", - "backupCodesFailed": "Genereren van back-upcodes mislukt", - "backupCodesCopyFailed": "Kopiëren van back-upcodes mislukt", - "statusLoadFailed": "Laden van 2FA-status mislukt", - "enterVerificationCode": "Voer de verificatiecode in", - "enterPassword": "Voer uw wachtwoord in" - }, - "errors": { - "invalidVerificationCode": "Ongeldige verificatiecode", - "invalidTwoFactorCode": "Ongeldige twee-factor authenticatiecode", - "twoFactorRequired": "Twee-factor authenticatie vereist", - "twoFactorAlreadyEnabled": "Twee-factor authenticatie is al ingeschakeld", - "twoFactorNotEnabled": "Twee-factor authenticatie is niet ingeschakeld", - "passwordVerificationRequired": "Wachtwoordverificatie vereist", - "invalidPassword": "Ongeldig wachtwoord", - "userNotFound": "Gebruiker niet gevonden" - } } } \ No newline at end of file diff --git a/apps/web/messages/pl-PL.json b/apps/web/messages/pl-PL.json index 9cabbef..5875dc9 100644 --- a/apps/web/messages/pl-PL.json +++ b/apps/web/messages/pl-PL.json @@ -143,7 +143,8 @@ "dashboard": "Panel główny", "back": "Wróć", "click": "Kliknij, aby", - "creating": "Tworzenie..." + "creating": "Tworzenie...", + "loadingSimple": "Ładowanie..." }, "createShare": { "title": "Utwórz Udostępnienie", @@ -189,7 +190,8 @@ "Password verification required": "Wymagana weryfikacja hasła", "Two-factor authentication is already enabled": "Uwierzytelnianie dwuskładnikowe jest już włączone", "Two-factor authentication is not enabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone", - "Two-factor authentication required": "Wymagane uwierzytelnianie dwuskładnikowe" + "Two-factor authentication required": "Wymagane uwierzytelnianie dwuskładnikowe", + "noUserData": "Brak danych użytkownika" }, "fileActions": { "editFile": "Edytuj plik", @@ -338,6 +340,21 @@ }, "pageTitle": "Strona główna" }, + "iconPicker": { + "title": "Wybierz ikonę", + "placeholder": "Wybierz ikonę", + "searchPlaceholder": "Szukaj ikon...", + "loadingMore": "Ładowanie kolejnych ikon...", + "allIconsLoaded": "Załadowano wszystkie {count} ikon", + "noIconsFound": "Nie znaleziono ikon dla \"{search}\"", + "tabs": { + "all": "Wszystkie ikony", + "popular": "Popularne", + "auth": "Dostawcy uwierzytelniania" + }, + "stats": "{iconCount} ikon z {libraryCount} bibliotek", + "categoryBadge": "{category} ({count} ikon)" + }, "login": { "welcome": "Witaj w", "signInToContinue": "Zaloguj się, aby kontynuować", @@ -1426,6 +1443,160 @@ "dark": "Ciemny", "system": "Systemowy" }, + "twoFactor": { + "title": "Uwierzytelnianie dwuskładnikowe", + "description": "Dodaj dodatkową warstwę zabezpieczeń do swojego konta", + "enabled": "Twoje konto jest chronione uwierzytelnianiem dwuskładnikowym", + "disabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone", + "setup": { + "title": "Włącz uwierzytelnianie dwuskładnikowe", + "description": "Zeskanuj kod QR za pomocą aplikacji uwierzytelniającej, a następnie wprowadź kod weryfikacyjny.", + "qrCode": "Kod QR", + "manualEntryKey": "Klucz do ręcznego wprowadzenia", + "verificationCode": "Kod weryfikacyjny", + "verificationCodePlaceholder": "Wprowadź 6-cyfrowy kod", + "verificationCodeDescription": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej", + "verifyAndEnable": "Zweryfikuj i włącz", + "cancel": "Anuluj" + }, + "disable": { + "title": "Wyłącz uwierzytelnianie dwuskładnikowe", + "description": "Wprowadź hasło, aby potwierdzić wyłączenie uwierzytelniania dwuskładnikowego.", + "password": "Hasło", + "passwordPlaceholder": "Wprowadź swoje hasło", + "confirm": "Potwierdź wyłączenie", + "cancel": "Anuluj" + }, + "backupCodes": { + "title": "Kody zapasowe", + "description": "Zapisz te kody zapasowe w bezpiecznym miejscu. Możesz ich użyć, aby uzyskać dostęp do swojego konta w przypadku utraty urządzenia uwierzytelniającego.", + "warning": "Ważne:", + "warningText": "Każdy kod zapasowy może być użyty tylko raz. Przechowuj je bezpiecznie i nie udostępniaj nikomu.", + "generateNew": "Wygeneruj nowe kody zapasowe", + "download": "Pobierz kody zapasowe", + "copyToClipboard": "Kopiuj do schowka", + "savedMessage": "Zapisałem moje kody zapasowe", + "available": "{count} dostępnych kodów zapasowych", + "instructions": [ + "• Zapisz te kody w bezpiecznym miejscu", + "• Każdy kod zapasowy może być użyty tylko raz", + "• Możesz wygenerować nowe kody w dowolnym momencie" + ] + }, + "verification": { + "title": "Uwierzytelnianie dwuskładnikowe", + "description": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej", + "backupDescription": "Wprowadź jeden z kodów zapasowych, aby kontynuować", + "verificationCode": "Kod weryfikacyjny", + "backupCode": "Kod zapasowy", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "Zweryfikuj", + "verifying": "Weryfikacja...", + "useBackupCode": "Użyj kodu zapasowego", + "useAuthenticatorCode": "Użyj kodu z aplikacji uwierzytelniającej", + "rememberDevice": "Zapamiętaj to urządzenie na 30 dni", + "rememberDeviceDescription": "Nie będziesz musiał wprowadzać kodów 2FA na tym urządzeniu przez 30 dni" + }, + "messages": { + "enabledSuccess": "Uwierzytelnianie dwuskładnikowe zostało pomyślnie włączone!", + "disabledSuccess": "Uwierzytelnianie dwuskładnikowe zostało pomyślnie wyłączone", + "backupCodesGenerated": "Nowe kody zapasowe zostały pomyślnie wygenerowane", + "backupCodesCopied": "Kody zapasowe skopiowane do schowka", + "setupFailed": "Nie udało się wygenerować konfiguracji 2FA", + "verificationFailed": "Nieprawidłowy kod weryfikacyjny", + "disableFailed": "Nie udało się wyłączyć 2FA. Sprawdź swoje hasło.", + "backupCodesFailed": "Nie udało się wygenerować kodów zapasowych", + "backupCodesCopyFailed": "Nie udało się skopiować kodów zapasowych", + "statusLoadFailed": "Nie udało się załadować statusu 2FA", + "enterVerificationCode": "Wprowadź kod weryfikacyjny", + "enterPassword": "Wprowadź swoje hasło", + "deviceTrusted": "To urządzenie zostało oznaczone jako zaufane na 30 dni" + }, + "errors": { + "invalidVerificationCode": "Nieprawidłowy kod weryfikacyjny", + "invalidTwoFactorCode": "Nieprawidłowy kod uwierzytelniania dwuskładnikowego", + "twoFactorRequired": "Wymagane uwierzytelnianie dwuskładnikowe", + "twoFactorAlreadyEnabled": "Uwierzytelnianie dwuskładnikowe jest już włączone", + "twoFactorNotEnabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone", + "passwordVerificationRequired": "Wymagana weryfikacja hasła", + "invalidPassword": "Nieprawidłowe hasło", + "userNotFound": "Nie znaleziono użytkownika" + }, + "buttons": { + "enable2FA": "Włącz 2FA", + "disable2FA": "Wyłącz 2FA" + }, + "deviceNames": { + "unknownDevice": "Nieznane urządzenie", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " na Windows", + "macos": " na macOS", + "linux": " na Linux", + "iphone": " na iPhone", + "android": " na Android" + } + }, + "status": { + "label": "Status:", + "enabled": "Włączone", + "disabled": "Wyłączone" + }, + "trustedDevices": { + "title": "Zaufane urządzenia - 2FA", + "description": "Urządzenia, które nie wymagają weryfikacji 2FA", + "noDevices": "Brak zaufanych urządzeń", + "deviceName": "Urządzenie", + "addedOn": "Dodano", + "expiresOn": "Wygasa", + "remove": "Usuń", + "removeAll": "Usuń wszystkie", + "confirmRemove": "Czy na pewno chcesz usunąć to zaufane urządzenie?", + "confirmRemoveAll": "Czy na pewno chcesz usunąć wszystkie zaufane urządzenia?", + "deviceRemoved": "Zaufane urządzenie zostało pomyślnie usunięte", + "allDevicesRemoved": "Wszystkie zaufane urządzenia zostały pomyślnie usunięte", + "loadFailed": "Nie udało się załadować zaufanych urządzeń", + "removeFailed": "Nie udało się usunąć zaufanego urządzenia", + "removeAllFailed": "Nie udało się usunąć wszystkich zaufanych urządzeń", + "loading": "Ładowanie zaufanych urządzeń...", + "noDevicesDescription": "Urządzenia pojawią się tutaj, gdy zdecydujesz się im zaufać podczas weryfikacji 2FA", + "tableHeaders": { + "device": "Urządzenie", + "added": "Dodano", + "expires": "Wygasa", + "lastUsed": "Ostatnio użyte", + "ipAddress": "Adres IP", + "actions": "Akcje" + }, + "status": { + "never": "Nigdy", + "expired": "Wygasło" + }, + "modals": { + "removeDevice": { + "title": "Usuń zaufane urządzenie", + "added": "Dodano:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "Usuń wszystkie zaufane urządzenia", + "description": "Spowoduje to usunięcie {count} zaufanych urządzeń. Będziesz musiał zweryfikować 2FA na wszystkich urządzeniach ponownie." + }, + "buttons": { + "cancel": "Anuluj", + "removing": "Usuwanie...", + "removeDevice": "Usuń urządzenie", + "removeAllDevices": "Usuń wszystkie urządzenia" + } + } + } + }, "uploadFile": { "title": "Prześlij plik", "multipleTitle": "Prześlij pliki", @@ -1542,98 +1713,5 @@ "passwordMinLength": "Hasło musi mieć co najmniej 6 znaków", "nameRequired": "Nazwa jest wymagana", "required": "To pole jest wymagane" - }, - "iconPicker": { - "title": "Wybierz ikonę", - "placeholder": "Wybierz ikonę", - "searchPlaceholder": "Szukaj ikon...", - "loadingMore": "Ładowanie kolejnych ikon...", - "allIconsLoaded": "Załadowano wszystkie {count} ikon", - "noIconsFound": "Nie znaleziono ikon dla \"{search}\"", - "tabs": { - "all": "Wszystkie ikony", - "popular": "Popularne", - "auth": "Dostawcy uwierzytelniania" - }, - "stats": "{iconCount} ikon z {libraryCount} bibliotek", - "categoryBadge": "{category} ({count} ikon)" - }, - "twoFactor": { - "title": "Uwierzytelnianie dwuskładnikowe", - "description": "Dodaj dodatkową warstwę zabezpieczeń do swojego konta", - "enabled": "Twoje konto jest chronione uwierzytelnianiem dwuskładnikowym", - "disabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone", - "setup": { - "title": "Włącz uwierzytelnianie dwuskładnikowe", - "description": "Zeskanuj kod QR za pomocą aplikacji uwierzytelniającej, a następnie wprowadź kod weryfikacyjny.", - "qrCode": "Kod QR", - "manualEntryKey": "Klucz do ręcznego wprowadzenia", - "verificationCode": "Kod weryfikacyjny", - "verificationCodePlaceholder": "Wprowadź 6-cyfrowy kod", - "verificationCodeDescription": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej", - "verifyAndEnable": "Zweryfikuj i włącz", - "cancel": "Anuluj" - }, - "disable": { - "title": "Wyłącz uwierzytelnianie dwuskładnikowe", - "description": "Wprowadź hasło, aby potwierdzić wyłączenie uwierzytelniania dwuskładnikowego.", - "password": "Hasło", - "passwordPlaceholder": "Wprowadź swoje hasło", - "confirm": "Potwierdź wyłączenie", - "cancel": "Anuluj" - }, - "backupCodes": { - "title": "Kody zapasowe", - "description": "Zapisz te kody zapasowe w bezpiecznym miejscu. Możesz ich użyć, aby uzyskać dostęp do swojego konta w przypadku utraty urządzenia uwierzytelniającego.", - "warning": "Ważne:", - "warningText": "Każdy kod zapasowy może być użyty tylko raz. Przechowuj je bezpiecznie i nie udostępniaj nikomu.", - "generateNew": "Wygeneruj nowe kody zapasowe", - "download": "Pobierz kody zapasowe", - "copyToClipboard": "Kopiuj do schowka", - "savedMessage": "Zapisałem moje kody zapasowe", - "available": "{count} dostępnych kodów zapasowych", - "instructions": [ - "• Zapisz te kody w bezpiecznym miejscu", - "• Każdy kod zapasowy może być użyty tylko raz", - "• Możesz wygenerować nowe kody w dowolnym momencie" - ] - }, - "verification": { - "title": "Uwierzytelnianie dwuskładnikowe", - "description": "Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej", - "backupDescription": "Wprowadź jeden z kodów zapasowych, aby kontynuować", - "verificationCode": "Kod weryfikacyjny", - "backupCode": "Kod zapasowy", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "Zweryfikuj", - "verifying": "Weryfikacja...", - "useBackupCode": "Użyj kodu zapasowego", - "useAuthenticatorCode": "Użyj kodu z aplikacji uwierzytelniającej" - }, - "messages": { - "enabledSuccess": "Uwierzytelnianie dwuskładnikowe zostało pomyślnie włączone!", - "disabledSuccess": "Uwierzytelnianie dwuskładnikowe zostało pomyślnie wyłączone", - "backupCodesGenerated": "Nowe kody zapasowe zostały pomyślnie wygenerowane", - "backupCodesCopied": "Kody zapasowe skopiowane do schowka", - "setupFailed": "Nie udało się wygenerować konfiguracji 2FA", - "verificationFailed": "Nieprawidłowy kod weryfikacyjny", - "disableFailed": "Nie udało się wyłączyć 2FA. Sprawdź swoje hasło.", - "backupCodesFailed": "Nie udało się wygenerować kodów zapasowych", - "backupCodesCopyFailed": "Nie udało się skopiować kodów zapasowych", - "statusLoadFailed": "Nie udało się załadować statusu 2FA", - "enterVerificationCode": "Wprowadź kod weryfikacyjny", - "enterPassword": "Wprowadź swoje hasło" - }, - "errors": { - "invalidVerificationCode": "Nieprawidłowy kod weryfikacyjny", - "invalidTwoFactorCode": "Nieprawidłowy kod uwierzytelniania dwuskładnikowego", - "twoFactorRequired": "Wymagane uwierzytelnianie dwuskładnikowe", - "twoFactorAlreadyEnabled": "Uwierzytelnianie dwuskładnikowe jest już włączone", - "twoFactorNotEnabled": "Uwierzytelnianie dwuskładnikowe nie jest włączone", - "passwordVerificationRequired": "Wymagana weryfikacja hasła", - "invalidPassword": "Nieprawidłowe hasło", - "userNotFound": "Nie znaleziono użytkownika" - } } } \ No newline at end of file diff --git a/apps/web/messages/pt-BR.json b/apps/web/messages/pt-BR.json index 1c11a3e..c87487a 100644 --- a/apps/web/messages/pt-BR.json +++ b/apps/web/messages/pt-BR.json @@ -143,7 +143,8 @@ "saving": "Salvando...", "update": "Atualizar", "creating": "Criando...", - "click": "Clique para" + "click": "Clique para", + "loadingSimple": "Carregando..." }, "createShare": { "title": "Criar compartilhamento", @@ -189,7 +190,8 @@ "Password verification required": "Verificação de senha necessária", "Two-factor authentication is already enabled": "A autenticação de dois fatores já está ativada", "Two-factor authentication is not enabled": "A autenticação de dois fatores não está ativada", - "Two-factor authentication required": "Autenticação de dois fatores necessária" + "Two-factor authentication required": "Autenticação de dois fatores necessária", + "noUserData": "Nenhum dado do usuário" }, "fileActions": { "editFile": "Editar arquivo", @@ -338,6 +340,21 @@ }, "pageTitle": "Início" }, + "iconPicker": { + "title": "Selecionar ícone", + "placeholder": "Selecione um ícone", + "searchPlaceholder": "Pesquisar ícones...", + "loadingMore": "Carregando mais ícones...", + "allIconsLoaded": "Todos os {count} ícones carregados", + "noIconsFound": "Nenhum ícone encontrado para \"{search}\"", + "tabs": { + "all": "Todos os ícones", + "popular": "Populares", + "auth": "Provedores de autenticação" + }, + "stats": "{iconCount} ícones de {libraryCount} bibliotecas", + "categoryBadge": "{category} ({count} ícones)" + }, "login": { "welcome": "Bem-vindo ao", "signInToContinue": "Faça login para continuar", @@ -1426,6 +1443,160 @@ "dark": "Escuro", "system": "Sistema" }, + "twoFactor": { + "title": "Autenticação de dois fatores", + "description": "Adicione uma camada extra de segurança à sua conta", + "enabled": "Sua conta está protegida com autenticação de dois fatores", + "disabled": "A autenticação de dois fatores não está ativada", + "setup": { + "title": "Ativar autenticação de dois fatores", + "description": "Escaneie o código QR com seu aplicativo autenticador e depois insira o código de verificação.", + "qrCode": "Código QR", + "manualEntryKey": "Chave de Entrada Manual", + "verificationCode": "Código de Verificação", + "verificationCodePlaceholder": "Digite o código de 6 dígitos", + "verificationCodeDescription": "Digite o código de 6 dígitos do seu aplicativo autenticador", + "verifyAndEnable": "Verificar e ativar", + "cancel": "Cancelar" + }, + "disable": { + "title": "Desativar autenticação de dois fatores", + "description": "Digite sua senha para confirmar a desativação da autenticação de dois fatores.", + "password": "Senha", + "passwordPlaceholder": "Digite sua senha", + "confirm": "Confirmar Desativação", + "cancel": "Cancelar" + }, + "backupCodes": { + "title": "Códigos de backup", + "description": "Salve estes códigos de backup em um local seguro. Você pode usá-los para acessar sua conta se perder seu dispositivo autenticador.", + "warning": "Importante:", + "warningText": "Cada código de backup só pode ser usado uma vez. Mantenha-os seguros e não os compartilhe com ninguém.", + "generateNew": "Gerar novos códigos de backup", + "download": "Baixar códigos de backup", + "copyToClipboard": "Copiar para área de transferência", + "savedMessage": "Salvei meus códigos de backup", + "available": "{count} códigos de backup disponíveis", + "instructions": [ + "• Salve estes códigos em um local seguro", + "• Cada código de backup só pode ser usado uma vez", + "• Você pode gerar novos códigos a qualquer momento" + ] + }, + "verification": { + "title": "Autenticação de dois fatores", + "description": "Digite o código de 6 dígitos do seu aplicativo autenticador", + "backupDescription": "Digite um dos seus códigos de backup para continuar", + "verificationCode": "Código de verificação", + "backupCode": "Código de backup", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "Verificar", + "verifying": "Verificando...", + "useBackupCode": "Usar código de backup", + "useAuthenticatorCode": "Usar código do autenticador", + "rememberDevice": "Lembrar este dispositivo por 30 dias", + "rememberDeviceDescription": "Você não precisará inserir códigos 2FA neste dispositivo por 30 dias" + }, + "messages": { + "enabledSuccess": "Autenticação de dois fatores ativada com sucesso!", + "disabledSuccess": "Autenticação de dois fatores desativada com sucesso", + "backupCodesGenerated": "Novos códigos de backup gerados com sucesso", + "backupCodesCopied": "Códigos de backup copiados para a área de transferência", + "setupFailed": "Falha ao gerar configuração 2FA", + "verificationFailed": "Código de verificação inválido", + "disableFailed": "Falha ao desativar 2FA. Por favor, verifique sua senha.", + "backupCodesFailed": "Falha ao gerar códigos de backup", + "backupCodesCopyFailed": "Falha ao copiar códigos de backup", + "statusLoadFailed": "Falha ao carregar status do 2FA", + "enterVerificationCode": "Por favor, digite o código de verificação", + "enterPassword": "Por favor, digite sua senha", + "deviceTrusted": "Este dispositivo foi marcado como confiável por 30 dias" + }, + "errors": { + "invalidVerificationCode": "Código de verificação inválido", + "invalidTwoFactorCode": "Código de autenticação de dois fatores inválido", + "twoFactorRequired": "Autenticação de dois fatores necessária", + "twoFactorAlreadyEnabled": "A autenticação de dois fatores já está ativada", + "twoFactorNotEnabled": "A autenticação de dois fatores não está ativada", + "passwordVerificationRequired": "Verificação de senha necessária", + "invalidPassword": "Senha inválida", + "userNotFound": "Usuário não encontrado" + }, + "buttons": { + "enable2FA": "Ativar 2FA", + "disable2FA": "Desativar 2FA" + }, + "deviceNames": { + "unknownDevice": "Dispositivo Desconhecido", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " no Windows", + "macos": " no macOS", + "linux": " no Linux", + "iphone": " no iPhone", + "android": " no Android" + } + }, + "status": { + "label": "Status:", + "enabled": "Ativado", + "disabled": "Desativado" + }, + "trustedDevices": { + "title": "Dispositivos Confiáveis - 2FA", + "description": "Dispositivos que não requerem verificação 2FA", + "noDevices": "Nenhum dispositivo confiável", + "deviceName": "Dispositivo", + "addedOn": "Adicionado em", + "expiresOn": "Expira em", + "remove": "Remover", + "removeAll": "Remover Todos", + "confirmRemove": "Tem certeza que deseja remover este dispositivo confiável?", + "confirmRemoveAll": "Tem certeza que deseja remover todos os dispositivos confiáveis?", + "deviceRemoved": "Dispositivo confiável removido com sucesso", + "allDevicesRemoved": "Todos os dispositivos confiáveis foram removidos com sucesso", + "loadFailed": "Falha ao carregar dispositivos confiáveis", + "removeFailed": "Falha ao remover dispositivo confiável", + "removeAllFailed": "Falha ao remover todos os dispositivos confiáveis", + "loading": "Carregando dispositivos confiáveis...", + "noDevicesDescription": "Os dispositivos aparecerão aqui quando você optar por confiar neles durante a verificação 2FA", + "tableHeaders": { + "device": "Dispositivo", + "added": "Adicionado", + "expires": "Expira", + "lastUsed": "Último Uso", + "ipAddress": "Endereço IP", + "actions": "Ações" + }, + "status": { + "never": "Nunca", + "expired": "Expirado" + }, + "modals": { + "removeDevice": { + "title": "Remover Dispositivo Confiável", + "added": "Adicionado:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "Remover Todos os Dispositivos Confiáveis", + "description": "Isso removerá {count} dispositivo{count, plural, =1 {} other {s}} confiável{count, plural, =1 {} other {is}}. Você precisará verificar o 2FA em todos os dispositivos novamente." + }, + "buttons": { + "cancel": "Cancelar", + "removing": "Removendo...", + "removeDevice": "Remover Dispositivo", + "removeAllDevices": "Remover Todos os Dispositivos" + } + } + } + }, "uploadFile": { "title": "Enviar Arquivo", "multipleTitle": "Enviar Múltiplos Arquivos", @@ -1542,98 +1713,5 @@ "lastNameRequired": "O sobrenome é necessário", "usernameLength": "O nome de usuário deve ter pelo menos 3 caracteres", "usernameSpaces": "O nome de usuário não pode conter espaços" - }, - "iconPicker": { - "title": "Selecionar ícone", - "placeholder": "Selecione um ícone", - "searchPlaceholder": "Pesquisar ícones...", - "loadingMore": "Carregando mais ícones...", - "allIconsLoaded": "Todos os {count} ícones carregados", - "noIconsFound": "Nenhum ícone encontrado para \"{search}\"", - "tabs": { - "all": "Todos os ícones", - "popular": "Populares", - "auth": "Provedores de autenticação" - }, - "stats": "{iconCount} ícones de {libraryCount} bibliotecas", - "categoryBadge": "{category} ({count} ícones)" - }, - "twoFactor": { - "title": "Autenticação de dois fatores", - "description": "Adicione uma camada extra de segurança à sua conta", - "enabled": "Sua conta está protegida com autenticação de dois fatores", - "disabled": "A autenticação de dois fatores não está ativada", - "setup": { - "title": "Ativar autenticação de dois fatores", - "description": "Escaneie o código QR com seu aplicativo autenticador e depois insira o código de verificação.", - "qrCode": "Código QR", - "manualEntryKey": "Chave de Entrada Manual", - "verificationCode": "Código de Verificação", - "verificationCodePlaceholder": "Digite o código de 6 dígitos", - "verificationCodeDescription": "Digite o código de 6 dígitos do seu aplicativo autenticador", - "verifyAndEnable": "Verificar e ativar", - "cancel": "Cancelar" - }, - "disable": { - "title": "Desativar autenticação de dois fatores", - "description": "Digite sua senha para confirmar a desativação da autenticação de dois fatores.", - "password": "Senha", - "passwordPlaceholder": "Digite sua senha", - "confirm": "Confirmar Desativação", - "cancel": "Cancelar" - }, - "backupCodes": { - "title": "Códigos de backup", - "description": "Salve estes códigos de backup em um local seguro. Você pode usá-los para acessar sua conta se perder seu dispositivo autenticador.", - "warning": "Importante:", - "warningText": "Cada código de backup só pode ser usado uma vez. Mantenha-os seguros e não os compartilhe com ninguém.", - "generateNew": "Gerar novos códigos de backup", - "download": "Baixar códigos de backup", - "copyToClipboard": "Copiar para área de transferência", - "savedMessage": "Salvei meus códigos de backup", - "available": "{count} códigos de backup disponíveis", - "instructions": [ - "• Salve estes códigos em um local seguro", - "• Cada código de backup só pode ser usado uma vez", - "• Você pode gerar novos códigos a qualquer momento" - ] - }, - "verification": { - "title": "Autenticação de dois fatores", - "description": "Digite o código de 6 dígitos do seu aplicativo autenticador", - "backupDescription": "Digite um dos seus códigos de backup para continuar", - "verificationCode": "Código de verificação", - "backupCode": "Código de backup", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "Verificar", - "verifying": "Verificando...", - "useBackupCode": "Usar código de backup", - "useAuthenticatorCode": "Usar código do autenticador" - }, - "messages": { - "enabledSuccess": "Autenticação de dois fatores ativada com sucesso!", - "disabledSuccess": "Autenticação de dois fatores desativada com sucesso", - "backupCodesGenerated": "Novos códigos de backup gerados com sucesso", - "backupCodesCopied": "Códigos de backup copiados para a área de transferência", - "setupFailed": "Falha ao gerar configuração 2FA", - "verificationFailed": "Código de verificação inválido", - "disableFailed": "Falha ao desativar 2FA. Por favor, verifique sua senha.", - "backupCodesFailed": "Falha ao gerar códigos de backup", - "backupCodesCopyFailed": "Falha ao copiar códigos de backup", - "statusLoadFailed": "Falha ao carregar status do 2FA", - "enterVerificationCode": "Por favor, digite o código de verificação", - "enterPassword": "Por favor, digite sua senha" - }, - "errors": { - "invalidVerificationCode": "Código de verificação inválido", - "invalidTwoFactorCode": "Código de autenticação de dois fatores inválido", - "twoFactorRequired": "Autenticação de dois fatores necessária", - "twoFactorAlreadyEnabled": "A autenticação de dois fatores já está ativada", - "twoFactorNotEnabled": "A autenticação de dois fatores não está ativada", - "passwordVerificationRequired": "Verificação de senha necessária", - "invalidPassword": "Senha inválida", - "userNotFound": "Usuário não encontrado" - } } } \ No newline at end of file diff --git a/apps/web/messages/ru-RU.json b/apps/web/messages/ru-RU.json index 977346c..3510d2a 100644 --- a/apps/web/messages/ru-RU.json +++ b/apps/web/messages/ru-RU.json @@ -143,7 +143,8 @@ "saving": "Сохранение...", "update": "Обновить", "click": "Нажмите для", - "creating": "Создание..." + "creating": "Создание...", + "loadingSimple": "Загрузка..." }, "createShare": { "title": "Создать общий доступ", @@ -189,7 +190,8 @@ "Password verification required": "Требуется подтверждение пароля", "Two-factor authentication is already enabled": "Двухфакторная аутентификация уже включена", "Two-factor authentication is not enabled": "Двухфакторная аутентификация не включена", - "Two-factor authentication required": "Требуется двухфакторная аутентификация" + "Two-factor authentication required": "Требуется двухфакторная аутентификация", + "noUserData": "Нет данных пользователя" }, "fileActions": { "editFile": "Редактировать файл", @@ -338,6 +340,21 @@ }, "pageTitle": "Главная" }, + "iconPicker": { + "title": "Выбрать иконку", + "placeholder": "Выберите иконку", + "searchPlaceholder": "Поиск иконок...", + "loadingMore": "Загрузка дополнительных иконок...", + "allIconsLoaded": "Загружено все {count} иконок", + "noIconsFound": "Не найдено иконок для \"{search}\"", + "tabs": { + "all": "Все иконки", + "popular": "Популярные", + "auth": "Провайдеры аутентификации" + }, + "stats": "{iconCount} иконок из {libraryCount} библиотек", + "categoryBadge": "{category} ({count} иконок)" + }, "login": { "welcome": "Добро пожаловать в", "signInToContinue": "Войдите, чтобы продолжить", @@ -1426,6 +1443,160 @@ "dark": "Тёмная", "system": "Системная" }, + "twoFactor": { + "title": "Двухфакторная аутентификация", + "description": "Добавьте дополнительный уровень безопасности для вашей учетной записи", + "enabled": "Ваша учетная запись защищена двухфакторной аутентификацией", + "disabled": "Двухфакторная аутентификация не включена", + "setup": { + "title": "Включить двухфакторную аутентификацию", + "description": "Отсканируйте QR-код с помощью приложения-аутентификатора, затем введите код подтверждения.", + "qrCode": "QR-код", + "manualEntryKey": "Ключ для ручного ввода", + "verificationCode": "Код подтверждения", + "verificationCodePlaceholder": "Введите 6-значный код", + "verificationCodeDescription": "Введите 6-значный код из вашего приложения-аутентификатора", + "verifyAndEnable": "Проверить и включить", + "cancel": "Отмена" + }, + "disable": { + "title": "Отключить двухфакторную аутентификацию", + "description": "Введите ваш пароль для подтверждения отключения двухфакторной аутентификации.", + "password": "Пароль", + "passwordPlaceholder": "Введите ваш пароль", + "confirm": "Подтвердить отключение", + "cancel": "Отмена" + }, + "backupCodes": { + "title": "Резервные коды", + "description": "Сохраните эти резервные коды в безопасном месте. Вы можете использовать их для доступа к своей учетной записи, если потеряете устройство аутентификации.", + "warning": "Важно:", + "warningText": "Каждый резервный код можно использовать только один раз. Храните их в безопасности и не делитесь ими ни с кем.", + "generateNew": "Сгенерировать новые резервные коды", + "download": "Скачать резервные коды", + "copyToClipboard": "Копировать в буфер обмена", + "savedMessage": "Я сохранил мои резервные коды", + "available": "{count} резервных кодов доступно", + "instructions": [ + "• Сохраните эти коды в безопасном месте", + "• Каждый резервный код можно использовать только один раз", + "• Вы можете сгенерировать новые коды в любое время" + ] + }, + "verification": { + "title": "Двухфакторная аутентификация", + "description": "Введите 6-значный код из вашего приложения-аутентификатора", + "backupDescription": "Введите один из ваших резервных кодов для продолжения", + "verificationCode": "Код подтверждения", + "backupCode": "Резервный код", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "Проверить", + "verifying": "Проверка...", + "useBackupCode": "Использовать резервный код", + "useAuthenticatorCode": "Использовать код аутентификатора", + "rememberDevice": "Запомнить это устройство на 30 дней", + "rememberDeviceDescription": "Вам не нужно будет вводить коды 2FA на этом устройстве в течение 30 дней" + }, + "messages": { + "enabledSuccess": "Двухфакторная аутентификация успешно включена!", + "disabledSuccess": "Двухфакторная аутентификация успешно отключена", + "backupCodesGenerated": "Новые резервные коды успешно сгенерированы", + "backupCodesCopied": "Резервные коды скопированы в буфер обмена", + "setupFailed": "Не удалось сгенерировать настройку 2FA", + "verificationFailed": "Неверный код подтверждения", + "disableFailed": "Не удалось отключить 2FA. Пожалуйста, проверьте ваш пароль.", + "backupCodesFailed": "Не удалось сгенерировать резервные коды", + "backupCodesCopyFailed": "Не удалось скопировать резервные коды", + "statusLoadFailed": "Не удалось загрузить статус 2FA", + "enterVerificationCode": "Пожалуйста, введите код подтверждения", + "enterPassword": "Пожалуйста, введите ваш пароль", + "deviceTrusted": "Это устройство отмечено как доверенное на 30 дней" + }, + "errors": { + "invalidVerificationCode": "Неверный код подтверждения", + "invalidTwoFactorCode": "Неверный код двухфакторной аутентификации", + "twoFactorRequired": "Требуется двухфакторная аутентификация", + "twoFactorAlreadyEnabled": "Двухфакторная аутентификация уже включена", + "twoFactorNotEnabled": "Двухфакторная аутентификация не включена", + "passwordVerificationRequired": "Требуется подтверждение пароля", + "invalidPassword": "Неверный пароль", + "userNotFound": "Пользователь не найден" + }, + "buttons": { + "enable2FA": "Включить 2FA", + "disable2FA": "Отключить 2FA" + }, + "deviceNames": { + "unknownDevice": "Неизвестное устройство", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " на Windows", + "macos": " на macOS", + "linux": " на Linux", + "iphone": " на iPhone", + "android": " на Android" + } + }, + "status": { + "label": "Статус:", + "enabled": "Включено", + "disabled": "Отключено" + }, + "trustedDevices": { + "title": "Доверенные устройства - 2FA", + "description": "Устройства, не требующие проверки 2FA", + "noDevices": "Нет доверенных устройств", + "deviceName": "Устройство", + "addedOn": "Добавлено", + "expiresOn": "Истекает", + "remove": "Удалить", + "removeAll": "Удалить все", + "confirmRemove": "Вы уверены, что хотите удалить это доверенное устройство?", + "confirmRemoveAll": "Вы уверены, что хотите удалить все доверенные устройства?", + "deviceRemoved": "Доверенное устройство успешно удалено", + "allDevicesRemoved": "Все доверенные устройства успешно удалены", + "loadFailed": "Не удалось загрузить доверенные устройства", + "removeFailed": "Не удалось удалить доверенное устройство", + "removeAllFailed": "Не удалось удалить все доверенные устройства", + "loading": "Загрузка доверенных устройств...", + "noDevicesDescription": "Устройства появятся здесь, когда вы решите доверять им во время проверки 2FA", + "tableHeaders": { + "device": "Устройство", + "added": "Добавлено", + "expires": "Истекает", + "lastUsed": "Последнее использование", + "ipAddress": "IP-адрес", + "actions": "Действия" + }, + "status": { + "never": "Никогда", + "expired": "Истекло" + }, + "modals": { + "removeDevice": { + "title": "Удалить доверенное устройство", + "added": "Добавлено:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "Удалить все доверенные устройства", + "description": "Это удалит {count} доверенное устройство{count, plural, =1 {} other {s}}. Вам потребуется повторно проверять 2FA на всех устройствах." + }, + "buttons": { + "cancel": "Отмена", + "removing": "Удаление...", + "removeDevice": "Удалить устройство", + "removeAllDevices": "Удалить все устройства" + } + } + } + }, "uploadFile": { "title": "Загрузить файл", "multipleTitle": "Загрузить Несколько Файлов", @@ -1542,98 +1713,5 @@ "passwordRequired": "Требуется пароль", "nameRequired": "Требуется имя", "required": "Это поле обязательно" - }, - "iconPicker": { - "title": "Выбрать иконку", - "placeholder": "Выберите иконку", - "searchPlaceholder": "Поиск иконок...", - "loadingMore": "Загрузка дополнительных иконок...", - "allIconsLoaded": "Загружено все {count} иконок", - "noIconsFound": "Не найдено иконок для \"{search}\"", - "tabs": { - "all": "Все иконки", - "popular": "Популярные", - "auth": "Провайдеры аутентификации" - }, - "stats": "{iconCount} иконок из {libraryCount} библиотек", - "categoryBadge": "{category} ({count} иконок)" - }, - "twoFactor": { - "title": "Двухфакторная аутентификация", - "description": "Добавьте дополнительный уровень безопасности для вашей учетной записи", - "enabled": "Ваша учетная запись защищена двухфакторной аутентификацией", - "disabled": "Двухфакторная аутентификация не включена", - "setup": { - "title": "Включить двухфакторную аутентификацию", - "description": "Отсканируйте QR-код с помощью приложения-аутентификатора, затем введите код подтверждения.", - "qrCode": "QR-код", - "manualEntryKey": "Ключ для ручного ввода", - "verificationCode": "Код подтверждения", - "verificationCodePlaceholder": "Введите 6-значный код", - "verificationCodeDescription": "Введите 6-значный код из вашего приложения-аутентификатора", - "verifyAndEnable": "Проверить и включить", - "cancel": "Отмена" - }, - "disable": { - "title": "Отключить двухфакторную аутентификацию", - "description": "Введите ваш пароль для подтверждения отключения двухфакторной аутентификации.", - "password": "Пароль", - "passwordPlaceholder": "Введите ваш пароль", - "confirm": "Подтвердить отключение", - "cancel": "Отмена" - }, - "backupCodes": { - "title": "Резервные коды", - "description": "Сохраните эти резервные коды в безопасном месте. Вы можете использовать их для доступа к своей учетной записи, если потеряете устройство аутентификации.", - "warning": "Важно:", - "warningText": "Каждый резервный код можно использовать только один раз. Храните их в безопасности и не делитесь ими ни с кем.", - "generateNew": "Сгенерировать новые резервные коды", - "download": "Скачать резервные коды", - "copyToClipboard": "Копировать в буфер обмена", - "savedMessage": "Я сохранил мои резервные коды", - "available": "{count} резервных кодов доступно", - "instructions": [ - "• Сохраните эти коды в безопасном месте", - "• Каждый резервный код можно использовать только один раз", - "• Вы можете сгенерировать новые коды в любое время" - ] - }, - "verification": { - "title": "Двухфакторная аутентификация", - "description": "Введите 6-значный код из вашего приложения-аутентификатора", - "backupDescription": "Введите один из ваших резервных кодов для продолжения", - "verificationCode": "Код подтверждения", - "backupCode": "Резервный код", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "Проверить", - "verifying": "Проверка...", - "useBackupCode": "Использовать резервный код", - "useAuthenticatorCode": "Использовать код аутентификатора" - }, - "messages": { - "enabledSuccess": "Двухфакторная аутентификация успешно включена!", - "disabledSuccess": "Двухфакторная аутентификация успешно отключена", - "backupCodesGenerated": "Новые резервные коды успешно сгенерированы", - "backupCodesCopied": "Резервные коды скопированы в буфер обмена", - "setupFailed": "Не удалось сгенерировать настройку 2FA", - "verificationFailed": "Неверный код подтверждения", - "disableFailed": "Не удалось отключить 2FA. Пожалуйста, проверьте ваш пароль.", - "backupCodesFailed": "Не удалось сгенерировать резервные коды", - "backupCodesCopyFailed": "Не удалось скопировать резервные коды", - "statusLoadFailed": "Не удалось загрузить статус 2FA", - "enterVerificationCode": "Пожалуйста, введите код подтверждения", - "enterPassword": "Пожалуйста, введите ваш пароль" - }, - "errors": { - "invalidVerificationCode": "Неверный код подтверждения", - "invalidTwoFactorCode": "Неверный код двухфакторной аутентификации", - "twoFactorRequired": "Требуется двухфакторная аутентификация", - "twoFactorAlreadyEnabled": "Двухфакторная аутентификация уже включена", - "twoFactorNotEnabled": "Двухфакторная аутентификация не включена", - "passwordVerificationRequired": "Требуется подтверждение пароля", - "invalidPassword": "Неверный пароль", - "userNotFound": "Пользователь не найден" - } } } \ No newline at end of file diff --git a/apps/web/messages/tr-TR.json b/apps/web/messages/tr-TR.json index e875113..7663c41 100644 --- a/apps/web/messages/tr-TR.json +++ b/apps/web/messages/tr-TR.json @@ -143,7 +143,8 @@ "saving": "Kaydediliyor...", "update": "Güncelle", "click": "Tıklayın", - "creating": "Oluşturuluyor..." + "creating": "Oluşturuluyor...", + "loadingSimple": "Yükleniyor..." }, "createShare": { "title": "Paylaşım Oluştur", @@ -189,7 +190,8 @@ "Password verification required": "Şifre doğrulaması gerekli", "Two-factor authentication is already enabled": "İki faktörlü kimlik doğrulama zaten etkin", "Two-factor authentication is not enabled": "İki faktörlü kimlik doğrulama etkin değil", - "Two-factor authentication required": "İki faktörlü kimlik doğrulama gerekli" + "Two-factor authentication required": "İki faktörlü kimlik doğrulama gerekli", + "noUserData": "Kullanıcı verisi yok" }, "fileActions": { "editFile": "Dosyayı Düzenle", @@ -338,6 +340,21 @@ }, "pageTitle": "Ana Sayfa" }, + "iconPicker": { + "title": "Simge Seç", + "placeholder": "Bir simge seç", + "searchPlaceholder": "Simgeleri ara...", + "loadingMore": "Daha fazla simge yükleniyor...", + "allIconsLoaded": "Tüm {count} simge yüklendi", + "noIconsFound": "\"{search}\" için simge bulunamadı", + "tabs": { + "all": "Tüm Simgeler", + "popular": "Popüler", + "auth": "Kimlik Doğrulama Sağlayıcıları" + }, + "stats": "{libraryCount} kütüphaneden {iconCount} simge", + "categoryBadge": "{category} ({count} simge)" + }, "login": { "welcome": "Hoş geldiniz'e", "signInToContinue": "Devam etmek için oturum açın", @@ -1426,6 +1443,160 @@ "dark": "Koyu", "system": "Sistem" }, + "twoFactor": { + "title": "İki Faktörlü Kimlik Doğrulama", + "description": "Hesabınıza ekstra bir güvenlik katmanı ekleyin", + "enabled": "Hesabınız iki faktörlü kimlik doğrulama ile korunuyor", + "disabled": "İki faktörlü kimlik doğrulama etkin değil", + "setup": { + "title": "İki Faktörlü Kimlik Doğrulamayı Etkinleştir", + "description": "QR kodunu kimlik doğrulayıcı uygulamanızla tarayın, ardından doğrulama kodunu girin.", + "qrCode": "QR Kodu", + "manualEntryKey": "Manuel Giriş Anahtarı", + "verificationCode": "Doğrulama Kodu", + "verificationCodePlaceholder": "6 haneli kodu girin", + "verificationCodeDescription": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin", + "verifyAndEnable": "Doğrula ve Etkinleştir", + "cancel": "İptal" + }, + "disable": { + "title": "İki Faktörlü Kimlik Doğrulamayı Devre Dışı Bırak", + "description": "İki faktörlü kimlik doğrulamayı devre dışı bırakmayı onaylamak için şifrenizi girin.", + "password": "Şifre", + "passwordPlaceholder": "Şifrenizi girin", + "confirm": "Devre Dışı Bırakmayı Onayla", + "cancel": "İptal" + }, + "backupCodes": { + "title": "Yedek Kodlar", + "description": "Bu yedek kodları güvenli bir yerde saklayın. Kimlik doğrulayıcı cihazınızı kaybederseniz hesabınıza erişmek için bunları kullanabilirsiniz.", + "warning": "Önemli:", + "warningText": "Her yedek kod yalnızca bir kez kullanılabilir. Güvenli tutun ve kimseyle paylaşmayın.", + "generateNew": "Yeni Yedek Kodlar Oluştur", + "download": "Yedek Kodları İndir", + "copyToClipboard": "Panoya Kopyala", + "savedMessage": "Yedek Kodlarımı Kaydettim", + "available": "{count} yedek kod mevcut", + "instructions": [ + "• Bu kodları güvenli bir yerde saklayın", + "• Her yedek kod yalnızca bir kez kullanılabilir", + "• İstediğiniz zaman yeni kodlar oluşturabilirsiniz" + ] + }, + "verification": { + "title": "İki Faktörlü Kimlik Doğrulama", + "description": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin", + "backupDescription": "Devam etmek için yedek kodlarınızdan birini girin", + "verificationCode": "Doğrulama Kodu", + "backupCode": "Yedek Kod", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "Doğrula", + "verifying": "Doğrulanıyor...", + "useBackupCode": "Bunun yerine yedek kod kullan", + "useAuthenticatorCode": "Bunun yerine kimlik doğrulayıcı kodu kullan", + "rememberDevice": "Bu cihazı 30 gün boyunca hatırla", + "rememberDeviceDescription": "Bu cihazda 30 gün boyunca 2FA kodları girmeniz gerekmeyecek" + }, + "messages": { + "enabledSuccess": "İki faktörlü kimlik doğrulama başarıyla etkinleştirildi!", + "disabledSuccess": "İki faktörlü kimlik doğrulama başarıyla devre dışı bırakıldı", + "backupCodesGenerated": "Yeni yedek kodlar başarıyla oluşturuldu", + "backupCodesCopied": "Yedek kodlar panoya kopyalandı", + "setupFailed": "2FA kurulumu oluşturulamadı", + "verificationFailed": "Geçersiz doğrulama kodu", + "disableFailed": "2FA devre dışı bırakılamadı. Lütfen şifrenizi kontrol edin.", + "backupCodesFailed": "Yedek kodlar oluşturulamadı", + "backupCodesCopyFailed": "Yedek kodlar kopyalanamadı", + "statusLoadFailed": "2FA durumu yüklenemedi", + "enterVerificationCode": "Lütfen doğrulama kodunu girin", + "enterPassword": "Lütfen şifrenizi girin", + "deviceTrusted": "Bu cihaz 30 gün boyunca güvenilir olarak işaretlendi" + }, + "errors": { + "invalidVerificationCode": "Geçersiz doğrulama kodu", + "invalidTwoFactorCode": "Geçersiz iki faktörlü kimlik doğrulama kodu", + "twoFactorRequired": "İki faktörlü kimlik doğrulama gerekli", + "twoFactorAlreadyEnabled": "İki faktörlü kimlik doğrulama zaten etkin", + "twoFactorNotEnabled": "İki faktörlü kimlik doğrulama etkin değil", + "passwordVerificationRequired": "Şifre doğrulaması gerekli", + "invalidPassword": "Geçersiz şifre", + "userNotFound": "Kullanıcı bulunamadı" + }, + "buttons": { + "enable2FA": "2FA'yı Etkinleştir", + "disable2FA": "2FA'yı Devre Dışı Bırak" + }, + "deviceNames": { + "unknownDevice": "Bilinmeyen Cihaz", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " Windows'ta", + "macos": " macOS'ta", + "linux": " Linux'ta", + "iphone": " iPhone'da", + "android": " Android'de" + } + }, + "status": { + "label": "Durum:", + "enabled": "Etkin", + "disabled": "Devre Dışı" + }, + "trustedDevices": { + "title": "Güvenilir Cihazlar - 2FA", + "description": "2FA doğrulaması gerektirmeyen cihazlar", + "noDevices": "Güvenilir cihaz yok", + "deviceName": "Cihaz", + "addedOn": "Eklenme tarihi", + "expiresOn": "Bitiş tarihi", + "remove": "Kaldır", + "removeAll": "Tümünü Kaldır", + "confirmRemove": "Bu güvenilir cihazı kaldırmak istediğinizden emin misiniz?", + "confirmRemoveAll": "Tüm güvenilir cihazları kaldırmak istediğinizden emin misiniz?", + "deviceRemoved": "Güvenilir cihaz başarıyla kaldırıldı", + "allDevicesRemoved": "Tüm güvenilir cihazlar başarıyla kaldırıldı", + "loadFailed": "Güvenilir cihazlar yüklenemedi", + "removeFailed": "Güvenilir cihaz kaldırılamadı", + "removeAllFailed": "Tüm güvenilir cihazlar kaldırılamadı", + "loading": "Güvenilir cihazlar yükleniyor...", + "noDevicesDescription": "2FA doğrulaması sırasında cihazları güvenilir olarak işaretlediğinizde burada görünecekler", + "tableHeaders": { + "device": "Cihaz", + "added": "Eklenme", + "expires": "Bitiş", + "lastUsed": "Son Kullanım", + "ipAddress": "IP Adresi", + "actions": "İşlemler" + }, + "status": { + "never": "Hiç", + "expired": "Süresi Doldu" + }, + "modals": { + "removeDevice": { + "title": "Güvenilir Cihazı Kaldır", + "added": "Eklenme:", + "ip": "IP:" + }, + "removeAllDevices": { + "title": "Tüm Güvenilir Cihazları Kaldır", + "description": "Bu işlem {count} güvenilir cihaz{count, plural, =1 {ı} other {ı}} kaldıracak. Tüm cihazlarda 2FA doğrulaması yapmanız gerekecek." + }, + "buttons": { + "cancel": "İptal", + "removing": "Kaldırılıyor...", + "removeDevice": "Cihazı Kaldır", + "removeAllDevices": "Tüm Cihazları Kaldır" + } + } + } + }, "uploadFile": { "title": "Dosya Yükle", "multipleTitle": "Çoklu Dosya Yükle", @@ -1542,98 +1713,5 @@ "passwordRequired": "Şifre gerekli", "nameRequired": "İsim gereklidir", "required": "Bu alan zorunludur" - }, - "iconPicker": { - "title": "Simge Seç", - "placeholder": "Bir simge seç", - "searchPlaceholder": "Simgeleri ara...", - "loadingMore": "Daha fazla simge yükleniyor...", - "allIconsLoaded": "Tüm {count} simge yüklendi", - "noIconsFound": "\"{search}\" için simge bulunamadı", - "tabs": { - "all": "Tüm Simgeler", - "popular": "Popüler", - "auth": "Kimlik Doğrulama Sağlayıcıları" - }, - "stats": "{libraryCount} kütüphaneden {iconCount} simge", - "categoryBadge": "{category} ({count} simge)" - }, - "twoFactor": { - "title": "İki Faktörlü Kimlik Doğrulama", - "description": "Hesabınıza ekstra bir güvenlik katmanı ekleyin", - "enabled": "Hesabınız iki faktörlü kimlik doğrulama ile korunuyor", - "disabled": "İki faktörlü kimlik doğrulama etkin değil", - "setup": { - "title": "İki Faktörlü Kimlik Doğrulamayı Etkinleştir", - "description": "QR kodunu kimlik doğrulayıcı uygulamanızla tarayın, ardından doğrulama kodunu girin.", - "qrCode": "QR Kodu", - "manualEntryKey": "Manuel Giriş Anahtarı", - "verificationCode": "Doğrulama Kodu", - "verificationCodePlaceholder": "6 haneli kodu girin", - "verificationCodeDescription": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin", - "verifyAndEnable": "Doğrula ve Etkinleştir", - "cancel": "İptal" - }, - "disable": { - "title": "İki Faktörlü Kimlik Doğrulamayı Devre Dışı Bırak", - "description": "İki faktörlü kimlik doğrulamayı devre dışı bırakmayı onaylamak için şifrenizi girin.", - "password": "Şifre", - "passwordPlaceholder": "Şifrenizi girin", - "confirm": "Devre Dışı Bırakmayı Onayla", - "cancel": "İptal" - }, - "backupCodes": { - "title": "Yedek Kodlar", - "description": "Bu yedek kodları güvenli bir yerde saklayın. Kimlik doğrulayıcı cihazınızı kaybederseniz hesabınıza erişmek için bunları kullanabilirsiniz.", - "warning": "Önemli:", - "warningText": "Her yedek kod yalnızca bir kez kullanılabilir. Güvenli tutun ve kimseyle paylaşmayın.", - "generateNew": "Yeni Yedek Kodlar Oluştur", - "download": "Yedek Kodları İndir", - "copyToClipboard": "Panoya Kopyala", - "savedMessage": "Yedek Kodlarımı Kaydettim", - "available": "{count} yedek kod mevcut", - "instructions": [ - "• Bu kodları güvenli bir yerde saklayın", - "• Her yedek kod yalnızca bir kez kullanılabilir", - "• İstediğiniz zaman yeni kodlar oluşturabilirsiniz" - ] - }, - "verification": { - "title": "İki Faktörlü Kimlik Doğrulama", - "description": "Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin", - "backupDescription": "Devam etmek için yedek kodlarınızdan birini girin", - "verificationCode": "Doğrulama Kodu", - "backupCode": "Yedek Kod", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "Doğrula", - "verifying": "Doğrulanıyor...", - "useBackupCode": "Bunun yerine yedek kod kullan", - "useAuthenticatorCode": "Bunun yerine kimlik doğrulayıcı kodu kullan" - }, - "messages": { - "enabledSuccess": "İki faktörlü kimlik doğrulama başarıyla etkinleştirildi!", - "disabledSuccess": "İki faktörlü kimlik doğrulama başarıyla devre dışı bırakıldı", - "backupCodesGenerated": "Yeni yedek kodlar başarıyla oluşturuldu", - "backupCodesCopied": "Yedek kodlar panoya kopyalandı", - "setupFailed": "2FA kurulumu oluşturulamadı", - "verificationFailed": "Geçersiz doğrulama kodu", - "disableFailed": "2FA devre dışı bırakılamadı. Lütfen şifrenizi kontrol edin.", - "backupCodesFailed": "Yedek kodlar oluşturulamadı", - "backupCodesCopyFailed": "Yedek kodlar kopyalanamadı", - "statusLoadFailed": "2FA durumu yüklenemedi", - "enterVerificationCode": "Lütfen doğrulama kodunu girin", - "enterPassword": "Lütfen şifrenizi girin" - }, - "errors": { - "invalidVerificationCode": "Geçersiz doğrulama kodu", - "invalidTwoFactorCode": "Geçersiz iki faktörlü kimlik doğrulama kodu", - "twoFactorRequired": "İki faktörlü kimlik doğrulama gerekli", - "twoFactorAlreadyEnabled": "İki faktörlü kimlik doğrulama zaten etkin", - "twoFactorNotEnabled": "İki faktörlü kimlik doğrulama etkin değil", - "passwordVerificationRequired": "Şifre doğrulaması gerekli", - "invalidPassword": "Geçersiz şifre", - "userNotFound": "Kullanıcı bulunamadı" - } } } \ No newline at end of file diff --git a/apps/web/messages/zh-CN.json b/apps/web/messages/zh-CN.json index 8655e8f..0e71e68 100644 --- a/apps/web/messages/zh-CN.json +++ b/apps/web/messages/zh-CN.json @@ -143,7 +143,8 @@ "saving": "保存中...", "update": "更新", "click": "点击", - "creating": "创建中..." + "creating": "创建中...", + "loadingSimple": "加载中..." }, "createShare": { "title": "创建分享", @@ -189,7 +190,8 @@ "Password verification required": "需要密码验证", "Two-factor authentication is already enabled": "双重认证已启用", "Two-factor authentication is not enabled": "双重认证未启用", - "Two-factor authentication required": "需要双重认证" + "Two-factor authentication required": "需要双重认证", + "noUserData": "没有用户数据" }, "fileActions": { "editFile": "编辑文件", @@ -338,6 +340,21 @@ }, "pageTitle": "首页" }, + "iconPicker": { + "title": "选择图标", + "placeholder": "选择一个图标", + "searchPlaceholder": "搜索图标...", + "loadingMore": "正在加载更多图标...", + "allIconsLoaded": "已加载全部 {count} 个图标", + "noIconsFound": "未找到与\"{search}\"相关的图标", + "tabs": { + "all": "所有图标", + "popular": "常用", + "auth": "认证提供商" + }, + "stats": "来自 {libraryCount} 个库的 {iconCount} 个图标", + "categoryBadge": "{category}({count} 个图标)" + }, "login": { "welcome": "欢迎您", "signInToContinue": "请登录以继续", @@ -1426,6 +1443,160 @@ "dark": "暗黑", "system": "系统" }, + "twoFactor": { + "title": "双重认证", + "description": "为您的账户添加额外的安全保护", + "enabled": "您的账户已启用双重认证保护", + "disabled": "未启用双重认证", + "setup": { + "title": "启用双重认证", + "description": "使用您的认证器应用扫描二维码,然后输入验证码。", + "qrCode": "二维码", + "manualEntryKey": "手动输入密钥", + "verificationCode": "验证码", + "verificationCodePlaceholder": "输入6位数验证码", + "verificationCodeDescription": "输入认证器应用生成的6位数验证码", + "verifyAndEnable": "验证并启用", + "cancel": "取消" + }, + "disable": { + "title": "禁用双重认证", + "description": "请输入您的密码以确认禁用双重认证。", + "password": "密码", + "passwordPlaceholder": "输入您的密码", + "confirm": "确认禁用", + "cancel": "取消" + }, + "backupCodes": { + "title": "备用码", + "description": "请将这些备用码保存在安全的地方。如果您丢失了认证器设备,可以使用它们访问您的账户。", + "warning": "重要提示:", + "warningText": "每个备用码只能使用一次。请妥善保管,不要与任何人分享。", + "generateNew": "生成新的备用码", + "download": "下载备用码", + "copyToClipboard": "复制到剪贴板", + "savedMessage": "我已保存备用码", + "available": "可用备用码:{count}个", + "instructions": [ + "• 将这些代码保存在安全的位置", + "• 每个备用码只能使用一次", + "• 您可以随时生成新的备用码" + ] + }, + "verification": { + "title": "双重认证", + "description": "请输入认证器应用生成的6位数验证码", + "backupDescription": "请输入一个备用码以继续", + "verificationCode": "验证码", + "backupCode": "备用码", + "verificationCodePlaceholder": "000000", + "backupCodePlaceholder": "XXXX-XXXX", + "verify": "验证", + "verifying": "验证中...", + "useBackupCode": "使用备用码", + "useAuthenticatorCode": "使用认证器验证码", + "rememberDevice": "在30天内记住此设备", + "rememberDeviceDescription": "在30天内您无需在此设备上输入双重认证码" + }, + "messages": { + "enabledSuccess": "双重认证启用成功!", + "disabledSuccess": "双重认证已成功禁用", + "backupCodesGenerated": "新的备用码生成成功", + "backupCodesCopied": "备用码已复制到剪贴板", + "setupFailed": "生成双重认证设置失败", + "verificationFailed": "验证码无效", + "disableFailed": "禁用双重认证失败。请检查您的密码。", + "backupCodesFailed": "生成备用码失败", + "backupCodesCopyFailed": "复制备用码失败", + "statusLoadFailed": "加载双重认证状态失败", + "enterVerificationCode": "请输入验证码", + "enterPassword": "请输入您的密码", + "deviceTrusted": "此设备已被标记为30天内受信任" + }, + "errors": { + "invalidVerificationCode": "验证码无效", + "invalidTwoFactorCode": "双重认证码无效", + "twoFactorRequired": "需要双重认证", + "twoFactorAlreadyEnabled": "双重认证已启用", + "twoFactorNotEnabled": "未启用双重认证", + "passwordVerificationRequired": "需要密码验证", + "invalidPassword": "密码无效", + "userNotFound": "未找到用户" + }, + "buttons": { + "enable2FA": "启用双重认证", + "disable2FA": "禁用双重认证" + }, + "deviceNames": { + "unknownDevice": "未知设备", + "browsers": { + "chrome": "Chrome", + "firefox": "Firefox", + "safari": "Safari", + "edge": "Edge" + }, + "platforms": { + "windows": " 在 Windows 上", + "macos": " 在 macOS 上", + "linux": " 在 Linux 上", + "iphone": " 在 iPhone 上", + "android": " 在 Android 上" + } + }, + "status": { + "label": "状态:", + "enabled": "已启用", + "disabled": "已禁用" + }, + "trustedDevices": { + "title": "受信任设备 - 双重认证", + "description": "无需双重认证验证的设备", + "noDevices": "没有受信任的设备", + "deviceName": "设备", + "addedOn": "添加于", + "expiresOn": "过期于", + "remove": "移除", + "removeAll": "移除全部", + "confirmRemove": "您确定要移除此受信任设备吗?", + "confirmRemoveAll": "您确定要移除所有受信任设备吗?", + "deviceRemoved": "受信任设备已成功移除", + "allDevicesRemoved": "所有受信任设备已成功移除", + "loadFailed": "加载受信任设备失败", + "removeFailed": "移除受信任设备失败", + "removeAllFailed": "移除所有受信任设备失败", + "loading": "正在加载受信任设备...", + "noDevicesDescription": "当您在双重认证验证时选择信任设备时,设备将显示在此处", + "tableHeaders": { + "device": "设备", + "added": "添加时间", + "expires": "过期时间", + "lastUsed": "最后使用", + "ipAddress": "IP地址", + "actions": "操作" + }, + "status": { + "never": "从未", + "expired": "已过期" + }, + "modals": { + "removeDevice": { + "title": "移除受信任设备", + "added": "添加时间:", + "ip": "IP地址:" + }, + "removeAllDevices": { + "title": "移除所有受信任设备", + "description": "这将移除 {count} 个受信任设备。您需要在所有设备上重新进行双重认证验证。" + }, + "buttons": { + "cancel": "取消", + "removing": "正在移除...", + "removeDevice": "移除设备", + "removeAllDevices": "移除所有设备" + } + } + } + }, "uploadFile": { "title": "上传文件", "multipleTitle": "上传多个文件", @@ -1542,98 +1713,5 @@ "passwordRequired": "密码为必填项", "nameRequired": "名称为必填项", "required": "此字段为必填项" - }, - "iconPicker": { - "title": "选择图标", - "placeholder": "选择一个图标", - "searchPlaceholder": "搜索图标...", - "loadingMore": "正在加载更多图标...", - "allIconsLoaded": "已加载全部 {count} 个图标", - "noIconsFound": "未找到与\"{search}\"相关的图标", - "tabs": { - "all": "所有图标", - "popular": "常用", - "auth": "认证提供商" - }, - "stats": "来自 {libraryCount} 个库的 {iconCount} 个图标", - "categoryBadge": "{category}({count} 个图标)" - }, - "twoFactor": { - "title": "双重认证", - "description": "为您的账户添加额外的安全保护", - "enabled": "您的账户已启用双重认证保护", - "disabled": "未启用双重认证", - "setup": { - "title": "启用双重认证", - "description": "使用您的认证器应用扫描二维码,然后输入验证码。", - "qrCode": "二维码", - "manualEntryKey": "手动输入密钥", - "verificationCode": "验证码", - "verificationCodePlaceholder": "输入6位数验证码", - "verificationCodeDescription": "输入认证器应用生成的6位数验证码", - "verifyAndEnable": "验证并启用", - "cancel": "取消" - }, - "disable": { - "title": "禁用双重认证", - "description": "请输入您的密码以确认禁用双重认证。", - "password": "密码", - "passwordPlaceholder": "输入您的密码", - "confirm": "确认禁用", - "cancel": "取消" - }, - "backupCodes": { - "title": "备用码", - "description": "请将这些备用码保存在安全的地方。如果您丢失了认证器设备,可以使用它们访问您的账户。", - "warning": "重要提示:", - "warningText": "每个备用码只能使用一次。请妥善保管,不要与任何人分享。", - "generateNew": "生成新的备用码", - "download": "下载备用码", - "copyToClipboard": "复制到剪贴板", - "savedMessage": "我已保存备用码", - "available": "可用备用码:{count}个", - "instructions": [ - "• 将这些代码保存在安全的位置", - "• 每个备用码只能使用一次", - "• 您可以随时生成新的备用码" - ] - }, - "verification": { - "title": "双重认证", - "description": "请输入认证器应用生成的6位数验证码", - "backupDescription": "请输入一个备用码以继续", - "verificationCode": "验证码", - "backupCode": "备用码", - "verificationCodePlaceholder": "000000", - "backupCodePlaceholder": "XXXX-XXXX", - "verify": "验证", - "verifying": "验证中...", - "useBackupCode": "使用备用码", - "useAuthenticatorCode": "使用认证器验证码" - }, - "messages": { - "enabledSuccess": "双重认证启用成功!", - "disabledSuccess": "双重认证已成功禁用", - "backupCodesGenerated": "新的备用码生成成功", - "backupCodesCopied": "备用码已复制到剪贴板", - "setupFailed": "生成双重认证设置失败", - "verificationFailed": "验证码无效", - "disableFailed": "禁用双重认证失败。请检查您的密码。", - "backupCodesFailed": "生成备用码失败", - "backupCodesCopyFailed": "复制备用码失败", - "statusLoadFailed": "加载双重认证状态失败", - "enterVerificationCode": "请输入验证码", - "enterPassword": "请输入您的密码" - }, - "errors": { - "invalidVerificationCode": "验证码无效", - "invalidTwoFactorCode": "双重认证码无效", - "twoFactorRequired": "需要双重认证", - "twoFactorAlreadyEnabled": "双重认证已启用", - "twoFactorNotEnabled": "未启用双重认证", - "passwordVerificationRequired": "需要密码验证", - "invalidPassword": "密码无效", - "userNotFound": "未找到用户" - } } } \ No newline at end of file diff --git a/apps/web/package.json b/apps/web/package.json index 81ed778..04a9c84 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -97,4 +97,4 @@ "tailwindcss": "4.1.11", "typescript": "5.8.3" } -} \ No newline at end of file +} diff --git a/apps/web/pnpm-lock.yaml b/apps/web/pnpm-lock.yaml index f5fcca3..bbeda3a 100644 --- a/apps/web/pnpm-lock.yaml +++ b/apps/web/pnpm-lock.yaml @@ -1,65 +1,64 @@ -lockfileVersion: '9.0' +lockfileVersion: "9.0" settings: autoInstallPeers: true excludeLinksFromLockfile: false importers: - .: dependencies: - '@hello-pangea/dnd': + "@hello-pangea/dnd": specifier: ^18.0.1 version: 18.0.1(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@hookform/resolvers': + "@hookform/resolvers": specifier: ^5.0.1 version: 5.1.1(react-hook-form@7.60.0(react@19.1.0)) - '@radix-ui/react-aspect-ratio': + "@radix-ui/react-aspect-ratio": specifier: ^1.1.3 version: 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-avatar': + "@radix-ui/react-avatar": specifier: ^1.1.4 version: 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-checkbox': + "@radix-ui/react-checkbox": specifier: ^1.3.2 version: 1.3.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dialog': + "@radix-ui/react-dialog": specifier: ^1.1.6 version: 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dropdown-menu': + "@radix-ui/react-dropdown-menu": specifier: ^2.1.6 version: 2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-label': + "@radix-ui/react-label": specifier: ^2.1.2 version: 2.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-progress': + "@radix-ui/react-progress": specifier: ^1.1.3 version: 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-scroll-area': + "@radix-ui/react-scroll-area": specifier: ^1.2.4 version: 1.2.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-select': + "@radix-ui/react-select": specifier: ^2.1.7 version: 2.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-separator': + "@radix-ui/react-separator": specifier: ^1.1.3 version: 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slider': + "@radix-ui/react-slider": specifier: ^1.3.5 version: 1.3.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': + "@radix-ui/react-slot": specifier: ^1.1.2 version: 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-switch': + "@radix-ui/react-switch": specifier: ^1.1.4 version: 1.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-tabs': + "@radix-ui/react-tabs": specifier: ^1.1.12 version: 1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tabler/icons-react': + "@tabler/icons-react": specifier: ^3.34.0 version: 3.34.0(react@19.1.0) - '@types/react-dropzone': + "@types/react-dropzone": specifier: ^5.1.0 version: 5.1.0(react@19.1.0) axios: @@ -144,37 +143,37 @@ importers: specifier: ^5.0.6 version: 5.0.6(@types/react@19.1.8)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)) devDependencies: - '@eslint/eslintrc': + "@eslint/eslintrc": specifier: 3.3.1 version: 3.3.1 - '@eslint/js': + "@eslint/js": specifier: 9.30.0 version: 9.30.0 - '@ianvs/prettier-plugin-sort-imports': + "@ianvs/prettier-plugin-sort-imports": specifier: 4.4.2 version: 4.4.2(prettier@3.6.2) - '@tailwindcss/postcss': + "@tailwindcss/postcss": specifier: 4.1.11 version: 4.1.11 - '@types/js-cookie': + "@types/js-cookie": specifier: ^3.0.6 version: 3.0.6 - '@types/node': + "@types/node": specifier: 22.14.0 version: 22.14.0 - '@types/qrcode': + "@types/qrcode": specifier: ^1.5.5 version: 1.5.5 - '@types/react': + "@types/react": specifier: 19.1.8 version: 19.1.8 - '@types/react-dom': + "@types/react-dom": specifier: 19.1.6 version: 19.1.6(@types/react@19.1.8) - '@typescript-eslint/eslint-plugin': + "@typescript-eslint/eslint-plugin": specifier: 8.35.1 version: 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': + "@typescript-eslint/parser": specifier: 8.35.1 version: 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) eslint: @@ -203,1500 +202,1778 @@ importers: version: 5.8.3 packages: + "@alloc/quick-lru@5.2.0": + resolution: + { integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== } + engines: { node: ">=10" } - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} + "@ampproject/remapping@2.3.0": + resolution: + { integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== } + engines: { node: ">=6.0.0" } - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} + "@babel/code-frame@7.27.1": + resolution: + { integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== } + engines: { node: ">=6.9.0" } - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} + "@babel/generator@7.28.0": + resolution: + { integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg== } + engines: { node: ">=6.9.0" } - '@babel/generator@7.28.0': - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} - engines: {node: '>=6.9.0'} + "@babel/helper-globals@7.28.0": + resolution: + { integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== } + engines: { node: ">=6.9.0" } - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} + "@babel/helper-string-parser@7.27.1": + resolution: + { integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== } + engines: { node: ">=6.9.0" } - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} + "@babel/helper-validator-identifier@7.27.1": + resolution: + { integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== } + engines: { node: ">=6.9.0" } - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} - engines: {node: '>=6.0.0'} + "@babel/parser@7.28.0": + resolution: + { integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== } + engines: { node: ">=6.0.0" } hasBin: true - '@babel/runtime@7.27.6': - resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} - engines: {node: '>=6.9.0'} + "@babel/runtime@7.27.6": + resolution: + { integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q== } + engines: { node: ">=6.9.0" } - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} - engines: {node: '>=6.9.0'} + "@babel/template@7.27.2": + resolution: + { integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== } + engines: { node: ">=6.9.0" } - '@babel/traverse@7.28.0': - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} - engines: {node: '>=6.9.0'} + "@babel/traverse@7.28.0": + resolution: + { integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg== } + engines: { node: ">=6.9.0" } - '@babel/types@7.28.0': - resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} - engines: {node: '>=6.9.0'} + "@babel/types@7.28.0": + resolution: + { integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg== } + engines: { node: ">=6.9.0" } - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + "@emnapi/core@1.4.3": + resolution: + { integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== } - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + "@emnapi/runtime@1.4.3": + resolution: + { integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== } - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + "@emnapi/wasi-threads@1.0.2": + resolution: + { integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== } - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + "@eslint-community/eslint-utils@4.7.0": + resolution: + { integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + "@eslint-community/regexpp@4.12.1": + resolution: + { integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@eslint/config-array@0.21.0": + resolution: + { integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/config-helpers@0.3.0': - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@eslint/config-helpers@0.3.0": + resolution: + { integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@eslint/core@0.14.0": + resolution: + { integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@eslint/core@0.15.1": + resolution: + { integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@eslint/eslintrc@3.3.1": + resolution: + { integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/js@9.30.0': - resolution: {integrity: sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@eslint/js@9.30.0": + resolution: + { integrity: sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@eslint/object-schema@2.1.6": + resolution: + { integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/plugin-kit@0.3.3': - resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@eslint/plugin-kit@0.3.3": + resolution: + { integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@floating-ui/core@1.7.2': - resolution: {integrity: sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==} + "@floating-ui/core@1.7.2": + resolution: + { integrity: sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw== } - '@floating-ui/dom@1.7.2': - resolution: {integrity: sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==} + "@floating-ui/dom@1.7.2": + resolution: + { integrity: sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA== } - '@floating-ui/react-dom@2.1.4': - resolution: {integrity: sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw==} + "@floating-ui/react-dom@2.1.4": + resolution: + { integrity: sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw== } peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + react: ">=16.8.0" + react-dom: ">=16.8.0" - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + "@floating-ui/utils@0.2.10": + resolution: + { integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ== } - '@formatjs/ecma402-abstract@2.3.4': - resolution: {integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==} + "@formatjs/ecma402-abstract@2.3.4": + resolution: + { integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA== } - '@formatjs/fast-memoize@2.2.7': - resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} + "@formatjs/fast-memoize@2.2.7": + resolution: + { integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ== } - '@formatjs/icu-messageformat-parser@2.11.2': - resolution: {integrity: sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==} + "@formatjs/icu-messageformat-parser@2.11.2": + resolution: + { integrity: sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA== } - '@formatjs/icu-skeleton-parser@1.8.14': - resolution: {integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==} + "@formatjs/icu-skeleton-parser@1.8.14": + resolution: + { integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ== } - '@formatjs/intl-localematcher@0.5.10': - resolution: {integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==} + "@formatjs/intl-localematcher@0.5.10": + resolution: + { integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q== } - '@formatjs/intl-localematcher@0.6.1': - resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==} + "@formatjs/intl-localematcher@0.6.1": + resolution: + { integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg== } - '@hello-pangea/dnd@18.0.1': - resolution: {integrity: sha512-xojVWG8s/TGrKT1fC8K2tIWeejJYTAeJuj36zM//yEm/ZrnZUSFGS15BpO+jGZT1ybWvyXmeDJwPYb4dhWlbZQ==} + "@hello-pangea/dnd@18.0.1": + resolution: + { integrity: sha512-xojVWG8s/TGrKT1fC8K2tIWeejJYTAeJuj36zM//yEm/ZrnZUSFGS15BpO+jGZT1ybWvyXmeDJwPYb4dhWlbZQ== } peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - '@hookform/resolvers@5.1.1': - resolution: {integrity: sha512-J/NVING3LMAEvexJkyTLjruSm7aOFx7QX21pzkiJfMoNG0wl5aFEjLTl7ay7IQb9EWY6AkrBy7tHL2Alijpdcg==} + "@hookform/resolvers@5.1.1": + resolution: + { integrity: sha512-J/NVING3LMAEvexJkyTLjruSm7aOFx7QX21pzkiJfMoNG0wl5aFEjLTl7ay7IQb9EWY6AkrBy7tHL2Alijpdcg== } peerDependencies: react-hook-form: ^7.55.0 - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} + "@humanfs/core@0.19.1": + resolution: + { integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== } + engines: { node: ">=18.18.0" } - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} + "@humanfs/node@0.16.6": + resolution: + { integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== } + engines: { node: ">=18.18.0" } - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + "@humanwhocodes/module-importer@1.0.1": + resolution: + { integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== } + engines: { node: ">=12.22" } - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} + "@humanwhocodes/retry@0.3.1": + resolution: + { integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== } + engines: { node: ">=18.18" } - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} + "@humanwhocodes/retry@0.4.3": + resolution: + { integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== } + engines: { node: ">=18.18" } - '@ianvs/prettier-plugin-sort-imports@4.4.2': - resolution: {integrity: sha512-KkVFy3TLh0OFzimbZglMmORi+vL/i2OFhEs5M07R9w0IwWAGpsNNyE4CY/2u0YoMF5bawKC2+8/fUH60nnNtjw==} + "@ianvs/prettier-plugin-sort-imports@4.4.2": + resolution: + { integrity: sha512-KkVFy3TLh0OFzimbZglMmORi+vL/i2OFhEs5M07R9w0IwWAGpsNNyE4CY/2u0YoMF5bawKC2+8/fUH60nnNtjw== } peerDependencies: - '@vue/compiler-sfc': 2.7.x || 3.x + "@vue/compiler-sfc": 2.7.x || 3.x prettier: 2 || 3 || ^4.0.0-0 peerDependenciesMeta: - '@vue/compiler-sfc': + "@vue/compiler-sfc": optional: true - '@img/sharp-darwin-arm64@0.34.2': - resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-darwin-arm64@0.34.2": + resolution: + { integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.2': - resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-darwin-x64@0.34.2": + resolution: + { integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.1.0': - resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} + "@img/sharp-libvips-darwin-arm64@1.1.0": + resolution: + { integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA== } cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.1.0': - resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} + "@img/sharp-libvips-darwin-x64@1.1.0": + resolution: + { integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ== } cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.1.0': - resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} + "@img/sharp-libvips-linux-arm64@1.1.0": + resolution: + { integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew== } cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.1.0': - resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} + "@img/sharp-libvips-linux-arm@1.1.0": + resolution: + { integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA== } cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.1.0': - resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} + "@img/sharp-libvips-linux-ppc64@1.1.0": + resolution: + { integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ== } cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.1.0': - resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} + "@img/sharp-libvips-linux-s390x@1.1.0": + resolution: + { integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA== } cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.1.0': - resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} + "@img/sharp-libvips-linux-x64@1.1.0": + resolution: + { integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q== } cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': - resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} + "@img/sharp-libvips-linuxmusl-arm64@1.1.0": + resolution: + { integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w== } cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.1.0': - resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} + "@img/sharp-libvips-linuxmusl-x64@1.1.0": + resolution: + { integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A== } cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.2': - resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-arm64@0.34.2": + resolution: + { integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.2': - resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-arm@0.34.2": + resolution: + { integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.34.2': - resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-s390x@0.34.2": + resolution: + { integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.2': - resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linux-x64@0.34.2": + resolution: + { integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.2': - resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linuxmusl-arm64@0.34.2": + resolution: + { integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.2': - resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-linuxmusl-x64@0.34.2": + resolution: + { integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.2': - resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-wasm32@0.34.2": + resolution: + { integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.2': - resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-win32-arm64@0.34.2": + resolution: + { integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.2': - resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-win32-ia32@0.34.2": + resolution: + { integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.2': - resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + "@img/sharp-win32-x64@0.34.2": + resolution: + { integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [win32] - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} + "@isaacs/fs-minipass@4.0.1": + resolution: + { integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== } + engines: { node: ">=18.0.0" } - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + "@jridgewell/gen-mapping@0.3.12": + resolution: + { integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg== } - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + "@jridgewell/resolve-uri@3.1.2": + resolution: + { integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== } + engines: { node: ">=6.0.0" } - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + "@jridgewell/sourcemap-codec@1.5.4": + resolution: + { integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== } - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + "@jridgewell/trace-mapping@0.3.29": + resolution: + { integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ== } - '@napi-rs/wasm-runtime@0.2.11': - resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + "@napi-rs/wasm-runtime@0.2.11": + resolution: + { integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA== } - '@next/env@15.3.4': - resolution: {integrity: sha512-ZkdYzBseS6UjYzz6ylVKPOK+//zLWvD6Ta+vpoye8cW11AjiQjGYVibF0xuvT4L0iJfAPfZLFidaEzAOywyOAQ==} + "@next/env@15.3.4": + resolution: + { integrity: sha512-ZkdYzBseS6UjYzz6ylVKPOK+//zLWvD6Ta+vpoye8cW11AjiQjGYVibF0xuvT4L0iJfAPfZLFidaEzAOywyOAQ== } - '@next/eslint-plugin-next@15.3.4': - resolution: {integrity: sha512-lBxYdj7TI8phbJcLSAqDt57nIcobEign5NYIKCiy0hXQhrUbTqLqOaSDi568U6vFg4hJfBdZYsG4iP/uKhCqgg==} + "@next/eslint-plugin-next@15.3.4": + resolution: + { integrity: sha512-lBxYdj7TI8phbJcLSAqDt57nIcobEign5NYIKCiy0hXQhrUbTqLqOaSDi568U6vFg4hJfBdZYsG4iP/uKhCqgg== } - '@next/swc-darwin-arm64@15.3.4': - resolution: {integrity: sha512-z0qIYTONmPRbwHWvpyrFXJd5F9YWLCsw3Sjrzj2ZvMYy9NPQMPZ1NjOJh4ojr4oQzcGYwgJKfidzehaNa1BpEg==} - engines: {node: '>= 10'} + "@next/swc-darwin-arm64@15.3.4": + resolution: + { integrity: sha512-z0qIYTONmPRbwHWvpyrFXJd5F9YWLCsw3Sjrzj2ZvMYy9NPQMPZ1NjOJh4ojr4oQzcGYwgJKfidzehaNa1BpEg== } + engines: { node: ">= 10" } cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.3.4': - resolution: {integrity: sha512-Z0FYJM8lritw5Wq+vpHYuCIzIlEMjewG2aRkc3Hi2rcbULknYL/xqfpBL23jQnCSrDUGAo/AEv0Z+s2bff9Zkw==} - engines: {node: '>= 10'} + "@next/swc-darwin-x64@15.3.4": + resolution: + { integrity: sha512-Z0FYJM8lritw5Wq+vpHYuCIzIlEMjewG2aRkc3Hi2rcbULknYL/xqfpBL23jQnCSrDUGAo/AEv0Z+s2bff9Zkw== } + engines: { node: ">= 10" } cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.3.4': - resolution: {integrity: sha512-l8ZQOCCg7adwmsnFm8m5q9eIPAHdaB2F3cxhufYtVo84pymwKuWfpYTKcUiFcutJdp9xGHC+F1Uq3xnFU1B/7g==} - engines: {node: '>= 10'} + "@next/swc-linux-arm64-gnu@15.3.4": + resolution: + { integrity: sha512-l8ZQOCCg7adwmsnFm8m5q9eIPAHdaB2F3cxhufYtVo84pymwKuWfpYTKcUiFcutJdp9xGHC+F1Uq3xnFU1B/7g== } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.3.4': - resolution: {integrity: sha512-wFyZ7X470YJQtpKot4xCY3gpdn8lE9nTlldG07/kJYexCUpX1piX+MBfZdvulo+t1yADFVEuzFfVHfklfEx8kw==} - engines: {node: '>= 10'} + "@next/swc-linux-arm64-musl@15.3.4": + resolution: + { integrity: sha512-wFyZ7X470YJQtpKot4xCY3gpdn8lE9nTlldG07/kJYexCUpX1piX+MBfZdvulo+t1yADFVEuzFfVHfklfEx8kw== } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.3.4': - resolution: {integrity: sha512-gEbH9rv9o7I12qPyvZNVTyP/PWKqOp8clvnoYZQiX800KkqsaJZuOXkWgMa7ANCCh/oEN2ZQheh3yH8/kWPSEg==} - engines: {node: '>= 10'} + "@next/swc-linux-x64-gnu@15.3.4": + resolution: + { integrity: sha512-gEbH9rv9o7I12qPyvZNVTyP/PWKqOp8clvnoYZQiX800KkqsaJZuOXkWgMa7ANCCh/oEN2ZQheh3yH8/kWPSEg== } + engines: { node: ">= 10" } cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.3.4': - resolution: {integrity: sha512-Cf8sr0ufuC/nu/yQ76AnarbSAXcwG/wj+1xFPNbyNo8ltA6kw5d5YqO8kQuwVIxk13SBdtgXrNyom3ZosHAy4A==} - engines: {node: '>= 10'} + "@next/swc-linux-x64-musl@15.3.4": + resolution: + { integrity: sha512-Cf8sr0ufuC/nu/yQ76AnarbSAXcwG/wj+1xFPNbyNo8ltA6kw5d5YqO8kQuwVIxk13SBdtgXrNyom3ZosHAy4A== } + engines: { node: ">= 10" } cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.3.4': - resolution: {integrity: sha512-ay5+qADDN3rwRbRpEhTOreOn1OyJIXS60tg9WMYTWCy3fB6rGoyjLVxc4dR9PYjEdR2iDYsaF5h03NA+XuYPQQ==} - engines: {node: '>= 10'} + "@next/swc-win32-arm64-msvc@15.3.4": + resolution: + { integrity: sha512-ay5+qADDN3rwRbRpEhTOreOn1OyJIXS60tg9WMYTWCy3fB6rGoyjLVxc4dR9PYjEdR2iDYsaF5h03NA+XuYPQQ== } + engines: { node: ">= 10" } cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.3.4': - resolution: {integrity: sha512-4kDt31Bc9DGyYs41FTL1/kNpDeHyha2TC0j5sRRoKCyrhNcfZ/nRQkAUlF27mETwm8QyHqIjHJitfcza2Iykfg==} - engines: {node: '>= 10'} + "@next/swc-win32-x64-msvc@15.3.4": + resolution: + { integrity: sha512-4kDt31Bc9DGyYs41FTL1/kNpDeHyha2TC0j5sRRoKCyrhNcfZ/nRQkAUlF27mETwm8QyHqIjHJitfcza2Iykfg== } + engines: { node: ">= 10" } cpu: [x64] os: [win32] - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + "@nodelib/fs.scandir@2.1.5": + resolution: + { integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== } + engines: { node: ">= 8" } - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + "@nodelib/fs.stat@2.0.5": + resolution: + { integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== } + engines: { node: ">= 8" } - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + "@nodelib/fs.walk@1.2.8": + resolution: + { integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== } + engines: { node: ">= 8" } - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} + "@nolyfill/is-core-module@1.0.39": + resolution: + { integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== } + engines: { node: ">=12.4.0" } - '@pkgr/core@0.2.7': - resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + "@pkgr/core@0.2.7": + resolution: + { integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg== } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } - '@radix-ui/number@1.1.1': - resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + "@radix-ui/number@1.1.1": + resolution: + { integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g== } - '@radix-ui/primitive@1.1.2': - resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} + "@radix-ui/primitive@1.1.2": + resolution: + { integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA== } - '@radix-ui/react-arrow@1.1.7': - resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + "@radix-ui/react-arrow@1.1.7": + resolution: + { integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-aspect-ratio@1.1.7': - resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==} + "@radix-ui/react-aspect-ratio@1.1.7": + resolution: + { integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-avatar@1.1.10': - resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==} + "@radix-ui/react-avatar@1.1.10": + resolution: + { integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-checkbox@1.3.2': - resolution: {integrity: sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==} + "@radix-ui/react-checkbox@1.3.2": + resolution: + { integrity: sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-collection@1.1.7': - resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + "@radix-ui/react-collection@1.1.7": + resolution: + { integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + "@radix-ui/react-compose-refs@1.1.2": + resolution: + { integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-context@1.1.2': - resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + "@radix-ui/react-context@1.1.2": + resolution: + { integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-dialog@1.1.14': - resolution: {integrity: sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==} + "@radix-ui/react-dialog@1.1.14": + resolution: + { integrity: sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-direction@1.1.1': - resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + "@radix-ui/react-direction@1.1.1": + resolution: + { integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-dismissable-layer@1.1.10': - resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} + "@radix-ui/react-dismissable-layer@1.1.10": + resolution: + { integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-dropdown-menu@2.1.15': - resolution: {integrity: sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==} + "@radix-ui/react-dropdown-menu@2.1.15": + resolution: + { integrity: sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-focus-guards@1.1.2': - resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} + "@radix-ui/react-focus-guards@1.1.2": + resolution: + { integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-focus-scope@1.1.7': - resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + "@radix-ui/react-focus-scope@1.1.7": + resolution: + { integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + "@radix-ui/react-id@1.1.1": + resolution: + { integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-label@2.1.7': - resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} + "@radix-ui/react-label@2.1.7": + resolution: + { integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-menu@2.1.15': - resolution: {integrity: sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==} + "@radix-ui/react-menu@2.1.15": + resolution: + { integrity: sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-popper@1.2.7': - resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} + "@radix-ui/react-popper@1.2.7": + resolution: + { integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-portal@1.1.9': - resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + "@radix-ui/react-portal@1.1.9": + resolution: + { integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-presence@1.1.4': - resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} + "@radix-ui/react-presence@1.1.4": + resolution: + { integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + "@radix-ui/react-primitive@2.1.3": + resolution: + { integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-progress@1.1.7': - resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} + "@radix-ui/react-progress@1.1.7": + resolution: + { integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-roving-focus@1.1.10': - resolution: {integrity: sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==} + "@radix-ui/react-roving-focus@1.1.10": + resolution: + { integrity: sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-scroll-area@1.2.9': - resolution: {integrity: sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==} + "@radix-ui/react-scroll-area@1.2.9": + resolution: + { integrity: sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-select@2.2.5': - resolution: {integrity: sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==} + "@radix-ui/react-select@2.2.5": + resolution: + { integrity: sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-separator@1.1.7': - resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} + "@radix-ui/react-separator@1.1.7": + resolution: + { integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-slider@1.3.5': - resolution: {integrity: sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==} + "@radix-ui/react-slider@1.3.5": + resolution: + { integrity: sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + "@radix-ui/react-slot@1.2.3": + resolution: + { integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-switch@1.2.5': - resolution: {integrity: sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==} + "@radix-ui/react-switch@1.2.5": + resolution: + { integrity: sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-tabs@1.1.12': - resolution: {integrity: sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==} + "@radix-ui/react-tabs@1.1.12": + resolution: + { integrity: sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/react-use-callback-ref@1.1.1': - resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + "@radix-ui/react-use-callback-ref@1.1.1": + resolution: + { integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + "@radix-ui/react-use-controllable-state@1.2.2": + resolution: + { integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + "@radix-ui/react-use-effect-event@0.0.2": + resolution: + { integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-escape-keydown@1.1.1': - resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + "@radix-ui/react-use-escape-keydown@1.1.1": + resolution: + { integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-is-hydrated@0.1.0': - resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} + "@radix-ui/react-use-is-hydrated@0.1.0": + resolution: + { integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + "@radix-ui/react-use-layout-effect@1.1.1": + resolution: + { integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-previous@1.1.1': - resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + "@radix-ui/react-use-previous@1.1.1": + resolution: + { integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-rect@1.1.1': - resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + "@radix-ui/react-use-rect@1.1.1": + resolution: + { integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-use-size@1.1.1': - resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + "@radix-ui/react-use-size@1.1.1": + resolution: + { integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ== } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@radix-ui/react-visually-hidden@1.2.3': - resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + "@radix-ui/react-visually-hidden@1.2.3": + resolution: + { integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug== } peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + "@types/react": "*" + "@types/react-dom": "*" react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - '@types/react-dom': + "@types/react-dom": optional: true - '@radix-ui/rect@1.1.1': - resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + "@radix-ui/rect@1.1.1": + resolution: + { integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw== } - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + "@rtsao/scc@1.1.0": + resolution: + { integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== } - '@rushstack/eslint-patch@1.12.0': - resolution: {integrity: sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==} + "@rushstack/eslint-patch@1.12.0": + resolution: + { integrity: sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw== } - '@schummar/icu-type-parser@1.21.5': - resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==} + "@schummar/icu-type-parser@1.21.5": + resolution: + { integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw== } - '@standard-schema/utils@0.3.0': - resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + "@standard-schema/utils@0.3.0": + resolution: + { integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g== } - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + "@swc/counter@0.1.3": + resolution: + { integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== } - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + "@swc/helpers@0.5.15": + resolution: + { integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== } - '@tabler/icons-react@3.34.0': - resolution: {integrity: sha512-OpEIR2iZsIXECtAIMbn1zfKfQ3zKJjXyIZlkgOGUL9UkMCFycEiF2Y8AVfEQsyre/3FnBdlWJvGr0NU47n2TbQ==} + "@tabler/icons-react@3.34.0": + resolution: + { integrity: sha512-OpEIR2iZsIXECtAIMbn1zfKfQ3zKJjXyIZlkgOGUL9UkMCFycEiF2Y8AVfEQsyre/3FnBdlWJvGr0NU47n2TbQ== } peerDependencies: - react: '>= 16' + react: ">= 16" - '@tabler/icons@3.34.0': - resolution: {integrity: sha512-jtVqv0JC1WU2TTEBN32D9+R6mc1iEBuPwLnBsWaR02SIEciu9aq5806AWkCHuObhQ4ERhhXErLEK7Fs+tEZxiA==} + "@tabler/icons@3.34.0": + resolution: + { integrity: sha512-jtVqv0JC1WU2TTEBN32D9+R6mc1iEBuPwLnBsWaR02SIEciu9aq5806AWkCHuObhQ4ERhhXErLEK7Fs+tEZxiA== } - '@tailwindcss/node@4.1.11': - resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + "@tailwindcss/node@4.1.11": + resolution: + { integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q== } - '@tailwindcss/oxide-android-arm64@4.1.11': - resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-android-arm64@4.1.11": + resolution: + { integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg== } + engines: { node: ">= 10" } cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.11': - resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-darwin-arm64@4.1.11": + resolution: + { integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ== } + engines: { node: ">= 10" } cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.11': - resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-darwin-x64@4.1.11": + resolution: + { integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw== } + engines: { node: ">= 10" } cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.11': - resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-freebsd-x64@4.1.11": + resolution: + { integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA== } + engines: { node: ">= 10" } cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': - resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11": + resolution: + { integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg== } + engines: { node: ">= 10" } cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': - resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-linux-arm64-gnu@4.1.11": + resolution: + { integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ== } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': - resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-linux-arm64-musl@4.1.11": + resolution: + { integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ== } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': - resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-linux-x64-gnu@4.1.11": + resolution: + { integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg== } + engines: { node: ">= 10" } cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.11': - resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-linux-x64-musl@4.1.11": + resolution: + { integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q== } + engines: { node: ">= 10" } cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.11': - resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} - engines: {node: '>=14.0.0'} + "@tailwindcss/oxide-wasm32-wasi@4.1.11": + resolution: + { integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g== } + engines: { node: ">=14.0.0" } cpu: [wasm32] bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' + - "@napi-rs/wasm-runtime" + - "@emnapi/core" + - "@emnapi/runtime" + - "@tybys/wasm-util" + - "@emnapi/wasi-threads" - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': - resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-win32-arm64-msvc@4.1.11": + resolution: + { integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w== } + engines: { node: ">= 10" } cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': - resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} - engines: {node: '>= 10'} + "@tailwindcss/oxide-win32-x64-msvc@4.1.11": + resolution: + { integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg== } + engines: { node: ">= 10" } cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.11': - resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} - engines: {node: '>= 10'} + "@tailwindcss/oxide@4.1.11": + resolution: + { integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg== } + engines: { node: ">= 10" } - '@tailwindcss/postcss@4.1.11': - resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} + "@tailwindcss/postcss@4.1.11": + resolution: + { integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA== } - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + "@tybys/wasm-util@0.9.0": + resolution: + { integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== } - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + "@types/estree@1.0.8": + resolution: + { integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== } - '@types/js-cookie@3.0.6': - resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} + "@types/js-cookie@3.0.6": + resolution: + { integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ== } - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + "@types/json-schema@7.0.15": + resolution: + { integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== } - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + "@types/json5@0.0.29": + resolution: + { integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== } - '@types/node@22.14.0': - resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} + "@types/node@22.14.0": + resolution: + { integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA== } - '@types/qrcode@1.5.5': - resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==} + "@types/qrcode@1.5.5": + resolution: + { integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg== } - '@types/react-dom@19.1.6': - resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} + "@types/react-dom@19.1.6": + resolution: + { integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw== } peerDependencies: - '@types/react': ^19.0.0 + "@types/react": ^19.0.0 - '@types/react-dropzone@5.1.0': - resolution: {integrity: sha512-VCdDCwSsr1MT2frsVl5p8qH+LWwUGzsaNtGkEQekHviZqK0dmTbiIp2Pzfb8lTkH4oTE2JtBbWnbuM6B4FH80A==} + "@types/react-dropzone@5.1.0": + resolution: + { integrity: sha512-VCdDCwSsr1MT2frsVl5p8qH+LWwUGzsaNtGkEQekHviZqK0dmTbiIp2Pzfb8lTkH4oTE2JtBbWnbuM6B4FH80A== } deprecated: This is a stub types definition. react-dropzone provides its own type definitions, so you do not need this installed. - '@types/react@19.1.8': - resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} + "@types/react@19.1.8": + resolution: + { integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g== } - '@types/use-sync-external-store@0.0.6': - resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + "@types/use-sync-external-store@0.0.6": + resolution: + { integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg== } - '@typescript-eslint/eslint-plugin@8.35.1': - resolution: {integrity: sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/eslint-plugin@8.35.1": + resolution: + { integrity: sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - '@typescript-eslint/parser': ^8.35.1 + "@typescript-eslint/parser": ^8.35.1 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/parser@8.35.1': - resolution: {integrity: sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/parser@8.35.1": + resolution: + { integrity: sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/project-service@8.35.1': - resolution: {integrity: sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/project-service@8.35.1": + resolution: + { integrity: sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/scope-manager@8.35.1': - resolution: {integrity: sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/scope-manager@8.35.1": + resolution: + { integrity: sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@typescript-eslint/tsconfig-utils@8.35.1': - resolution: {integrity: sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/tsconfig-utils@8.35.1": + resolution: + { integrity: sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/type-utils@8.35.1': - resolution: {integrity: sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/type-utils@8.35.1": + resolution: + { integrity: sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/types@8.35.1': - resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/types@8.35.1": + resolution: + { integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@typescript-eslint/typescript-estree@8.35.1': - resolution: {integrity: sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/typescript-estree@8.35.1": + resolution: + { integrity: sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/utils@8.35.1': - resolution: {integrity: sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/utils@8.35.1": + resolution: + { integrity: sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/visitor-keys@8.35.1': - resolution: {integrity: sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/visitor-keys@8.35.1": + resolution: + { integrity: sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@unrs/resolver-binding-android-arm-eabi@1.11.0': - resolution: {integrity: sha512-LRw5BW29sYj9NsQC6QoqeLVQhEa+BwVINYyMlcve+6stwdBsSt5UB7zw4UZB4+4PNqIVilHoMaPWCb/KhABHQw==} + "@unrs/resolver-binding-android-arm-eabi@1.11.0": + resolution: + { integrity: sha512-LRw5BW29sYj9NsQC6QoqeLVQhEa+BwVINYyMlcve+6stwdBsSt5UB7zw4UZB4+4PNqIVilHoMaPWCb/KhABHQw== } cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm64@1.11.0': - resolution: {integrity: sha512-zYX8D2zcWCAHqghA8tPjbp7LwjVXbIZP++mpU/Mrf5jUVlk3BWIxkeB8yYzZi5GpFSlqMcRZQxQqbMI0c2lASQ==} + "@unrs/resolver-binding-android-arm64@1.11.0": + resolution: + { integrity: sha512-zYX8D2zcWCAHqghA8tPjbp7LwjVXbIZP++mpU/Mrf5jUVlk3BWIxkeB8yYzZi5GpFSlqMcRZQxQqbMI0c2lASQ== } cpu: [arm64] os: [android] - '@unrs/resolver-binding-darwin-arm64@1.11.0': - resolution: {integrity: sha512-YsYOT049hevAY/lTYD77GhRs885EXPeAfExG5KenqMJ417nYLS2N/kpRpYbABhFZBVQn+2uRPasTe4ypmYoo3w==} + "@unrs/resolver-binding-darwin-arm64@1.11.0": + resolution: + { integrity: sha512-YsYOT049hevAY/lTYD77GhRs885EXPeAfExG5KenqMJ417nYLS2N/kpRpYbABhFZBVQn+2uRPasTe4ypmYoo3w== } cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.11.0': - resolution: {integrity: sha512-PSjvk3OZf1aZImdGY5xj9ClFG3bC4gnSSYWrt+id0UAv+GwwVldhpMFjAga8SpMo2T1GjV9UKwM+QCsQCQmtdA==} + "@unrs/resolver-binding-darwin-x64@1.11.0": + resolution: + { integrity: sha512-PSjvk3OZf1aZImdGY5xj9ClFG3bC4gnSSYWrt+id0UAv+GwwVldhpMFjAga8SpMo2T1GjV9UKwM+QCsQCQmtdA== } cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.11.0': - resolution: {integrity: sha512-KC/iFaEN/wsTVYnHClyHh5RSYA9PpuGfqkFua45r4sweXpC0KHZ+BYY7ikfcGPt5w1lMpR1gneFzuqWLQxsRKg==} + "@unrs/resolver-binding-freebsd-x64@1.11.0": + resolution: + { integrity: sha512-KC/iFaEN/wsTVYnHClyHh5RSYA9PpuGfqkFua45r4sweXpC0KHZ+BYY7ikfcGPt5w1lMpR1gneFzuqWLQxsRKg== } cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.0': - resolution: {integrity: sha512-CDh/0v8uot43cB4yKtDL9CVY8pbPnMV0dHyQCE4lFz6PW/+9tS0i9eqP5a91PAqEBVMqH1ycu+k8rP6wQU846w==} + "@unrs/resolver-binding-linux-arm-gnueabihf@1.11.0": + resolution: + { integrity: sha512-CDh/0v8uot43cB4yKtDL9CVY8pbPnMV0dHyQCE4lFz6PW/+9tS0i9eqP5a91PAqEBVMqH1ycu+k8rP6wQU846w== } cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.0': - resolution: {integrity: sha512-+TE7epATDSnvwr3L/hNHX3wQ8KQYB+jSDTdywycg3qDqvavRP8/HX9qdq/rMcnaRDn4EOtallb3vL/5wCWGCkw==} + "@unrs/resolver-binding-linux-arm-musleabihf@1.11.0": + resolution: + { integrity: sha512-+TE7epATDSnvwr3L/hNHX3wQ8KQYB+jSDTdywycg3qDqvavRP8/HX9qdq/rMcnaRDn4EOtallb3vL/5wCWGCkw== } cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.11.0': - resolution: {integrity: sha512-VBAYGg3VahofpQ+L4k/ZO8TSICIbUKKTaMYOWHWfuYBFqPbSkArZZLezw3xd27fQkxX4BaLGb/RKnW0dH9Y/UA==} + "@unrs/resolver-binding-linux-arm64-gnu@1.11.0": + resolution: + { integrity: sha512-VBAYGg3VahofpQ+L4k/ZO8TSICIbUKKTaMYOWHWfuYBFqPbSkArZZLezw3xd27fQkxX4BaLGb/RKnW0dH9Y/UA== } cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.11.0': - resolution: {integrity: sha512-9IgGFUUb02J1hqdRAHXpZHIeUHRrbnGo6vrRbz0fREH7g+rzQy53/IBSyadZ/LG5iqMxukriNPu4hEMUn+uWEg==} + "@unrs/resolver-binding-linux-arm64-musl@1.11.0": + resolution: + { integrity: sha512-9IgGFUUb02J1hqdRAHXpZHIeUHRrbnGo6vrRbz0fREH7g+rzQy53/IBSyadZ/LG5iqMxukriNPu4hEMUn+uWEg== } cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.0': - resolution: {integrity: sha512-LR4iQ/LPjMfivpL2bQ9kmm3UnTas3U+umcCnq/CV7HAkukVdHxrDD1wwx74MIWbbgzQTLPYY7Ur2MnnvkYJCBQ==} + "@unrs/resolver-binding-linux-ppc64-gnu@1.11.0": + resolution: + { integrity: sha512-LR4iQ/LPjMfivpL2bQ9kmm3UnTas3U+umcCnq/CV7HAkukVdHxrDD1wwx74MIWbbgzQTLPYY7Ur2MnnvkYJCBQ== } cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.0': - resolution: {integrity: sha512-HCupFQwMrRhrOg7YHrobbB5ADg0Q8RNiuefqMHVsdhEy9lLyXm/CxsCXeLJdrg27NAPsCaMDtdlm8Z2X8x91Tg==} + "@unrs/resolver-binding-linux-riscv64-gnu@1.11.0": + resolution: + { integrity: sha512-HCupFQwMrRhrOg7YHrobbB5ADg0Q8RNiuefqMHVsdhEy9lLyXm/CxsCXeLJdrg27NAPsCaMDtdlm8Z2X8x91Tg== } cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.11.0': - resolution: {integrity: sha512-Ckxy76A5xgjWa4FNrzcKul5qFMWgP5JSQ5YKd0XakmWOddPLSkQT+uAvUpQNnFGNbgKzv90DyQlxPDYPQ4nd6A==} + "@unrs/resolver-binding-linux-riscv64-musl@1.11.0": + resolution: + { integrity: sha512-Ckxy76A5xgjWa4FNrzcKul5qFMWgP5JSQ5YKd0XakmWOddPLSkQT+uAvUpQNnFGNbgKzv90DyQlxPDYPQ4nd6A== } cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.11.0': - resolution: {integrity: sha512-HfO0PUCCRte2pMJmVyxPI+eqT7KuV3Fnvn2RPvMe5mOzb2BJKf4/Vth8sSt9cerQboMaTVpbxyYjjLBWIuI5BQ==} + "@unrs/resolver-binding-linux-s390x-gnu@1.11.0": + resolution: + { integrity: sha512-HfO0PUCCRte2pMJmVyxPI+eqT7KuV3Fnvn2RPvMe5mOzb2BJKf4/Vth8sSt9cerQboMaTVpbxyYjjLBWIuI5BQ== } cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.11.0': - resolution: {integrity: sha512-9PZdjP7tLOEjpXHS6+B/RNqtfVUyDEmaViPOuSqcbomLdkJnalt5RKQ1tr2m16+qAufV0aDkfhXtoO7DQos/jg==} + "@unrs/resolver-binding-linux-x64-gnu@1.11.0": + resolution: + { integrity: sha512-9PZdjP7tLOEjpXHS6+B/RNqtfVUyDEmaViPOuSqcbomLdkJnalt5RKQ1tr2m16+qAufV0aDkfhXtoO7DQos/jg== } cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.11.0': - resolution: {integrity: sha512-qkE99ieiSKMnFJY/EfyGKVtNra52/k+lVF/PbO4EL5nU6AdvG4XhtJ+WHojAJP7ID9BNIra/yd75EHndewNRfA==} + "@unrs/resolver-binding-linux-x64-musl@1.11.0": + resolution: + { integrity: sha512-qkE99ieiSKMnFJY/EfyGKVtNra52/k+lVF/PbO4EL5nU6AdvG4XhtJ+WHojAJP7ID9BNIra/yd75EHndewNRfA== } cpu: [x64] os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.11.0': - resolution: {integrity: sha512-MjXek8UL9tIX34gymvQLecz2hMaQzOlaqYJJBomwm1gsvK2F7hF+YqJJ2tRyBDTv9EZJGMt4KlKkSD/gZWCOiw==} - engines: {node: '>=14.0.0'} + "@unrs/resolver-binding-wasm32-wasi@1.11.0": + resolution: + { integrity: sha512-MjXek8UL9tIX34gymvQLecz2hMaQzOlaqYJJBomwm1gsvK2F7hF+YqJJ2tRyBDTv9EZJGMt4KlKkSD/gZWCOiw== } + engines: { node: ">=14.0.0" } cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.11.0': - resolution: {integrity: sha512-9LT6zIGO7CHybiQSh7DnQGwFMZvVr0kUjah6qQfkH2ghucxPV6e71sUXJdSM4Ba0MaGE6DC/NwWf7mJmc3DAng==} + "@unrs/resolver-binding-win32-arm64-msvc@1.11.0": + resolution: + { integrity: sha512-9LT6zIGO7CHybiQSh7DnQGwFMZvVr0kUjah6qQfkH2ghucxPV6e71sUXJdSM4Ba0MaGE6DC/NwWf7mJmc3DAng== } cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.11.0': - resolution: {integrity: sha512-HYchBYOZ7WN266VjoGm20xFv5EonG/ODURRgwl9EZT7Bq1nLEs6VKJddzfFdXEAho0wfFlt8L/xIiE29Pmy1RA==} + "@unrs/resolver-binding-win32-ia32-msvc@1.11.0": + resolution: + { integrity: sha512-HYchBYOZ7WN266VjoGm20xFv5EonG/ODURRgwl9EZT7Bq1nLEs6VKJddzfFdXEAho0wfFlt8L/xIiE29Pmy1RA== } cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.11.0': - resolution: {integrity: sha512-+oLKLHw3I1UQo4MeHfoLYF+e6YBa8p5vYUw3Rgt7IDzCs+57vIZqQlIo62NDpYM0VG6BjWOwnzBczMvbtH8hag==} + "@unrs/resolver-binding-win32-x64-msvc@1.11.0": + resolution: + { integrity: sha512-+oLKLHw3I1UQo4MeHfoLYF+e6YBa8p5vYUw3Rgt7IDzCs+57vIZqQlIo62NDpYM0VG6BjWOwnzBczMvbtH8hag== } cpu: [x64] os: [win32] - '@zxing/browser@0.0.7': - resolution: {integrity: sha512-AepzMgDnD6EjxewqmXpHJsi4S3Gw9ilZJLIbTf6fWuWySEcHBodnGu3p7FWlgq1Sd5QyfPhTum5z3CBkkhMVng==} + "@zxing/browser@0.0.7": + resolution: + { integrity: sha512-AepzMgDnD6EjxewqmXpHJsi4S3Gw9ilZJLIbTf6fWuWySEcHBodnGu3p7FWlgq1Sd5QyfPhTum5z3CBkkhMVng== } peerDependencies: - '@zxing/library': ^0.18.3 + "@zxing/library": ^0.18.3 - '@zxing/library@0.18.6': - resolution: {integrity: sha512-bulZ9JHoLFd9W36pi+7e7DnEYNJhljYjZ1UTsKPOoLMU3qtC+REHITeCRNx40zTRJZx18W5TBRXt5pq2Uopjsw==} - engines: {node: '>= 10.4.0'} + "@zxing/library@0.18.6": + resolution: + { integrity: sha512-bulZ9JHoLFd9W36pi+7e7DnEYNJhljYjZ1UTsKPOoLMU3qtC+REHITeCRNx40zTRJZx18W5TBRXt5pq2Uopjsw== } + engines: { node: ">= 10.4.0" } - '@zxing/text-encoding@0.9.0': - resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} + "@zxing/text-encoding@0.9.0": + resolution: + { integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== } acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + resolution: + { integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== } peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} + resolution: + { integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== } + engines: { node: ">=0.4.0" } hasBin: true ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + resolution: + { integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== } ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== } + engines: { node: ">=8" } ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== } + engines: { node: ">=8" } argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + resolution: + { integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== } aria-hidden@1.2.6: - resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA== } + engines: { node: ">=10" } aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== } + engines: { node: ">= 0.4" } array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== } + engines: { node: ">= 0.4" } array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== } + engines: { node: ">= 0.4" } array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== } + engines: { node: ">= 0.4" } array.prototype.findlastindex@1.2.6: - resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== } + engines: { node: ">= 0.4" } array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== } + engines: { node: ">= 0.4" } array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== } + engines: { node: ">= 0.4" } array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== } + engines: { node: ">= 0.4" } arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== } + engines: { node: ">= 0.4" } ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + resolution: + { integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== } async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== } + engines: { node: ">= 0.4" } asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + resolution: + { integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== } attr-accept@2.2.5: - resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== } + engines: { node: ">=4" } available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== } + engines: { node: ">= 0.4" } axe-core@4.10.3: - resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== } + engines: { node: ">=4" } axios@1.10.0: - resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + resolution: + { integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw== } axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== } + engines: { node: ">= 0.4" } balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + resolution: + { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== } brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + resolution: + { integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== } brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + resolution: + { integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== } braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== } + engines: { node: ">=8" } busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + resolution: + { integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== } + engines: { node: ">=10.16.0" } call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== } + engines: { node: ">= 0.4" } call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== } + engines: { node: ">= 0.4" } call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== } + engines: { node: ">= 0.4" } callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== } + engines: { node: ">=6" } camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== } + engines: { node: ">=6" } caniuse-lite@1.0.30001727: - resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} + resolution: + { integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q== } chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== } + engines: { node: ">=10" } chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} + resolution: + { integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== } + engines: { node: ">=18" } class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + resolution: + { integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg== } client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + resolution: + { integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== } cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + resolution: + { integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== } clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== } + engines: { node: ">=6" } color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + resolution: + { integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== } + engines: { node: ">=7.0.0" } color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + resolution: + { integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== } color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + resolution: + { integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== } color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + resolution: + { integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== } + engines: { node: ">=12.5.0" } combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + resolution: + { integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== } + engines: { node: ">= 0.8" } concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: + { integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== } cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} + resolution: + { integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== } + engines: { node: ">= 0.6" } core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + resolution: + { integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== } cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + resolution: + { integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== } + engines: { node: ">= 8" } css-box-model@1.2.1: - resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} + resolution: + { integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== } csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + resolution: + { integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== } damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + resolution: + { integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== } data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== } + engines: { node: ">= 0.4" } data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== } + engines: { node: ">= 0.4" } data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== } + engines: { node: ">= 0.4" } date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + resolution: + { integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== } debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + resolution: + { integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} + resolution: + { integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} + resolution: + { integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== } + engines: { node: ">=0.10.0" } decimal.js@10.6.0: - resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + resolution: + { integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== } deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + resolution: + { integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== } define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== } + engines: { node: ">= 0.4" } define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== } + engines: { node: ">= 0.4" } delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + resolution: + { integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== } + engines: { node: ">=0.4.0" } detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== } + engines: { node: ">=8" } detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + resolution: + { integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== } dijkstrajs@1.0.3: - resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + resolution: + { integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== } doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + resolution: + { integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== } + engines: { node: ">=0.10.0" } dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== } + engines: { node: ">= 0.4" } emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + resolution: + { integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== } emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + resolution: + { integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== } enhanced-resolve@5.18.2: - resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} - engines: {node: '>=10.13.0'} + resolution: + { integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ== } + engines: { node: ">=10.13.0" } es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== } + engines: { node: ">= 0.4" } es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== } + engines: { node: ">= 0.4" } es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== } + engines: { node: ">= 0.4" } es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== } + engines: { node: ">= 0.4" } es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== } + engines: { node: ">= 0.4" } es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== } + engines: { node: ">= 0.4" } es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== } + engines: { node: ">= 0.4" } es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== } + engines: { node: ">= 0.4" } escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== } + engines: { node: ">=10" } eslint-config-next@15.3.4: - resolution: {integrity: sha512-WqeumCq57QcTP2lYlV6BRUySfGiBYEXlQ1L0mQ+u4N4X4ZhUVSSQ52WtjqHv60pJ6dD7jn+YZc0d1/ZSsxccvg==} + resolution: + { integrity: sha512-WqeumCq57QcTP2lYlV6BRUySfGiBYEXlQ1L0mQ+u4N4X4ZhUVSSQ52WtjqHv60pJ6dD7jn+YZc0d1/ZSsxccvg== } peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: '>=3.3.1' + typescript: ">=3.3.1" peerDependenciesMeta: typescript: optional: true eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + resolution: + { integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== } hasBin: true peerDependencies: - eslint: '>=7.0.0' + eslint: ">=7.0.0" eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + resolution: + { integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== } eslint-import-resolver-typescript@3.10.1: - resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} - engines: {node: ^14.18.0 || >=16.0.0} + resolution: + { integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ== } + engines: { node: ^14.18.0 || >=16.0.0 } peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' + eslint: "*" + eslint-plugin-import: "*" + eslint-plugin-import-x: "*" peerDependenciesMeta: eslint-plugin-import: optional: true @@ -1704,16 +1981,17 @@ packages: optional: true eslint-module-utils@2.12.1: - resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== } + engines: { node: ">=4" } peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' + "@typescript-eslint/parser": "*" + eslint: "*" + eslint-import-resolver-node: "*" + eslint-import-resolver-typescript: "*" + eslint-import-resolver-webpack: "*" peerDependenciesMeta: - '@typescript-eslint/parser': + "@typescript-eslint/parser": optional: true eslint: optional: true @@ -1725,114 +2003,136 @@ packages: optional: true eslint-plugin-import@2.32.0: - resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== } + engines: { node: ">=4" } peerDependencies: - '@typescript-eslint/parser': '*' + "@typescript-eslint/parser": "*" eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: - '@typescript-eslint/parser': + "@typescript-eslint/parser": optional: true eslint-plugin-jsx-a11y@6.10.2: - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} - engines: {node: '>=4.0'} + resolution: + { integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== } + engines: { node: ">=4.0" } peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 eslint-plugin-prettier@5.5.1: - resolution: {integrity: sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==} - engines: {node: ^14.18.0 || >=16.0.0} + resolution: + { integrity: sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw== } + engines: { node: ^14.18.0 || >=16.0.0 } peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: ">= 7.0.0 <10.0.0 || >=10.1.0" + prettier: ">=3.0.0" peerDependenciesMeta: - '@types/eslint': + "@types/eslint": optional: true eslint-config-prettier: optional: true eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== } + engines: { node: ">=10" } peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== } + engines: { node: ">=4" } peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } eslint@9.30.0: - resolution: {integrity: sha512-iN/SiPxmQu6EVkf+m1qpBxzUhE12YqFLOSySuOyVLJLEF9nzTf+h/1AJYc1JWzCnktggeNrjvQGLngDzXirU6g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { integrity: sha512-iN/SiPxmQu6EVkf+m1qpBxzUhE12YqFLOSySuOyVLJLEF9nzTf+h/1AJYc1JWzCnktggeNrjvQGLngDzXirU6g== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } hasBin: true peerDependencies: - jiti: '*' + jiti: "*" peerDependenciesMeta: jiti: optional: true espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + resolution: + { integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== } + engines: { node: ">=0.10" } esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + resolution: + { integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== } + engines: { node: ">=4.0" } estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + resolution: + { integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== } + engines: { node: ">=4.0" } esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + resolution: + { integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== } + engines: { node: ">=0.10.0" } fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + resolution: + { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== } fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + resolution: + { integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== } fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} + resolution: + { integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== } + engines: { node: ">=8.6.0" } fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + resolution: + { integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== } + engines: { node: ">=8.6.0" } fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + resolution: + { integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== } fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + resolution: + { integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== } fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + resolution: + { integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== } fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + resolution: + { integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== } peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -1840,57 +2140,68 @@ packages: optional: true file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} + resolution: + { integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== } + engines: { node: ">=16.0.0" } file-selector@2.1.2: - resolution: {integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==} - engines: {node: '>= 12'} + resolution: + { integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig== } + engines: { node: ">= 12" } fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== } + engines: { node: ">=8" } find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== } + engines: { node: ">=8" } find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== } + engines: { node: ">=10" } flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} + resolution: + { integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== } + engines: { node: ">=16" } flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + resolution: + { integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== } follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} + resolution: + { integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== } + engines: { node: ">=4.0" } peerDependencies: - debug: '*' + debug: "*" peerDependenciesMeta: debug: optional: true for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== } + engines: { node: ">= 0.4" } form-data@4.0.3: - resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} - engines: {node: '>= 6'} + resolution: + { integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA== } + engines: { node: ">= 6" } framer-motion@12.23.0: - resolution: {integrity: sha512-xf6NxTGAyf7zR4r2KlnhFmsRfKIbjqeBupEDBAaEtVIBJX96sAon00kMlsKButSIRwPSHjbRrAPnYdJJ9kyhbA==} + resolution: + { integrity: sha512-xf6NxTGAyf7zR4r2KlnhFmsRfKIbjqeBupEDBAaEtVIBJX96sAon00kMlsKButSIRwPSHjbRrAPnYdJJ9kyhbA== } peerDependencies: - '@emotion/is-prop-valid': '*' + "@emotion/is-prop-valid": "*" react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@emotion/is-prop-valid': + "@emotion/is-prop-valid": optional: true react: optional: true @@ -1898,474 +2209,592 @@ packages: optional: true fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + resolution: + { integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + resolution: + { integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== } function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== } + engines: { node: ">= 0.4" } functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + resolution: + { integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== } get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + resolution: + { integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== } + engines: { node: 6.* || 8.* || >= 10.* } get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== } + engines: { node: ">= 0.4" } get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== } + engines: { node: ">=6" } get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== } + engines: { node: ">= 0.4" } get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== } + engines: { node: ">= 0.4" } get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + resolution: + { integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== } glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + resolution: + { integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== } + engines: { node: ">= 6" } glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + resolution: + { integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== } + engines: { node: ">=10.13.0" } globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} + resolution: + { integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== } + engines: { node: ">=18" } globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== } + engines: { node: ">= 0.4" } gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== } + engines: { node: ">= 0.4" } graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + resolution: + { integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== } graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + resolution: + { integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== } has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== } + engines: { node: ">= 0.4" } has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== } + engines: { node: ">=8" } has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + resolution: + { integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== } has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== } + engines: { node: ">= 0.4" } has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== } + engines: { node: ">= 0.4" } has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== } + engines: { node: ">= 0.4" } hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== } + engines: { node: ">= 0.4" } ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} + resolution: + { integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== } + engines: { node: ">= 4" } ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} + resolution: + { integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== } + engines: { node: ">= 4" } immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + resolution: + { integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== } import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== } + engines: { node: ">=6" } imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + resolution: + { integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== } + engines: { node: ">=0.8.19" } inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + resolution: + { integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== } input-otp@1.4.2: - resolution: {integrity: sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==} + resolution: + { integrity: sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA== } peerDependencies: react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== } + engines: { node: ">= 0.4" } intl-messageformat@10.7.16: - resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==} + resolution: + { integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug== } is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== } + engines: { node: ">= 0.4" } is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + resolution: + { integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== } is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== } + engines: { node: ">= 0.4" } is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== } + engines: { node: ">= 0.4" } is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== } + engines: { node: ">= 0.4" } is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + resolution: + { integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ== } is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== } + engines: { node: ">= 0.4" } is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== } + engines: { node: ">= 0.4" } is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== } + engines: { node: ">= 0.4" } is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== } + engines: { node: ">= 0.4" } is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + resolution: + { integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== } + engines: { node: ">=0.10.0" } is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== } + engines: { node: ">= 0.4" } is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== } + engines: { node: ">=8" } is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== } + engines: { node: ">= 0.4" } is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + resolution: + { integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== } + engines: { node: ">=0.10.0" } is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== } + engines: { node: ">= 0.4" } is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== } + engines: { node: ">= 0.4" } is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== } + engines: { node: ">= 0.4" } is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + resolution: + { integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== } + engines: { node: ">=0.12.0" } is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== } + engines: { node: ">= 0.4" } is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== } + engines: { node: ">= 0.4" } is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== } + engines: { node: ">= 0.4" } is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== } + engines: { node: ">= 0.4" } is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== } + engines: { node: ">= 0.4" } is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== } + engines: { node: ">= 0.4" } is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== } + engines: { node: ">= 0.4" } is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== } + engines: { node: ">= 0.4" } is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== } + engines: { node: ">= 0.4" } isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + resolution: + { integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== } isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + resolution: + { integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== } isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + resolution: + { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== } iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== } + engines: { node: ">= 0.4" } jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + resolution: + { integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== } hasBin: true js-cookie@3.0.5: - resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} - engines: {node: '>=14'} + resolution: + { integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== } + engines: { node: ">=14" } js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + resolution: + { integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== } js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + resolution: + { integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== } hasBin: true jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== } + engines: { node: ">=6" } hasBin: true json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + resolution: + { integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== } json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + resolution: + { integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== } json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + resolution: + { integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== } json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + resolution: + { integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== } hasBin: true jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + resolution: + { integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== } + engines: { node: ">=4.0" } jszip@3.10.1: - resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + resolution: + { integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== } keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + resolution: + { integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== } language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + resolution: + { integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== } language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + resolution: + { integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== } + engines: { node: ">=0.10" } levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + resolution: + { integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== } + engines: { node: ">= 0.8.0" } lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + resolution: + { integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== } lightningcss-darwin-arm64@1.30.1: - resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ== } + engines: { node: ">= 12.0.0" } cpu: [arm64] os: [darwin] lightningcss-darwin-x64@1.30.1: - resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA== } + engines: { node: ">= 12.0.0" } cpu: [x64] os: [darwin] lightningcss-freebsd-x64@1.30.1: - resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig== } + engines: { node: ">= 12.0.0" } cpu: [x64] os: [freebsd] lightningcss-linux-arm-gnueabihf@1.30.1: - resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q== } + engines: { node: ">= 12.0.0" } cpu: [arm] os: [linux] lightningcss-linux-arm64-gnu@1.30.1: - resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw== } + engines: { node: ">= 12.0.0" } cpu: [arm64] os: [linux] lightningcss-linux-arm64-musl@1.30.1: - resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ== } + engines: { node: ">= 12.0.0" } cpu: [arm64] os: [linux] lightningcss-linux-x64-gnu@1.30.1: - resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw== } + engines: { node: ">= 12.0.0" } cpu: [x64] os: [linux] lightningcss-linux-x64-musl@1.30.1: - resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ== } + engines: { node: ">= 12.0.0" } cpu: [x64] os: [linux] lightningcss-win32-arm64-msvc@1.30.1: - resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA== } + engines: { node: ">= 12.0.0" } cpu: [arm64] os: [win32] lightningcss-win32-x64-msvc@1.30.1: - resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg== } + engines: { node: ">= 12.0.0" } cpu: [x64] os: [win32] lightningcss@1.30.1: - resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg== } + engines: { node: ">= 12.0.0" } locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== } + engines: { node: ">=8" } locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== } + engines: { node: ">=10" } lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + resolution: + { integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== } loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + resolution: + { integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== } hasBin: true lucide-react@0.525.0: - resolution: {integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==} + resolution: + { integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ== } peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + resolution: + { integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== } math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== } + engines: { node: ">= 0.4" } merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + resolution: + { integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== } + engines: { node: ">= 8" } micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + resolution: + { integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== } + engines: { node: ">=8.6" } mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + resolution: + { integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== } + engines: { node: ">= 0.6" } mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + resolution: + { integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== } + engines: { node: ">= 0.6" } minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + resolution: + { integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== } minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== } + engines: { node: ">=16 || 14 >=14.17" } minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + resolution: + { integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== } minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== } + engines: { node: ">=16 || 14 >=14.17" } minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} - engines: {node: '>= 18'} + resolution: + { integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA== } + engines: { node: ">= 18" } mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== } + engines: { node: ">=10" } hasBin: true motion-dom@12.22.0: - resolution: {integrity: sha512-ooH7+/BPw9gOsL9VtPhEJHE2m4ltnhMlcGMhEqA0YGNhKof7jdaszvsyThXI6LVIKshJUZ9/CP6HNqQhJfV7kw==} + resolution: + { integrity: sha512-ooH7+/BPw9gOsL9VtPhEJHE2m4ltnhMlcGMhEqA0YGNhKof7jdaszvsyThXI6LVIKshJUZ9/CP6HNqQhJfV7kw== } motion-utils@12.19.0: - resolution: {integrity: sha512-BuFTHINYmV07pdWs6lj6aI63vr2N4dg0vR+td0rtrdpWOhBzIkEklZyLcvKBoEtwSqx8Jg06vUB5RS0xDiUybw==} + resolution: + { integrity: sha512-BuFTHINYmV07pdWs6lj6aI63vr2N4dg0vR+td0rtrdpWOhBzIkEklZyLcvKBoEtwSqx8Jg06vUB5RS0xDiUybw== } ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + resolution: + { integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== } nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + resolution: + { integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true nanoid@5.1.5: - resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} - engines: {node: ^18 || >=20} + resolution: + { integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw== } + engines: { node: ^18 || >=20 } hasBin: true napi-postinstall@0.3.0: - resolution: {integrity: sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + resolution: + { integrity: sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA== } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } hasBin: true natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + resolution: + { integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== } negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} + resolution: + { integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== } + engines: { node: ">= 0.6" } next-intl@4.3.4: - resolution: {integrity: sha512-VWLIDlGbnL/o4LnveJTJD1NOYN8lh3ZAGTWw2krhfgg53as3VsS4jzUVnArJdqvwtlpU/2BIDbWTZ7V4o1jFEw==} + resolution: + { integrity: sha512-VWLIDlGbnL/o4LnveJTJD1NOYN8lh3ZAGTWw2krhfgg53as3VsS4jzUVnArJdqvwtlpU/2BIDbWTZ7V4o1jFEw== } peerDependencies: next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 @@ -2375,26 +2804,28 @@ packages: optional: true next-themes@0.4.6: - resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + resolution: + { integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA== } peerDependencies: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc next@15.3.4: - resolution: {integrity: sha512-mHKd50C+mCjam/gcnwqL1T1vPx/XQNFlXqFIVdgQdVAFY9iIQtY0IfaVflEYzKiqjeA7B0cYYMaCrmAYFjs4rA==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + resolution: + { integrity: sha512-mHKd50C+mCjam/gcnwqL1T1vPx/XQNFlXqFIVdgQdVAFY9iIQtY0IfaVflEYzKiqjeA7B0cYYMaCrmAYFjs4rA== } + engines: { node: ^18.18.0 || ^19.8.0 || >= 20.0.0 } hasBin: true peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - babel-plugin-react-compiler: '*' + "@opentelemetry/api": ^1.1.0 + "@playwright/test": ^1.41.2 + babel-plugin-react-compiler: "*" react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 sass: ^1.3.0 peerDependenciesMeta: - '@opentelemetry/api': + "@opentelemetry/api": optional: true - '@playwright/test': + "@playwright/test": optional: true babel-plugin-react-compiler: optional: true @@ -2402,634 +2833,781 @@ packages: optional: true nookies@2.5.2: - resolution: {integrity: sha512-x0TRSaosAEonNKyCrShoUaJ5rrT5KHRNZ5DwPCuizjgrnkpE5DRf3VL7AyyQin4htict92X1EQ7ejDbaHDVdYA==} + resolution: + { integrity: sha512-x0TRSaosAEonNKyCrShoUaJ5rrT5KHRNZ5DwPCuizjgrnkpE5DRf3VL7AyyQin4htict92X1EQ7ejDbaHDVdYA== } object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + resolution: + { integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== } + engines: { node: ">=0.10.0" } object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== } + engines: { node: ">= 0.4" } object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== } + engines: { node: ">= 0.4" } object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== } + engines: { node: ">= 0.4" } object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== } + engines: { node: ">= 0.4" } object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== } + engines: { node: ">= 0.4" } object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== } + engines: { node: ">= 0.4" } object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== } + engines: { node: ">= 0.4" } optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + resolution: + { integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== } + engines: { node: ">= 0.8.0" } own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== } + engines: { node: ">= 0.4" } p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== } + engines: { node: ">=6" } p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== } + engines: { node: ">=10" } p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== } + engines: { node: ">=8" } p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== } + engines: { node: ">=10" } p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== } + engines: { node: ">=6" } pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + resolution: + { integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== } parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== } + engines: { node: ">=6" } path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== } + engines: { node: ">=8" } path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== } + engines: { node: ">=8" } path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + resolution: + { integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== } picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + resolution: + { integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== } picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + resolution: + { integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== } + engines: { node: ">=8.6" } picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} + resolution: + { integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== } + engines: { node: ">=12" } pngjs@5.0.0: - resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} - engines: {node: '>=10.13.0'} + resolution: + { integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== } + engines: { node: ">=10.13.0" } possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== } + engines: { node: ">= 0.4" } postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== } + engines: { node: ^10 || ^12 || >=14 } postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== } + engines: { node: ^10 || ^12 || >=14 } prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + resolution: + { integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== } + engines: { node: ">= 0.8.0" } prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} + resolution: + { integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== } + engines: { node: ">=6.0.0" } prettier-plugin-sort-json@4.1.1: - resolution: {integrity: sha512-uJ49wCzwJ/foKKV4tIPxqi4jFFvwUzw4oACMRG2dcmDhBKrxBv0L2wSKkAqHCmxKCvj0xcCZS4jO2kSJO/tRJw==} - engines: {node: '>=18.0.0'} + resolution: + { integrity: sha512-uJ49wCzwJ/foKKV4tIPxqi4jFFvwUzw4oACMRG2dcmDhBKrxBv0L2wSKkAqHCmxKCvj0xcCZS4jO2kSJO/tRJw== } + engines: { node: ">=18.0.0" } peerDependencies: prettier: ^3.0.0 prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} + resolution: + { integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== } + engines: { node: ">=14" } hasBin: true process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + resolution: + { integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== } prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + resolution: + { integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== } proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + resolution: + { integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== } punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== } + engines: { node: ">=6" } qrcode@1.5.4: - resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} - engines: {node: '>=10.13.0'} + resolution: + { integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg== } + engines: { node: ">=10.13.0" } hasBin: true queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + resolution: + { integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== } raf-schd@4.0.3: - resolution: {integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==} + resolution: + { integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== } react-country-flag@3.1.0: - resolution: {integrity: sha512-JWQFw1efdv9sTC+TGQvTKXQg1NKbDU2mBiAiRWcKM9F1sK+/zjhP2yGmm8YDddWyZdXVkR8Md47rPMJmo4YO5g==} - engines: {node: '>=12'} + resolution: + { integrity: sha512-JWQFw1efdv9sTC+TGQvTKXQg1NKbDU2mBiAiRWcKM9F1sK+/zjhP2yGmm8YDddWyZdXVkR8Md47rPMJmo4YO5g== } + engines: { node: ">=12" } peerDependencies: - react: '>=16' + react: ">=16" react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + resolution: + { integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g== } peerDependencies: react: ^19.1.0 react-dropzone@14.3.8: - resolution: {integrity: sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==} - engines: {node: '>= 10.13'} + resolution: + { integrity: sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug== } + engines: { node: ">= 10.13" } peerDependencies: - react: '>= 16.8 || 18.0.0' + react: ">= 16.8 || 18.0.0" react-hook-form@7.60.0: - resolution: {integrity: sha512-SBrYOvMbDB7cV8ZfNpaiLcgjH/a1c7aK0lK+aNigpf4xWLO8q+o4tcvVurv3c4EOyzn/3dCsYt4GKD42VvJ/+A==} - engines: {node: '>=18.0.0'} + resolution: + { integrity: sha512-SBrYOvMbDB7cV8ZfNpaiLcgjH/a1c7aK0lK+aNigpf4xWLO8q+o4tcvVurv3c4EOyzn/3dCsYt4GKD42VvJ/+A== } + engines: { node: ">=18.0.0" } peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 react-icons@5.5.0: - resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} + resolution: + { integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw== } peerDependencies: - react: '*' + react: "*" react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + resolution: + { integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== } react-qr-reader@3.0.0-beta-1: - resolution: {integrity: sha512-5HeFH9x/BlziRYQYGK2AeWS9WiKYZtGGMs9DXy3bcySTX3C9UJL9EwcPnWw8vlf7JP4FcrAlr1SnZ5nsWLQGyw==} + resolution: + { integrity: sha512-5HeFH9x/BlziRYQYGK2AeWS9WiKYZtGGMs9DXy3bcySTX3C9UJL9EwcPnWw8vlf7JP4FcrAlr1SnZ5nsWLQGyw== } peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 react-redux@9.2.0: - resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} + resolution: + { integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g== } peerDependencies: - '@types/react': ^18.2.25 || ^19 + "@types/react": ^18.2.25 || ^19 react: ^18.0 || ^19 redux: ^5.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true redux: optional: true react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q== } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true react-remove-scroll@2.7.1: - resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA== } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} - engines: {node: '>=0.10.0'} + resolution: + { integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== } + engines: { node: ">=0.10.0" } readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + resolution: + { integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== } redux@5.0.1: - resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + resolution: + { integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== } reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== } + engines: { node: ">= 0.4" } regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== } + engines: { node: ">= 0.4" } require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + resolution: + { integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== } + engines: { node: ">=0.10.0" } require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + resolution: + { integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== } resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== } + engines: { node: ">=4" } resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolution: + { integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== } resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== } + engines: { node: ">= 0.4" } hasBin: true resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + resolution: + { integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== } hasBin: true reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + resolution: + { integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } rollup@2.79.2: - resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} - engines: {node: '>=10.0.0'} + resolution: + { integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ== } + engines: { node: ">=10.0.0" } hasBin: true run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + resolution: + { integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== } safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} + resolution: + { integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== } + engines: { node: ">=0.4" } safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + resolution: + { integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== } safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== } + engines: { node: ">= 0.4" } safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== } + engines: { node: ">= 0.4" } scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + resolution: + { integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== } semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + resolution: + { integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== } hasBin: true semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== } + engines: { node: ">=10" } hasBin: true set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + resolution: + { integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== } set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + resolution: + { integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== } set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== } + engines: { node: ">= 0.4" } set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== } + engines: { node: ">= 0.4" } set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== } + engines: { node: ">= 0.4" } setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + resolution: + { integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== } sharp@0.34.2: - resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + resolution: + { integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== } + engines: { node: ">=8" } shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== } + engines: { node: ">=8" } side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== } + engines: { node: ">= 0.4" } side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== } + engines: { node: ">= 0.4" } side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== } + engines: { node: ">= 0.4" } side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== } + engines: { node: ">= 0.4" } simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + resolution: + { integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== } sonner@2.0.6: - resolution: {integrity: sha512-yHFhk8T/DK3YxjFQXIrcHT1rGEeTLliVzWbO0xN8GberVun2RiBnxAjXAYpZrqwEVHBG9asI/Li8TAAhN9m59Q==} + resolution: + { integrity: sha512-yHFhk8T/DK3YxjFQXIrcHT1rGEeTLliVzWbO0xN8GberVun2RiBnxAjXAYpZrqwEVHBG9asI/Li8TAAhN9m59Q== } peerDependencies: react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + resolution: + { integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== } + engines: { node: ">=0.10.0" } stable-hash@0.0.5: - resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + resolution: + { integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== } stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== } + engines: { node: ">= 0.4" } streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} + resolution: + { integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== } + engines: { node: ">=10.0.0" } string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== } + engines: { node: ">=8" } string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== } + engines: { node: ">= 0.4" } string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== } + engines: { node: ">= 0.4" } string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + resolution: + { integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== } string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== } + engines: { node: ">= 0.4" } string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== } + engines: { node: ">= 0.4" } string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== } + engines: { node: ">= 0.4" } string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + resolution: + { integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== } strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== } + engines: { node: ">=8" } strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== } + engines: { node: ">=4" } strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== } + engines: { node: ">=8" } styled-jsx@5.1.6: - resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} - engines: {node: '>= 12.0.0'} + resolution: + { integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA== } + engines: { node: ">= 12.0.0" } peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + "@babel/core": "*" + babel-plugin-macros: "*" + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" peerDependenciesMeta: - '@babel/core': + "@babel/core": optional: true babel-plugin-macros: optional: true supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== } + engines: { node: ">=8" } supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== } + engines: { node: ">= 0.4" } synckit@0.11.8: - resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} - engines: {node: ^14.18.0 || >=16.0.0} + resolution: + { integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A== } + engines: { node: ^14.18.0 || >=16.0.0 } tailwind-merge@3.3.1: - resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} + resolution: + { integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g== } tailwindcss@4.1.11: - resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} + resolution: + { integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA== } tapable@2.2.2: - resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== } + engines: { node: ">=6" } tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} + resolution: + { integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== } + engines: { node: ">=18" } tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + resolution: + { integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== } tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} - engines: {node: '>=12.0.0'} + resolution: + { integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== } + engines: { node: ">=12.0.0" } to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + resolution: + { integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== } + engines: { node: ">=8.0" } ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} + resolution: + { integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== } + engines: { node: ">=18.12" } peerDependencies: - typescript: '>=4.8.4' + typescript: ">=4.8.4" ts-custom-error@3.3.1: - resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==} - engines: {node: '>=14.0.0'} + resolution: + { integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A== } + engines: { node: ">=14.0.0" } tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + resolution: + { integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== } tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + resolution: + { integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== } tw-animate-css@1.3.5: - resolution: {integrity: sha512-t3u+0YNoloIhj1mMXs779P6MO9q3p3mvGn4k1n3nJPqJw/glZcuijG2qTSN4z4mgNRfW5ZC3aXJFLwDtiipZXA==} + resolution: + { integrity: sha512-t3u+0YNoloIhj1mMXs779P6MO9q3p3mvGn4k1n3nJPqJw/glZcuijG2qTSN4z4mgNRfW5ZC3aXJFLwDtiipZXA== } type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + resolution: + { integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== } + engines: { node: ">= 0.8.0" } typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== } + engines: { node: ">= 0.4" } typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== } + engines: { node: ">= 0.4" } typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== } + engines: { node: ">= 0.4" } typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== } + engines: { node: ">= 0.4" } typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} + resolution: + { integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== } + engines: { node: ">=14.17" } hasBin: true unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== } + engines: { node: ">= 0.4" } undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + resolution: + { integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== } unrs-resolver@1.11.0: - resolution: {integrity: sha512-uw3hCGO/RdAEAb4zgJ3C/v6KIAFFOtBoxR86b2Ejc5TnH7HrhTWJR2o0A9ullC3eWMegKQCw/arQ/JivywQzkg==} + resolution: + { integrity: sha512-uw3hCGO/RdAEAb4zgJ3C/v6KIAFFOtBoxR86b2Ejc5TnH7HrhTWJR2o0A9ullC3eWMegKQCw/arQ/JivywQzkg== } uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + resolution: + { integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== } use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg== } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true use-intl@4.3.4: - resolution: {integrity: sha512-sHfiU0QeJ1rirNWRxvCyvlSh9+NczcOzRnPyMeo2rtHXhVnBsvMRjE+UG4eh3lRhCxrvcqei/I0lBxsc59on1w==} + resolution: + { integrity: sha512-sHfiU0QeJ1rirNWRxvCyvlSh9+NczcOzRnPyMeo2rtHXhVnBsvMRjE+UG4eh3lRhCxrvcqei/I0lBxsc59on1w== } peerDependencies: react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== } + engines: { node: ">=10" } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true use-sync-external-store@1.5.0: - resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + resolution: + { integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + resolution: + { integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== } which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== } + engines: { node: ">= 0.4" } which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== } + engines: { node: ">= 0.4" } which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== } + engines: { node: ">= 0.4" } which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + resolution: + { integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== } which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== } + engines: { node: ">= 0.4" } which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + resolution: + { integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== } + engines: { node: ">= 8" } hasBin: true word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} + resolution: + { integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== } + engines: { node: ">=0.10.0" } wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== } + engines: { node: ">=8" } y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + resolution: + { integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== } yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} + resolution: + { integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== } + engines: { node: ">=18" } yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== } + engines: { node: ">=6" } yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== } + engines: { node: ">=8" } yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== } + engines: { node: ">=10" } zod@3.25.74: - resolution: {integrity: sha512-J8poo92VuhKjNknViHRAIuuN6li/EwFbAC8OedzI8uxpEPGiXHGQu9wemIAioIpqgfB4SySaJhdk0mH5Y4ICBg==} + resolution: + { integrity: sha512-J8poo92VuhKjNknViHRAIuuN6li/EwFbAC8OedzI8uxpEPGiXHGQu9wemIAioIpqgfB4SySaJhdk0mH5Y4ICBg== } zustand@5.0.6: - resolution: {integrity: sha512-ihAqNeUVhe0MAD+X8M5UzqyZ9k3FFZLBTtqo6JLPwV53cbRB/mJwBI0PxcIgqhBBHlEs8G45OTDTMq3gNcLq3A==} - engines: {node: '>=12.20.0'} + resolution: + { integrity: sha512-ihAqNeUVhe0MAD+X8M5UzqyZ9k3FFZLBTtqo6JLPwV53cbRB/mJwBI0PxcIgqhBBHlEs8G45OTDTMq3gNcLq3A== } + engines: { node: ">=12.20.0" } peerDependencies: - '@types/react': '>=18.0.0' - immer: '>=9.0.6' - react: '>=18.0.0' - use-sync-external-store: '>=1.2.0' + "@types/react": ">=18.0.0" + immer: ">=9.0.6" + react: ">=18.0.0" + use-sync-external-store: ">=1.2.0" peerDependenciesMeta: - '@types/react': + "@types/react": optional: true immer: optional: true @@ -3039,105 +3617,104 @@ packages: optional: true snapshots: + "@alloc/quick-lru@5.2.0": {} - '@alloc/quick-lru@5.2.0': {} - - '@ampproject/remapping@2.3.0': + "@ampproject/remapping@2.3.0": dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + "@jridgewell/gen-mapping": 0.3.12 + "@jridgewell/trace-mapping": 0.3.29 - '@babel/code-frame@7.27.1': + "@babel/code-frame@7.27.1": dependencies: - '@babel/helper-validator-identifier': 7.27.1 + "@babel/helper-validator-identifier": 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/generator@7.28.0': + "@babel/generator@7.28.0": dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + "@babel/parser": 7.28.0 + "@babel/types": 7.28.0 + "@jridgewell/gen-mapping": 0.3.12 + "@jridgewell/trace-mapping": 0.3.29 jsesc: 3.1.0 - '@babel/helper-globals@7.28.0': {} + "@babel/helper-globals@7.28.0": {} - '@babel/helper-string-parser@7.27.1': {} + "@babel/helper-string-parser@7.27.1": {} - '@babel/helper-validator-identifier@7.27.1': {} + "@babel/helper-validator-identifier@7.27.1": {} - '@babel/parser@7.28.0': + "@babel/parser@7.28.0": dependencies: - '@babel/types': 7.28.0 + "@babel/types": 7.28.0 - '@babel/runtime@7.27.6': {} + "@babel/runtime@7.27.6": {} - '@babel/template@7.27.2': + "@babel/template@7.27.2": dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + "@babel/code-frame": 7.27.1 + "@babel/parser": 7.28.0 + "@babel/types": 7.28.0 - '@babel/traverse@7.28.0': + "@babel/traverse@7.28.0": dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/template': 7.27.2 - '@babel/types': 7.28.0 + "@babel/code-frame": 7.27.1 + "@babel/generator": 7.28.0 + "@babel/helper-globals": 7.28.0 + "@babel/parser": 7.28.0 + "@babel/template": 7.27.2 + "@babel/types": 7.28.0 debug: 4.4.1 transitivePeerDependencies: - supports-color - '@babel/types@7.28.0': + "@babel/types@7.28.0": dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + "@babel/helper-string-parser": 7.27.1 + "@babel/helper-validator-identifier": 7.27.1 - '@emnapi/core@1.4.3': + "@emnapi/core@1.4.3": dependencies: - '@emnapi/wasi-threads': 1.0.2 + "@emnapi/wasi-threads": 1.0.2 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': + "@emnapi/runtime@1.4.3": dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.2': + "@emnapi/wasi-threads@1.0.2": dependencies: tslib: 2.8.1 optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.30.0(jiti@2.4.2))': + "@eslint-community/eslint-utils@4.7.0(eslint@9.30.0(jiti@2.4.2))": dependencies: eslint: 9.30.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + "@eslint-community/regexpp@4.12.1": {} - '@eslint/config-array@0.21.0': + "@eslint/config-array@0.21.0": dependencies: - '@eslint/object-schema': 2.1.6 + "@eslint/object-schema": 2.1.6 debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.0': {} + "@eslint/config-helpers@0.3.0": {} - '@eslint/core@0.14.0': + "@eslint/core@0.14.0": dependencies: - '@types/json-schema': 7.0.15 + "@types/json-schema": 7.0.15 - '@eslint/core@0.15.1': + "@eslint/core@0.15.1": dependencies: - '@types/json-schema': 7.0.15 + "@types/json-schema": 7.0.15 - '@eslint/eslintrc@3.3.1': + "@eslint/eslintrc@3.3.1": dependencies: ajv: 6.12.6 debug: 4.4.1 @@ -3151,65 +3728,65 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.30.0': {} + "@eslint/js@9.30.0": {} - '@eslint/object-schema@2.1.6': {} + "@eslint/object-schema@2.1.6": {} - '@eslint/plugin-kit@0.3.3': + "@eslint/plugin-kit@0.3.3": dependencies: - '@eslint/core': 0.15.1 + "@eslint/core": 0.15.1 levn: 0.4.1 - '@floating-ui/core@1.7.2': + "@floating-ui/core@1.7.2": dependencies: - '@floating-ui/utils': 0.2.10 + "@floating-ui/utils": 0.2.10 - '@floating-ui/dom@1.7.2': + "@floating-ui/dom@1.7.2": dependencies: - '@floating-ui/core': 1.7.2 - '@floating-ui/utils': 0.2.10 + "@floating-ui/core": 1.7.2 + "@floating-ui/utils": 0.2.10 - '@floating-ui/react-dom@2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@floating-ui/react-dom@2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@floating-ui/dom': 1.7.2 + "@floating-ui/dom": 1.7.2 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@floating-ui/utils@0.2.10': {} + "@floating-ui/utils@0.2.10": {} - '@formatjs/ecma402-abstract@2.3.4': + "@formatjs/ecma402-abstract@2.3.4": dependencies: - '@formatjs/fast-memoize': 2.2.7 - '@formatjs/intl-localematcher': 0.6.1 + "@formatjs/fast-memoize": 2.2.7 + "@formatjs/intl-localematcher": 0.6.1 decimal.js: 10.6.0 tslib: 2.8.1 - '@formatjs/fast-memoize@2.2.7': + "@formatjs/fast-memoize@2.2.7": dependencies: tslib: 2.8.1 - '@formatjs/icu-messageformat-parser@2.11.2': + "@formatjs/icu-messageformat-parser@2.11.2": dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - '@formatjs/icu-skeleton-parser': 1.8.14 + "@formatjs/ecma402-abstract": 2.3.4 + "@formatjs/icu-skeleton-parser": 1.8.14 tslib: 2.8.1 - '@formatjs/icu-skeleton-parser@1.8.14': + "@formatjs/icu-skeleton-parser@1.8.14": dependencies: - '@formatjs/ecma402-abstract': 2.3.4 + "@formatjs/ecma402-abstract": 2.3.4 tslib: 2.8.1 - '@formatjs/intl-localematcher@0.5.10': + "@formatjs/intl-localematcher@0.5.10": dependencies: tslib: 2.8.1 - '@formatjs/intl-localematcher@0.6.1': + "@formatjs/intl-localematcher@0.6.1": dependencies: tslib: 2.8.1 - '@hello-pangea/dnd@18.0.1(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@hello-pangea/dnd@18.0.1(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@babel/runtime': 7.27.6 + "@babel/runtime": 7.27.6 css-box-model: 1.2.1 raf-schd: 4.0.3 react: 19.1.0 @@ -3217,661 +3794,661 @@ snapshots: react-redux: 9.2.0(@types/react@19.1.8)(react@19.1.0)(redux@5.0.1) redux: 5.0.1 transitivePeerDependencies: - - '@types/react' + - "@types/react" - '@hookform/resolvers@5.1.1(react-hook-form@7.60.0(react@19.1.0))': + "@hookform/resolvers@5.1.1(react-hook-form@7.60.0(react@19.1.0))": dependencies: - '@standard-schema/utils': 0.3.0 + "@standard-schema/utils": 0.3.0 react-hook-form: 7.60.0(react@19.1.0) - '@humanfs/core@0.19.1': {} + "@humanfs/core@0.19.1": {} - '@humanfs/node@0.16.6': + "@humanfs/node@0.16.6": dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + "@humanfs/core": 0.19.1 + "@humanwhocodes/retry": 0.3.1 - '@humanwhocodes/module-importer@1.0.1': {} + "@humanwhocodes/module-importer@1.0.1": {} - '@humanwhocodes/retry@0.3.1': {} + "@humanwhocodes/retry@0.3.1": {} - '@humanwhocodes/retry@0.4.3': {} + "@humanwhocodes/retry@0.4.3": {} - '@ianvs/prettier-plugin-sort-imports@4.4.2(prettier@3.6.2)': + "@ianvs/prettier-plugin-sort-imports@4.4.2(prettier@3.6.2)": dependencies: - '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + "@babel/generator": 7.28.0 + "@babel/parser": 7.28.0 + "@babel/traverse": 7.28.0 + "@babel/types": 7.28.0 prettier: 3.6.2 semver: 7.7.2 transitivePeerDependencies: - supports-color - '@img/sharp-darwin-arm64@0.34.2': + "@img/sharp-darwin-arm64@0.34.2": optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.1.0 + "@img/sharp-libvips-darwin-arm64": 1.1.0 optional: true - '@img/sharp-darwin-x64@0.34.2': + "@img/sharp-darwin-x64@0.34.2": optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.1.0 + "@img/sharp-libvips-darwin-x64": 1.1.0 optional: true - '@img/sharp-libvips-darwin-arm64@1.1.0': + "@img/sharp-libvips-darwin-arm64@1.1.0": optional: true - '@img/sharp-libvips-darwin-x64@1.1.0': + "@img/sharp-libvips-darwin-x64@1.1.0": optional: true - '@img/sharp-libvips-linux-arm64@1.1.0': + "@img/sharp-libvips-linux-arm64@1.1.0": optional: true - '@img/sharp-libvips-linux-arm@1.1.0': + "@img/sharp-libvips-linux-arm@1.1.0": optional: true - '@img/sharp-libvips-linux-ppc64@1.1.0': + "@img/sharp-libvips-linux-ppc64@1.1.0": optional: true - '@img/sharp-libvips-linux-s390x@1.1.0': + "@img/sharp-libvips-linux-s390x@1.1.0": optional: true - '@img/sharp-libvips-linux-x64@1.1.0': + "@img/sharp-libvips-linux-x64@1.1.0": optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + "@img/sharp-libvips-linuxmusl-arm64@1.1.0": optional: true - '@img/sharp-libvips-linuxmusl-x64@1.1.0': + "@img/sharp-libvips-linuxmusl-x64@1.1.0": optional: true - '@img/sharp-linux-arm64@0.34.2': + "@img/sharp-linux-arm64@0.34.2": optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.1.0 + "@img/sharp-libvips-linux-arm64": 1.1.0 optional: true - '@img/sharp-linux-arm@0.34.2': + "@img/sharp-linux-arm@0.34.2": optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.1.0 + "@img/sharp-libvips-linux-arm": 1.1.0 optional: true - '@img/sharp-linux-s390x@0.34.2': + "@img/sharp-linux-s390x@0.34.2": optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.1.0 + "@img/sharp-libvips-linux-s390x": 1.1.0 optional: true - '@img/sharp-linux-x64@0.34.2': + "@img/sharp-linux-x64@0.34.2": optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.1.0 + "@img/sharp-libvips-linux-x64": 1.1.0 optional: true - '@img/sharp-linuxmusl-arm64@0.34.2': + "@img/sharp-linuxmusl-arm64@0.34.2": optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + "@img/sharp-libvips-linuxmusl-arm64": 1.1.0 optional: true - '@img/sharp-linuxmusl-x64@0.34.2': + "@img/sharp-linuxmusl-x64@0.34.2": optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + "@img/sharp-libvips-linuxmusl-x64": 1.1.0 optional: true - '@img/sharp-wasm32@0.34.2': + "@img/sharp-wasm32@0.34.2": dependencies: - '@emnapi/runtime': 1.4.3 + "@emnapi/runtime": 1.4.3 optional: true - '@img/sharp-win32-arm64@0.34.2': + "@img/sharp-win32-arm64@0.34.2": optional: true - '@img/sharp-win32-ia32@0.34.2': + "@img/sharp-win32-ia32@0.34.2": optional: true - '@img/sharp-win32-x64@0.34.2': + "@img/sharp-win32-x64@0.34.2": optional: true - '@isaacs/fs-minipass@4.0.1': + "@isaacs/fs-minipass@4.0.1": dependencies: minipass: 7.1.2 - '@jridgewell/gen-mapping@0.3.12': + "@jridgewell/gen-mapping@0.3.12": dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + "@jridgewell/sourcemap-codec": 1.5.4 + "@jridgewell/trace-mapping": 0.3.29 - '@jridgewell/resolve-uri@3.1.2': {} + "@jridgewell/resolve-uri@3.1.2": {} - '@jridgewell/sourcemap-codec@1.5.4': {} + "@jridgewell/sourcemap-codec@1.5.4": {} - '@jridgewell/trace-mapping@0.3.29': + "@jridgewell/trace-mapping@0.3.29": dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.4 - '@napi-rs/wasm-runtime@0.2.11': + "@napi-rs/wasm-runtime@0.2.11": dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 + "@emnapi/core": 1.4.3 + "@emnapi/runtime": 1.4.3 + "@tybys/wasm-util": 0.9.0 optional: true - '@next/env@15.3.4': {} + "@next/env@15.3.4": {} - '@next/eslint-plugin-next@15.3.4': + "@next/eslint-plugin-next@15.3.4": dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.3.4': + "@next/swc-darwin-arm64@15.3.4": optional: true - '@next/swc-darwin-x64@15.3.4': + "@next/swc-darwin-x64@15.3.4": optional: true - '@next/swc-linux-arm64-gnu@15.3.4': + "@next/swc-linux-arm64-gnu@15.3.4": optional: true - '@next/swc-linux-arm64-musl@15.3.4': + "@next/swc-linux-arm64-musl@15.3.4": optional: true - '@next/swc-linux-x64-gnu@15.3.4': + "@next/swc-linux-x64-gnu@15.3.4": optional: true - '@next/swc-linux-x64-musl@15.3.4': + "@next/swc-linux-x64-musl@15.3.4": optional: true - '@next/swc-win32-arm64-msvc@15.3.4': + "@next/swc-win32-arm64-msvc@15.3.4": optional: true - '@next/swc-win32-x64-msvc@15.3.4': + "@next/swc-win32-x64-msvc@15.3.4": optional: true - '@nodelib/fs.scandir@2.1.5': + "@nodelib/fs.scandir@2.1.5": dependencies: - '@nodelib/fs.stat': 2.0.5 + "@nodelib/fs.stat": 2.0.5 run-parallel: 1.2.0 - '@nodelib/fs.stat@2.0.5': {} + "@nodelib/fs.stat@2.0.5": {} - '@nodelib/fs.walk@1.2.8': + "@nodelib/fs.walk@1.2.8": dependencies: - '@nodelib/fs.scandir': 2.1.5 + "@nodelib/fs.scandir": 2.1.5 fastq: 1.19.1 - '@nolyfill/is-core-module@1.0.39': {} + "@nolyfill/is-core-module@1.0.39": {} - '@pkgr/core@0.2.7': {} + "@pkgr/core@0.2.7": {} - '@radix-ui/number@1.1.1': {} + "@radix-ui/number@1.1.1": {} - '@radix-ui/primitive@1.1.2': {} + "@radix-ui/primitive@1.1.2": {} - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-is-hydrated": 0.1.0(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-checkbox@1.3.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-checkbox@1.3.2(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-presence": 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-slot": 1.2.3(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.8)(react@19.1.0)": dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-context@1.1.2(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-context@1.1.2(@types/react@19.1.8)(react@19.1.0)": dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-dismissable-layer": 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-focus-guards": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-presence": 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-slot": 1.2.3(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.1.8)(react@19.1.0) aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-direction@1.1.1(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-direction@1.1.1(@types/react@19.1.8)(react@19.1.0)": dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-escape-keydown": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-menu": 2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.8)(react@19.1.0)": dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-id@1.1.1(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-id@1.1.1(@types/react@19.1.8)(react@19.1.0)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-label@2.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-menu@2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-menu@2.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-dismissable-layer": 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-focus-guards": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-popper": 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-presence": 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-roving-focus": 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-slot": 1.2.3(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.8)(react@19.1.0) aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@floating-ui/react-dom': 2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/rect': 1.1.1 + "@floating-ui/react-dom": 2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-arrow": 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-rect": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/rect": 1.1.1 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-slot": 1.2.3(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-progress@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-progress@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-scroll-area@1.2.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-scroll-area@1.2.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-presence": 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-select@2.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-dismissable-layer": 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-focus-guards": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-popper": 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-slot": 1.2.3(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-visually-hidden": 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-slider@1.3.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-slider@1.3.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-slot@1.2.3(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-slot@1.2.3(@types/react@19.1.8)(react@19.1.0)": dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-switch@1.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-switch@1.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-tabs@1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-tabs@1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-context": 1.1.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-presence": 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-roving-focus": 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.8)(react@19.1.0)": dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.8)(react@19.1.0)": dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-effect-event": 0.0.2(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.8)(react@19.1.0)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.8)(react@19.1.0)": dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.8)(react@19.1.0)": dependencies: react: 19.1.0 use-sync-external-store: 1.5.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.8)(react@19.1.0)": dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-use-previous@1.1.1(@types/react@19.1.8)(react@19.1.0)": dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-use-rect@1.1.1(@types/react@19.1.8)(react@19.1.0)": dependencies: - '@radix-ui/rect': 1.1.1 + "@radix-ui/rect": 1.1.1 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.8)(react@19.1.0)': + "@radix-ui/react-use-size@1.1.1(@types/react@19.1.8)(react@19.1.0)": dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.8)(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + "@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + "@types/react": 19.1.8 + "@types/react-dom": 19.1.6(@types/react@19.1.8) - '@radix-ui/rect@1.1.1': {} + "@radix-ui/rect@1.1.1": {} - '@rtsao/scc@1.1.0': {} + "@rtsao/scc@1.1.0": {} - '@rushstack/eslint-patch@1.12.0': {} + "@rushstack/eslint-patch@1.12.0": {} - '@schummar/icu-type-parser@1.21.5': {} + "@schummar/icu-type-parser@1.21.5": {} - '@standard-schema/utils@0.3.0': {} + "@standard-schema/utils@0.3.0": {} - '@swc/counter@0.1.3': {} + "@swc/counter@0.1.3": {} - '@swc/helpers@0.5.15': + "@swc/helpers@0.5.15": dependencies: tslib: 2.8.1 - '@tabler/icons-react@3.34.0(react@19.1.0)': + "@tabler/icons-react@3.34.0(react@19.1.0)": dependencies: - '@tabler/icons': 3.34.0 + "@tabler/icons": 3.34.0 react: 19.1.0 - '@tabler/icons@3.34.0': {} + "@tabler/icons@3.34.0": {} - '@tailwindcss/node@4.1.11': + "@tailwindcss/node@4.1.11": dependencies: - '@ampproject/remapping': 2.3.0 + "@ampproject/remapping": 2.3.0 enhanced-resolve: 5.18.2 jiti: 2.4.2 lightningcss: 1.30.1 @@ -3879,113 +4456,113 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.1.11 - '@tailwindcss/oxide-android-arm64@4.1.11': + "@tailwindcss/oxide-android-arm64@4.1.11": optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.11': + "@tailwindcss/oxide-darwin-arm64@4.1.11": optional: true - '@tailwindcss/oxide-darwin-x64@4.1.11': + "@tailwindcss/oxide-darwin-x64@4.1.11": optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.11': + "@tailwindcss/oxide-freebsd-x64@4.1.11": optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11": optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + "@tailwindcss/oxide-linux-arm64-gnu@4.1.11": optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + "@tailwindcss/oxide-linux-arm64-musl@4.1.11": optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + "@tailwindcss/oxide-linux-x64-gnu@4.1.11": optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.11': + "@tailwindcss/oxide-linux-x64-musl@4.1.11": optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.11': + "@tailwindcss/oxide-wasm32-wasi@4.1.11": optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + "@tailwindcss/oxide-win32-arm64-msvc@4.1.11": optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + "@tailwindcss/oxide-win32-x64-msvc@4.1.11": optional: true - '@tailwindcss/oxide@4.1.11': + "@tailwindcss/oxide@4.1.11": dependencies: detect-libc: 2.0.4 tar: 7.4.3 optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.11 - '@tailwindcss/oxide-darwin-arm64': 4.1.11 - '@tailwindcss/oxide-darwin-x64': 4.1.11 - '@tailwindcss/oxide-freebsd-x64': 4.1.11 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.11 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.11 - '@tailwindcss/oxide-linux-x64-musl': 4.1.11 - '@tailwindcss/oxide-wasm32-wasi': 4.1.11 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 + "@tailwindcss/oxide-android-arm64": 4.1.11 + "@tailwindcss/oxide-darwin-arm64": 4.1.11 + "@tailwindcss/oxide-darwin-x64": 4.1.11 + "@tailwindcss/oxide-freebsd-x64": 4.1.11 + "@tailwindcss/oxide-linux-arm-gnueabihf": 4.1.11 + "@tailwindcss/oxide-linux-arm64-gnu": 4.1.11 + "@tailwindcss/oxide-linux-arm64-musl": 4.1.11 + "@tailwindcss/oxide-linux-x64-gnu": 4.1.11 + "@tailwindcss/oxide-linux-x64-musl": 4.1.11 + "@tailwindcss/oxide-wasm32-wasi": 4.1.11 + "@tailwindcss/oxide-win32-arm64-msvc": 4.1.11 + "@tailwindcss/oxide-win32-x64-msvc": 4.1.11 - '@tailwindcss/postcss@4.1.11': + "@tailwindcss/postcss@4.1.11": dependencies: - '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.11 - '@tailwindcss/oxide': 4.1.11 + "@alloc/quick-lru": 5.2.0 + "@tailwindcss/node": 4.1.11 + "@tailwindcss/oxide": 4.1.11 postcss: 8.5.6 tailwindcss: 4.1.11 - '@tybys/wasm-util@0.9.0': + "@tybys/wasm-util@0.9.0": dependencies: tslib: 2.8.1 optional: true - '@types/estree@1.0.8': {} + "@types/estree@1.0.8": {} - '@types/js-cookie@3.0.6': {} + "@types/js-cookie@3.0.6": {} - '@types/json-schema@7.0.15': {} + "@types/json-schema@7.0.15": {} - '@types/json5@0.0.29': {} + "@types/json5@0.0.29": {} - '@types/node@22.14.0': + "@types/node@22.14.0": dependencies: undici-types: 6.21.0 - '@types/qrcode@1.5.5': + "@types/qrcode@1.5.5": dependencies: - '@types/node': 22.14.0 + "@types/node": 22.14.0 - '@types/react-dom@19.1.6(@types/react@19.1.8)': + "@types/react-dom@19.1.6(@types/react@19.1.8)": dependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 - '@types/react-dropzone@5.1.0(react@19.1.0)': + "@types/react-dropzone@5.1.0(react@19.1.0)": dependencies: react-dropzone: 14.3.8(react@19.1.0) transitivePeerDependencies: - react - '@types/react@19.1.8': + "@types/react@19.1.8": dependencies: csstype: 3.1.3 - '@types/use-sync-external-store@0.0.6': {} + "@types/use-sync-external-store@0.0.6": {} - '@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': + "@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)": dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.35.1 - '@typescript-eslint/type-utils': 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.35.1 + "@eslint-community/regexpp": 4.12.1 + "@typescript-eslint/parser": 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + "@typescript-eslint/scope-manager": 8.35.1 + "@typescript-eslint/type-utils": 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + "@typescript-eslint/utils": 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + "@typescript-eslint/visitor-keys": 8.35.1 eslint: 9.30.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 @@ -3995,40 +4572,40 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': + "@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)": dependencies: - '@typescript-eslint/scope-manager': 8.35.1 - '@typescript-eslint/types': 8.35.1 - '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.35.1 + "@typescript-eslint/scope-manager": 8.35.1 + "@typescript-eslint/types": 8.35.1 + "@typescript-eslint/typescript-estree": 8.35.1(typescript@5.8.3) + "@typescript-eslint/visitor-keys": 8.35.1 debug: 4.4.1 eslint: 9.30.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.35.1(typescript@5.8.3)': + "@typescript-eslint/project-service@8.35.1(typescript@5.8.3)": dependencies: - '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) - '@typescript-eslint/types': 8.35.1 + "@typescript-eslint/tsconfig-utils": 8.35.1(typescript@5.8.3) + "@typescript-eslint/types": 8.35.1 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.35.1': + "@typescript-eslint/scope-manager@8.35.1": dependencies: - '@typescript-eslint/types': 8.35.1 - '@typescript-eslint/visitor-keys': 8.35.1 + "@typescript-eslint/types": 8.35.1 + "@typescript-eslint/visitor-keys": 8.35.1 - '@typescript-eslint/tsconfig-utils@8.35.1(typescript@5.8.3)': + "@typescript-eslint/tsconfig-utils@8.35.1(typescript@5.8.3)": dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': + "@typescript-eslint/type-utils@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)": dependencies: - '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + "@typescript-eslint/typescript-estree": 8.35.1(typescript@5.8.3) + "@typescript-eslint/utils": 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1 eslint: 9.30.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) @@ -4036,14 +4613,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.35.1': {} + "@typescript-eslint/types@8.35.1": {} - '@typescript-eslint/typescript-estree@8.35.1(typescript@5.8.3)': + "@typescript-eslint/typescript-estree@8.35.1(typescript@5.8.3)": dependencies: - '@typescript-eslint/project-service': 8.35.1(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) - '@typescript-eslint/types': 8.35.1 - '@typescript-eslint/visitor-keys': 8.35.1 + "@typescript-eslint/project-service": 8.35.1(typescript@5.8.3) + "@typescript-eslint/tsconfig-utils": 8.35.1(typescript@5.8.3) + "@typescript-eslint/types": 8.35.1 + "@typescript-eslint/visitor-keys": 8.35.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -4054,94 +4631,94 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': + "@typescript-eslint/utils@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)": dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.35.1 - '@typescript-eslint/types': 8.35.1 - '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) + "@eslint-community/eslint-utils": 4.7.0(eslint@9.30.0(jiti@2.4.2)) + "@typescript-eslint/scope-manager": 8.35.1 + "@typescript-eslint/types": 8.35.1 + "@typescript-eslint/typescript-estree": 8.35.1(typescript@5.8.3) eslint: 9.30.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.35.1': + "@typescript-eslint/visitor-keys@8.35.1": dependencies: - '@typescript-eslint/types': 8.35.1 + "@typescript-eslint/types": 8.35.1 eslint-visitor-keys: 4.2.1 - '@unrs/resolver-binding-android-arm-eabi@1.11.0': + "@unrs/resolver-binding-android-arm-eabi@1.11.0": optional: true - '@unrs/resolver-binding-android-arm64@1.11.0': + "@unrs/resolver-binding-android-arm64@1.11.0": optional: true - '@unrs/resolver-binding-darwin-arm64@1.11.0': + "@unrs/resolver-binding-darwin-arm64@1.11.0": optional: true - '@unrs/resolver-binding-darwin-x64@1.11.0': + "@unrs/resolver-binding-darwin-x64@1.11.0": optional: true - '@unrs/resolver-binding-freebsd-x64@1.11.0': + "@unrs/resolver-binding-freebsd-x64@1.11.0": optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.0': + "@unrs/resolver-binding-linux-arm-gnueabihf@1.11.0": optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.0': + "@unrs/resolver-binding-linux-arm-musleabihf@1.11.0": optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.11.0': + "@unrs/resolver-binding-linux-arm64-gnu@1.11.0": optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.11.0': + "@unrs/resolver-binding-linux-arm64-musl@1.11.0": optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.0': + "@unrs/resolver-binding-linux-ppc64-gnu@1.11.0": optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.0': + "@unrs/resolver-binding-linux-riscv64-gnu@1.11.0": optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.11.0': + "@unrs/resolver-binding-linux-riscv64-musl@1.11.0": optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.11.0': + "@unrs/resolver-binding-linux-s390x-gnu@1.11.0": optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.11.0': + "@unrs/resolver-binding-linux-x64-gnu@1.11.0": optional: true - '@unrs/resolver-binding-linux-x64-musl@1.11.0': + "@unrs/resolver-binding-linux-x64-musl@1.11.0": optional: true - '@unrs/resolver-binding-wasm32-wasi@1.11.0': + "@unrs/resolver-binding-wasm32-wasi@1.11.0": dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + "@napi-rs/wasm-runtime": 0.2.11 optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.11.0': + "@unrs/resolver-binding-win32-arm64-msvc@1.11.0": optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.11.0': + "@unrs/resolver-binding-win32-ia32-msvc@1.11.0": optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.11.0': + "@unrs/resolver-binding-win32-x64-msvc@1.11.0": optional: true - '@zxing/browser@0.0.7(@zxing/library@0.18.6)': + "@zxing/browser@0.0.7(@zxing/library@0.18.6)": dependencies: - '@zxing/library': 0.18.6 + "@zxing/library": 0.18.6 optionalDependencies: - '@zxing/text-encoding': 0.9.0 + "@zxing/text-encoding": 0.9.0 - '@zxing/library@0.18.6': + "@zxing/library@0.18.6": dependencies: ts-custom-error: 3.3.1 optionalDependencies: - '@zxing/text-encoding': 0.9.0 + "@zxing/text-encoding": 0.9.0 - '@zxing/text-encoding@0.9.0': + "@zxing/text-encoding@0.9.0": optional: true acorn-jsx@5.3.2(acorn@8.15.0): @@ -4545,10 +5122,10 @@ snapshots: eslint-config-next@15.3.4(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@next/eslint-plugin-next': 15.3.4 - '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + "@next/eslint-plugin-next": 15.3.4 + "@rushstack/eslint-patch": 1.12.0 + "@typescript-eslint/eslint-plugin": 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + "@typescript-eslint/parser": 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.30.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.0(jiti@2.4.2)) @@ -4577,7 +5154,7 @@ snapshots: eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.0(jiti@2.4.2)): dependencies: - '@nolyfill/is-core-module': 1.0.39 + "@nolyfill/is-core-module": 1.0.39 debug: 4.4.1 eslint: 9.30.0(jiti@2.4.2) get-tsconfig: 4.10.1 @@ -4594,7 +5171,7 @@ snapshots: dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + "@typescript-eslint/parser": 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.30.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.0(jiti@2.4.2)) @@ -4603,7 +5180,7 @@ snapshots: eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0(jiti@2.4.2)): dependencies: - '@rtsao/scc': 1.1.0 + "@rtsao/scc": 1.1.0 array-includes: 3.1.9 array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 @@ -4624,7 +5201,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + "@typescript-eslint/parser": 8.35.1(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -4695,19 +5272,19 @@ snapshots: eslint@9.30.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.14.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.30.0 - '@eslint/plugin-kit': 0.3.3 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 + "@eslint-community/eslint-utils": 4.7.0(eslint@9.30.0(jiti@2.4.2)) + "@eslint-community/regexpp": 4.12.1 + "@eslint/config-array": 0.21.0 + "@eslint/config-helpers": 0.3.0 + "@eslint/core": 0.14.0 + "@eslint/eslintrc": 3.3.1 + "@eslint/js": 9.30.0 + "@eslint/plugin-kit": 0.3.3 + "@humanfs/node": 0.16.6 + "@humanwhocodes/module-importer": 1.0.1 + "@humanwhocodes/retry": 0.4.3 + "@types/estree": 1.0.8 + "@types/json-schema": 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -4759,16 +5336,16 @@ snapshots: fast-glob@3.3.1: dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 fast-glob@3.3.3: dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 @@ -4956,9 +5533,9 @@ snapshots: intl-messageformat@10.7.16: dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.2 + "@formatjs/ecma402-abstract": 2.3.4 + "@formatjs/fast-memoize": 2.2.7 + "@formatjs/icu-messageformat-parser": 2.11.2 tslib: 2.8.1 is-array-buffer@3.0.5: @@ -5212,7 +5789,7 @@ snapshots: magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + "@jridgewell/sourcemap-codec": 1.5.4 math-intrinsics@1.1.0: {} @@ -5267,7 +5844,7 @@ snapshots: next-intl@4.3.4(next@15.3.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: - '@formatjs/intl-localematcher': 0.5.10 + "@formatjs/intl-localematcher": 0.5.10 negotiator: 1.0.0 next: 15.3.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 @@ -5282,9 +5859,9 @@ snapshots: next@15.3.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@next/env': 15.3.4 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 + "@next/env": 15.3.4 + "@swc/counter": 0.1.3 + "@swc/helpers": 0.5.15 busboy: 1.6.0 caniuse-lite: 1.0.30001727 postcss: 8.4.31 @@ -5292,17 +5869,17 @@ snapshots: react-dom: 19.1.0(react@19.1.0) styled-jsx: 5.1.6(react@19.1.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.3.4 - '@next/swc-darwin-x64': 15.3.4 - '@next/swc-linux-arm64-gnu': 15.3.4 - '@next/swc-linux-arm64-musl': 15.3.4 - '@next/swc-linux-x64-gnu': 15.3.4 - '@next/swc-linux-x64-musl': 15.3.4 - '@next/swc-win32-arm64-msvc': 15.3.4 - '@next/swc-win32-x64-msvc': 15.3.4 + "@next/swc-darwin-arm64": 15.3.4 + "@next/swc-darwin-x64": 15.3.4 + "@next/swc-linux-arm64-gnu": 15.3.4 + "@next/swc-linux-arm64-musl": 15.3.4 + "@next/swc-linux-x64-gnu": 15.3.4 + "@next/swc-linux-x64-musl": 15.3.4 + "@next/swc-win32-arm64-msvc": 15.3.4 + "@next/swc-win32-x64-msvc": 15.3.4 sharp: 0.34.2 transitivePeerDependencies: - - '@babel/core' + - "@babel/core" - babel-plugin-macros nookies@2.5.2: @@ -5481,19 +6058,19 @@ snapshots: react-qr-reader@3.0.0-beta-1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@zxing/browser': 0.0.7(@zxing/library@0.18.6) - '@zxing/library': 0.18.6 + "@zxing/browser": 0.0.7(@zxing/library@0.18.6) + "@zxing/library": 0.18.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) rollup: 2.79.2 react-redux@9.2.0(@types/react@19.1.8)(react@19.1.0)(redux@5.0.1): dependencies: - '@types/use-sync-external-store': 0.0.6 + "@types/use-sync-external-store": 0.0.6 react: 19.1.0 use-sync-external-store: 1.5.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 redux: 5.0.1 react-remove-scroll-bar@2.3.8(@types/react@19.1.8)(react@19.1.0): @@ -5502,7 +6079,7 @@ snapshots: react-style-singleton: 2.2.3(@types/react@19.1.8)(react@19.1.0) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 react-remove-scroll@2.7.1(@types/react@19.1.8)(react@19.1.0): dependencies: @@ -5513,7 +6090,7 @@ snapshots: use-callback-ref: 1.3.3(@types/react@19.1.8)(react@19.1.0) use-sidecar: 1.1.3(@types/react@19.1.8)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 react-style-singleton@2.2.3(@types/react@19.1.8)(react@19.1.0): dependencies: @@ -5521,7 +6098,7 @@ snapshots: react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 react@19.1.0: {} @@ -5648,27 +6225,27 @@ snapshots: detect-libc: 2.0.4 semver: 7.7.2 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.2 - '@img/sharp-darwin-x64': 0.34.2 - '@img/sharp-libvips-darwin-arm64': 1.1.0 - '@img/sharp-libvips-darwin-x64': 1.1.0 - '@img/sharp-libvips-linux-arm': 1.1.0 - '@img/sharp-libvips-linux-arm64': 1.1.0 - '@img/sharp-libvips-linux-ppc64': 1.1.0 - '@img/sharp-libvips-linux-s390x': 1.1.0 - '@img/sharp-libvips-linux-x64': 1.1.0 - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 - '@img/sharp-linux-arm': 0.34.2 - '@img/sharp-linux-arm64': 0.34.2 - '@img/sharp-linux-s390x': 0.34.2 - '@img/sharp-linux-x64': 0.34.2 - '@img/sharp-linuxmusl-arm64': 0.34.2 - '@img/sharp-linuxmusl-x64': 0.34.2 - '@img/sharp-wasm32': 0.34.2 - '@img/sharp-win32-arm64': 0.34.2 - '@img/sharp-win32-ia32': 0.34.2 - '@img/sharp-win32-x64': 0.34.2 + "@img/sharp-darwin-arm64": 0.34.2 + "@img/sharp-darwin-x64": 0.34.2 + "@img/sharp-libvips-darwin-arm64": 1.1.0 + "@img/sharp-libvips-darwin-x64": 1.1.0 + "@img/sharp-libvips-linux-arm": 1.1.0 + "@img/sharp-libvips-linux-arm64": 1.1.0 + "@img/sharp-libvips-linux-ppc64": 1.1.0 + "@img/sharp-libvips-linux-s390x": 1.1.0 + "@img/sharp-libvips-linux-x64": 1.1.0 + "@img/sharp-libvips-linuxmusl-arm64": 1.1.0 + "@img/sharp-libvips-linuxmusl-x64": 1.1.0 + "@img/sharp-linux-arm": 0.34.2 + "@img/sharp-linux-arm64": 0.34.2 + "@img/sharp-linux-s390x": 0.34.2 + "@img/sharp-linux-x64": 0.34.2 + "@img/sharp-linuxmusl-arm64": 0.34.2 + "@img/sharp-linuxmusl-x64": 0.34.2 + "@img/sharp-wasm32": 0.34.2 + "@img/sharp-win32-arm64": 0.34.2 + "@img/sharp-win32-ia32": 0.34.2 + "@img/sharp-win32-x64": 0.34.2 optional: true shebang-command@2.0.0: @@ -5807,7 +6384,7 @@ snapshots: synckit@0.11.8: dependencies: - '@pkgr/core': 0.2.7 + "@pkgr/core": 0.2.7 tailwind-merge@3.3.1: {} @@ -5817,7 +6394,7 @@ snapshots: tar@7.4.3: dependencies: - '@isaacs/fs-minipass': 4.0.1 + "@isaacs/fs-minipass": 4.0.1 chownr: 3.0.0 minipass: 7.1.2 minizlib: 3.0.2 @@ -5843,7 +6420,7 @@ snapshots: tsconfig-paths@3.15.0: dependencies: - '@types/json5': 0.0.29 + "@types/json5": 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 @@ -5904,25 +6481,25 @@ snapshots: dependencies: napi-postinstall: 0.3.0 optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.0 - '@unrs/resolver-binding-android-arm64': 1.11.0 - '@unrs/resolver-binding-darwin-arm64': 1.11.0 - '@unrs/resolver-binding-darwin-x64': 1.11.0 - '@unrs/resolver-binding-freebsd-x64': 1.11.0 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.0 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.0 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.0 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.0 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.0 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.0 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.0 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.0 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.0 - '@unrs/resolver-binding-linux-x64-musl': 1.11.0 - '@unrs/resolver-binding-wasm32-wasi': 1.11.0 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.0 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.0 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.0 + "@unrs/resolver-binding-android-arm-eabi": 1.11.0 + "@unrs/resolver-binding-android-arm64": 1.11.0 + "@unrs/resolver-binding-darwin-arm64": 1.11.0 + "@unrs/resolver-binding-darwin-x64": 1.11.0 + "@unrs/resolver-binding-freebsd-x64": 1.11.0 + "@unrs/resolver-binding-linux-arm-gnueabihf": 1.11.0 + "@unrs/resolver-binding-linux-arm-musleabihf": 1.11.0 + "@unrs/resolver-binding-linux-arm64-gnu": 1.11.0 + "@unrs/resolver-binding-linux-arm64-musl": 1.11.0 + "@unrs/resolver-binding-linux-ppc64-gnu": 1.11.0 + "@unrs/resolver-binding-linux-riscv64-gnu": 1.11.0 + "@unrs/resolver-binding-linux-riscv64-musl": 1.11.0 + "@unrs/resolver-binding-linux-s390x-gnu": 1.11.0 + "@unrs/resolver-binding-linux-x64-gnu": 1.11.0 + "@unrs/resolver-binding-linux-x64-musl": 1.11.0 + "@unrs/resolver-binding-wasm32-wasi": 1.11.0 + "@unrs/resolver-binding-win32-arm64-msvc": 1.11.0 + "@unrs/resolver-binding-win32-ia32-msvc": 1.11.0 + "@unrs/resolver-binding-win32-x64-msvc": 1.11.0 uri-js@4.4.1: dependencies: @@ -5933,12 +6510,12 @@ snapshots: react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 use-intl@4.3.4(react@19.1.0): dependencies: - '@formatjs/fast-memoize': 2.2.7 - '@schummar/icu-type-parser': 1.21.5 + "@formatjs/fast-memoize": 2.2.7 + "@schummar/icu-type-parser": 1.21.5 intl-messageformat: 10.7.16 react: 19.1.0 @@ -5948,7 +6525,7 @@ snapshots: react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 use-sync-external-store@1.5.0(react@19.1.0): dependencies: @@ -6040,6 +6617,6 @@ snapshots: zustand@5.0.6(@types/react@19.1.8)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)): optionalDependencies: - '@types/react': 19.1.8 + "@types/react": 19.1.8 react: 19.1.0 use-sync-external-store: 1.5.0(react@19.1.0) diff --git a/apps/web/src/app/api/(proxy)/auth/trusted-devices/[id]/route.ts b/apps/web/src/app/api/(proxy)/auth/trusted-devices/[id]/route.ts new file mode 100644 index 0000000..7e09d25 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/auth/trusted-devices/[id]/route.ts @@ -0,0 +1,33 @@ +import { NextRequest, NextResponse } from "next/server"; + +const API_BASE_URL = process.env.API_BASE_URL || "http://localhost:3333"; + +export async function DELETE(request: NextRequest, { params }: { params: Promise<{ id: string }> }) { + try { + const { id } = await params; + const deleteUrl = `${API_BASE_URL}/auth/trusted-devices/${id}`; + + const apiRes = await fetch(deleteUrl, { + method: "DELETE", + headers: { + ...Object.fromEntries( + Array.from(request.headers.entries()).filter( + ([key]) => key.startsWith("authorization") || key.startsWith("cookie") + ) + ), + }, + }); + + const data = await apiRes.json(); + + return NextResponse.json(data, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + } catch (error) { + console.error("Error proxying trusted device delete:", error); + return NextResponse.json({ success: false, error: "Internal server error" }, { status: 500 }); + } +} diff --git a/apps/web/src/app/api/(proxy)/auth/trusted-devices/route.ts b/apps/web/src/app/api/(proxy)/auth/trusted-devices/route.ts new file mode 100644 index 0000000..3c4d4aa --- /dev/null +++ b/apps/web/src/app/api/(proxy)/auth/trusted-devices/route.ts @@ -0,0 +1,71 @@ +import { NextRequest, NextResponse } from "next/server"; + +const API_BASE_URL = process.env.API_BASE_URL || "http://localhost:3333"; + +export async function GET(req: NextRequest) { + try { + const cookieHeader = req.headers.get("cookie"); + const url = `${API_BASE_URL}/auth/trusted-devices`; + + const apiRes = await fetch(url, { + method: "GET", + headers: { + cookie: cookieHeader || "", + ...Object.fromEntries(Array.from(req.headers.entries()).filter(([key]) => key.startsWith("authorization"))), + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; + } catch (error) { + console.error("Error proxying trusted devices request:", error); + return NextResponse.json({ error: "Internal server error" }, { status: 500 }); + } +} + +export async function DELETE(req: NextRequest) { + try { + const cookieHeader = req.headers.get("cookie"); + const url = `${API_BASE_URL}/auth/trusted-devices`; + + const apiRes = await fetch(url, { + method: "DELETE", + headers: { + cookie: cookieHeader || "", + ...Object.fromEntries(Array.from(req.headers.entries()).filter(([key]) => key.startsWith("authorization"))), + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; + } catch (error) { + console.error("Error proxying remove all trusted devices request:", error); + return NextResponse.json({ error: "Internal server error" }, { status: 500 }); + } +} diff --git a/apps/web/src/app/login/hooks/use-login.ts b/apps/web/src/app/login/hooks/use-login.ts index b1d8750..7ce7a30 100644 --- a/apps/web/src/app/login/hooks/use-login.ts +++ b/apps/web/src/app/login/hooks/use-login.ts @@ -77,7 +77,7 @@ export function useLogin() { const userResponse = await getCurrentUser(); if (!userResponse?.data?.user) { - throw new Error("No user data"); + throw new Error(t("errors.noUserData")); } const { isAdmin, ...userData } = userResponse.data.user; @@ -143,16 +143,16 @@ export function useLogin() { setError(undefined); setIsSubmitting(true); - + try { const response = await completeTwoFactorLogin({ userId: twoFactorUserId, token: twoFactorCode, rememberDevice: rememberDevice, }); - + const { isAdmin, ...userData } = response.data.user; - + setUser(userData); setIsAdmin(isAdmin); setIsAuthenticated(true); diff --git a/apps/web/src/app/profile/components/two-factor-form.tsx b/apps/web/src/app/profile/components/two-factor-form.tsx index 0254111..9b81cb8 100644 --- a/apps/web/src/app/profile/components/two-factor-form.tsx +++ b/apps/web/src/app/profile/components/two-factor-form.tsx @@ -2,16 +2,24 @@ import { useState } from "react"; import { + IconAlertTriangle, + IconCalendar, + IconClock, IconCopy, + IconDeviceDesktop, + IconDeviceMobile, + IconDevices, IconDownload, IconEye, IconEyeClosed, IconKey, IconShield, IconShieldCheck, + IconTrash, } from "@tabler/icons-react"; import { useTranslations } from "next-intl"; +import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { @@ -25,6 +33,9 @@ import { import { Input } from "@/components/ui/input"; import { InputOTP, InputOTPGroup, InputOTPSlot } from "@/components/ui/input-otp"; import { Label } from "@/components/ui/label"; +import { Separator } from "@/components/ui/separator"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; +import { useTrustedDevices } from "../hooks/use-trusted-devices"; import { useTwoFactor } from "../hooks/use-two-factor"; export function TwoFactorForm() { @@ -52,8 +63,35 @@ export function TwoFactorForm() { copyBackupCodes, } = useTwoFactor(); + const { + isLoading: devicesLoading, + devices, + isRemoveModalOpen, + isRemoveAllModalOpen, + deviceToRemove, + isRemoving, + setIsRemoveModalOpen, + setIsRemoveAllModalOpen, + handleRemoveDevice, + confirmRemoveDevice, + handleRemoveAllDevices, + confirmRemoveAllDevices, + formatDeviceName, + formatDate, + } = useTrustedDevices(); + const [showPassword, setShowPassword] = useState(false); + const getDeviceIcon = (userAgent: string) => { + if (!userAgent) return IconDevices; + + if (userAgent.includes("iPhone") || userAgent.includes("Android") || userAgent.includes("Mobile")) { + return IconDeviceMobile; + } + + return IconDeviceDesktop; + }; + if (isLoading) { return ( @@ -62,7 +100,7 @@ export function TwoFactorForm() { {t("twoFactor.title")} - Loading... + {t("common.loadingSimple")} ); @@ -85,7 +123,10 @@ export function TwoFactorForm() {
-

Status: {status.enabled ? "Enabled" : "Disabled"}

+

+ {t("twoFactor.status.label")}{" "} + {status.enabled ? t("twoFactor.status.enabled") : t("twoFactor.status.disabled")} +

{status.enabled && (

{t("twoFactor.backupCodes.available", { count: status.availableBackupCodes })} @@ -100,17 +141,154 @@ export function TwoFactorForm() { {t("twoFactor.backupCodes.generateNew")} ) : ( )}

+ + {/* Trusted Devices Section - Only shown when 2FA is enabled */} + {status.enabled && ( + <> + + +
+
+
+ +

{t("twoFactor.trustedDevices.title")}

+
+ {devices.length > 0 && ( + + )} +
+

{t("twoFactor.trustedDevices.description")}

+ + {devicesLoading ? ( +
+

{t("twoFactor.trustedDevices.loading")}

+
+ ) : devices.length === 0 ? ( +
+ +

{t("twoFactor.trustedDevices.noDevices")}

+

+ {t("twoFactor.trustedDevices.noDevicesDescription")} +

+
+ ) : ( +
+ + + + + + {t("twoFactor.trustedDevices.tableHeaders.device")} + + + {t("twoFactor.trustedDevices.tableHeaders.added")} + + + {t("twoFactor.trustedDevices.tableHeaders.expires")} + + + {t("twoFactor.trustedDevices.tableHeaders.lastUsed")} + + + {t("twoFactor.trustedDevices.tableHeaders.ipAddress")} + + + {t("twoFactor.trustedDevices.tableHeaders.actions")} + + + + + {devices.map((device) => { + const isExpired = new Date(device.expiresAt) < new Date(); + const DeviceIcon = getDeviceIcon(device.userAgent || ""); + + return ( + + + + + +
+ + {formatDeviceName(device)} + + {isExpired && ( + + {t("twoFactor.trustedDevices.status.expired")} + + )} +
+
+ +
+ + {formatDate(device.createdAt)} +
+
+ +
+ + {formatDate(device.expiresAt)} +
+
+ + {device.lastUsedAt ? ( +
+ + {formatDate(device.lastUsedAt)} +
+ ) : ( + + {t("twoFactor.trustedDevices.status.never")} + + )} +
+ + {device.ipAddress} + + + + +
+ ); + })} +
+
+
+ )} +
+ + )}
@@ -270,6 +448,72 @@ export function TwoFactorForm() { + + {/* Remove Device Modal */} + + + + + + {t("twoFactor.trustedDevices.modals.removeDevice.title")} + + {t("twoFactor.trustedDevices.confirmRemove")} + + + {deviceToRemove && ( +
+

{formatDeviceName(deviceToRemove)}

+

+ {t("twoFactor.trustedDevices.modals.removeDevice.added")} {formatDate(deviceToRemove.createdAt)} +

+

+ {t("twoFactor.trustedDevices.modals.removeDevice.ip")} {deviceToRemove.ipAddress} +

+
+ )} + + + + + +
+
+ + {/* Remove All Devices Modal */} + + + + + + {t("twoFactor.trustedDevices.modals.removeAllDevices.title")} + + {t("twoFactor.trustedDevices.confirmRemoveAll")} + + +
+

+ {t("twoFactor.trustedDevices.modals.removeAllDevices.description", { count: devices.length })} +

+
+ + + + + +
+
); } diff --git a/apps/web/src/app/profile/hooks/use-trusted-devices.ts b/apps/web/src/app/profile/hooks/use-trusted-devices.ts new file mode 100644 index 0000000..206bfd3 --- /dev/null +++ b/apps/web/src/app/profile/hooks/use-trusted-devices.ts @@ -0,0 +1,144 @@ +"use client"; + +import { useCallback, useEffect, useState } from "react"; +import { useTranslations } from "next-intl"; +import { toast } from "sonner"; + +import { getTrustedDevices, removeAllTrustedDevices, removeTrustedDevice } from "@/http/endpoints"; +import type { TrustedDevice } from "@/http/endpoints/auth/trusted-devices/types"; + +export function useTrustedDevices() { + const t = useTranslations(); + const [isLoading, setIsLoading] = useState(true); + const [devices, setDevices] = useState([]); + const [isRemoveModalOpen, setIsRemoveModalOpen] = useState(false); + const [isRemoveAllModalOpen, setIsRemoveAllModalOpen] = useState(false); + const [deviceToRemove, setDeviceToRemove] = useState(null); + const [isRemoving, setIsRemoving] = useState(false); + + const loadDevices = useCallback(async () => { + try { + setIsLoading(true); + const response = await getTrustedDevices(); + setDevices(response.devices); + } catch (error) { + toast.error(t("twoFactor.trustedDevices.loadFailed")); + console.error("Failed to load trusted devices:", error); + } finally { + setIsLoading(false); + } + }, [t]); + + const handleRemoveDevice = useCallback(async (device: TrustedDevice) => { + setDeviceToRemove(device); + setIsRemoveModalOpen(true); + }, []); + + const confirmRemoveDevice = useCallback(async () => { + if (!deviceToRemove) return; + + try { + setIsRemoving(true); + await removeTrustedDevice({ deviceId: deviceToRemove.id }); + toast.success(t("twoFactor.trustedDevices.deviceRemoved")); + await loadDevices(); + setIsRemoveModalOpen(false); + setDeviceToRemove(null); + } catch (error) { + toast.error(t("twoFactor.trustedDevices.removeFailed")); + console.error("Failed to remove trusted device:", error); + } finally { + setIsRemoving(false); + } + }, [deviceToRemove, t, loadDevices]); + + const handleRemoveAllDevices = useCallback(() => { + setIsRemoveAllModalOpen(true); + }, []); + + const confirmRemoveAllDevices = useCallback(async () => { + try { + setIsRemoving(true); + const response = await removeAllTrustedDevices(); + toast.success(t("twoFactor.trustedDevices.allDevicesRemoved")); + await loadDevices(); + setIsRemoveAllModalOpen(false); + } catch (error) { + toast.error(t("twoFactor.trustedDevices.removeAllFailed")); + console.error("Failed to remove all trusted devices:", error); + } finally { + setIsRemoving(false); + } + }, [t, loadDevices]); + + const formatDeviceName = useCallback( + (device: TrustedDevice) => { + const userAgent = device.userAgent; + + // Extract browser and OS info from user agent + let deviceInfo = t("twoFactor.deviceNames.unknownDevice"); + + // Verificação de null safety + if (!userAgent) { + return deviceInfo; + } + + if (userAgent.includes("Chrome")) { + deviceInfo = t("twoFactor.deviceNames.browsers.chrome"); + } else if (userAgent.includes("Firefox")) { + deviceInfo = t("twoFactor.deviceNames.browsers.firefox"); + } else if (userAgent.includes("Safari") && !userAgent.includes("Chrome")) { + deviceInfo = t("twoFactor.deviceNames.browsers.safari"); + } else if (userAgent.includes("Edge")) { + deviceInfo = t("twoFactor.deviceNames.browsers.edge"); + } + + if (userAgent.includes("Windows")) { + deviceInfo += t("twoFactor.deviceNames.platforms.windows"); + } else if (userAgent.includes("Mac")) { + deviceInfo += t("twoFactor.deviceNames.platforms.macos"); + } else if (userAgent.includes("Linux")) { + deviceInfo += t("twoFactor.deviceNames.platforms.linux"); + } else if (userAgent.includes("iPhone")) { + deviceInfo += t("twoFactor.deviceNames.platforms.iphone"); + } else if (userAgent.includes("Android")) { + deviceInfo += t("twoFactor.deviceNames.platforms.android"); + } + + return deviceInfo; + }, + [t] + ); + + const formatDate = useCallback((dateString: string) => { + return new Date(dateString).toLocaleDateString("en-US", { + year: "numeric", + month: "short", + day: "numeric", + hour: "2-digit", + minute: "2-digit", + }); + }, []); + + useEffect(() => { + loadDevices(); + }, [loadDevices]); + + return { + isLoading, + devices, + isRemoveModalOpen, + isRemoveAllModalOpen, + deviceToRemove, + isRemoving, + setIsRemoveModalOpen, + setIsRemoveAllModalOpen, + handleRemoveDevice, + confirmRemoveDevice, + handleRemoveAllDevices, + confirmRemoveAllDevices, + formatDeviceName, + formatDate, + loadDevices, + }; +} diff --git a/apps/web/src/components/ui/input-otp.tsx b/apps/web/src/components/ui/input-otp.tsx index 614f70e..37322e0 100644 --- a/apps/web/src/components/ui/input-otp.tsx +++ b/apps/web/src/components/ui/input-otp.tsx @@ -1,39 +1,30 @@ -"use client" +"use client"; -import * as React from "react" -import { OTPInput, OTPInputContext } from "input-otp" -import { MinusIcon } from "lucide-react" +import * as React from "react"; +import { OTPInput, OTPInputContext } from "input-otp"; +import { MinusIcon } from "lucide-react"; -import { cn } from "@/lib/utils" +import { cn } from "@/lib/utils"; function InputOTP({ className, containerClassName, ...props }: React.ComponentProps & { - containerClassName?: string + containerClassName?: string; }) { return ( - ) + ); } function InputOTPGroup({ className, ...props }: React.ComponentProps<"div">) { - return ( -
- ) + return
; } function InputOTPSlot({ @@ -41,10 +32,10 @@ function InputOTPSlot({ className, ...props }: React.ComponentProps<"div"> & { - index: number + index: number; }) { - const inputOTPContext = React.useContext(OTPInputContext) - const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {} + const inputOTPContext = React.useContext(OTPInputContext); + const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}; return (
)}
- ) + ); } function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) { @@ -71,7 +62,7 @@ function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) {
- ) + ); } -export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator } +export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }; diff --git a/apps/web/src/http/endpoints/auth/trusted-devices/index.ts b/apps/web/src/http/endpoints/auth/trusted-devices/index.ts new file mode 100644 index 0000000..a27c52c --- /dev/null +++ b/apps/web/src/http/endpoints/auth/trusted-devices/index.ts @@ -0,0 +1,24 @@ +import apiInstance from "@/config/api"; +import { + RemoveAllTrustedDevicesResponse, + RemoveTrustedDeviceRequest, + RemoveTrustedDeviceResponse, + TrustedDevicesResponse, +} from "./types"; + +export const getTrustedDevices = async (): Promise => { + const response = await apiInstance.get("/api/auth/trusted-devices"); + return response.data; +}; + +export const removeTrustedDevice = async (data: RemoveTrustedDeviceRequest): Promise => { + const response = await apiInstance.delete(`/api/auth/trusted-devices/${data.deviceId}`); + return response.data; +}; + +export const removeAllTrustedDevices = async (): Promise => { + const response = await apiInstance.delete("/api/auth/trusted-devices"); + return response.data; +}; + +export * from "./types"; diff --git a/apps/web/src/http/endpoints/auth/trusted-devices/types.ts b/apps/web/src/http/endpoints/auth/trusted-devices/types.ts new file mode 100644 index 0000000..6a2db1c --- /dev/null +++ b/apps/web/src/http/endpoints/auth/trusted-devices/types.ts @@ -0,0 +1,28 @@ +export interface TrustedDevice { + id: string; + deviceName: string | null; + userAgent: string | null; + ipAddress: string | null; + createdAt: string; + lastUsedAt: string; + expiresAt: string; +} + +export interface TrustedDevicesResponse { + devices: TrustedDevice[]; +} + +export interface RemoveTrustedDeviceRequest { + deviceId: string; +} + +export interface RemoveTrustedDeviceResponse { + success: boolean; + message: string; +} + +export interface RemoveAllTrustedDevicesResponse { + success: boolean; + message: string; + removedCount: number; +} diff --git a/apps/web/src/http/endpoints/index.ts b/apps/web/src/http/endpoints/index.ts index 8ffcdfd..7cb4137 100644 --- a/apps/web/src/http/endpoints/index.ts +++ b/apps/web/src/http/endpoints/index.ts @@ -5,3 +5,4 @@ export * from "./shares"; export * from "./reverse-shares"; export * from "./config"; export * from "./app"; +export * from "./auth/trusted-devices"; diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index f78de47..05836af 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -1,11 +1,7 @@ { "compilerOptions": { "target": "ES2017", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -23,20 +19,9 @@ } ], "paths": { - "@/*": [ - "./src/*" - ] + "@/*": ["./src/*"] } }, - "exclude": [ - "node_modules", - ".next/types/app/api/(proxy)/**/*", - ".next/types/**/*.ts" - ], - "include": [ - "**/*.ts", - "**/*.tsx", - "next-env.d.ts", - ".next/types/**/*.ts" - ] + "exclude": ["node_modules", ".next/types/app/api/(proxy)/**/*", ".next/types/**/*.ts"], + "include": ["**/*.ts", "**/*.tsx", "next-env.d.ts", ".next/types/**/*.ts"] }