@authowl/react 0.14.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -1
- package/dist/index.cjs +981 -1809
- package/dist/index.d.cts +25 -4
- package/dist/index.d.ts +25 -4
- package/dist/index.js +971 -1789
- package/dist/styles.css +27 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -274,894 +274,17 @@ function useAuthOwlContext() {
|
|
|
274
274
|
|
|
275
275
|
// src/i18n/index.tsx
|
|
276
276
|
import * as React2 from "react";
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
"common.continue": "Continue",
|
|
289
|
-
"common.error.passwordTooShort": "Password must be at least {min} characters.",
|
|
290
|
-
"signIn.title": "Sign in",
|
|
291
|
-
"signIn.forgotTitle": "Reset your password",
|
|
292
|
-
"signIn.submit": "Sign in",
|
|
293
|
-
"signIn.submitPending": "Signing in\u2026",
|
|
294
|
-
"signIn.forgotLink": "Forgot password?",
|
|
295
|
-
"signIn.useUsername": "Sign in with username",
|
|
296
|
-
"signIn.useEmail": "Sign in with email",
|
|
297
|
-
"signIn.error.failed": "Sign in failed",
|
|
298
|
-
"signIn.empty.unsupported": "This app uses a sign-in method that needs a newer version of the SDK.",
|
|
299
|
-
"signIn.empty.none": "No sign-in methods are enabled for this app.",
|
|
300
|
-
"signUp.title": "Create account",
|
|
301
|
-
"signUp.submit": "Create account",
|
|
302
|
-
"signUp.submitPending": "Creating\u2026",
|
|
303
|
-
"signUp.nameLabel": "Name",
|
|
304
|
-
"signUp.firstNameLabel": "First name",
|
|
305
|
-
"signUp.lastNameLabel": "Last name",
|
|
306
|
-
"signUp.passwordlessSubmit": "Continue with an email code",
|
|
307
|
-
"signUp.passkeyTitle": "Create a passkey",
|
|
308
|
-
"signUp.passkeyDescription": "Use your fingerprint, face, or device lock for secure passwordless sign-in.",
|
|
309
|
-
"signUp.passkeySubmit": "Create passkey",
|
|
310
|
-
"signUp.passkeySkip": "Skip for now",
|
|
311
|
-
"signUp.consentLabel": "I agree to the {links}.",
|
|
312
|
-
"signUp.error.failed": "Sign up failed",
|
|
313
|
-
"signUp.error.consentRequired": "Please accept the terms to continue.",
|
|
314
|
-
"signUp.error.passkeyFailed": "Could not create the passkey. Try again or skip for now.",
|
|
315
|
-
"signUp.empty.unsupported": "This app uses a sign-up method that needs a newer version of the SDK.",
|
|
316
|
-
"signUp.empty.none": "No sign-up methods are enabled for this app.",
|
|
317
|
-
"waitlist.title": "Join the waitlist",
|
|
318
|
-
"waitlist.description": "Enter your email and we will let you know when access is available.",
|
|
319
|
-
"waitlist.submit": "Join waitlist",
|
|
320
|
-
"waitlist.submitPending": "Joining\u2026",
|
|
321
|
-
"waitlist.acceptedTitle": "You are on the waitlist",
|
|
322
|
-
"waitlist.acceptedDescription": "Your request was received. We will contact you when access is available.",
|
|
323
|
-
"waitlist.error.failed": "Could not join the waitlist. Try again.",
|
|
324
|
-
"social.continueWith": "Continue with {provider}",
|
|
325
|
-
"social.redirecting": "Redirecting\u2026",
|
|
326
|
-
"social.error.startFailed": "Could not start sign-in.",
|
|
327
|
-
"sso.continueWith": "Continue with SSO",
|
|
328
|
-
"sso.redirecting": "Redirecting\u2026",
|
|
329
|
-
"sso.error.startFailed": "Could not start SSO sign-in.",
|
|
330
|
-
"sso.error.notFound": "No SSO connection is set up for this email domain.",
|
|
331
|
-
"magicLink.sent": "Check your email for a sign-in link.",
|
|
332
|
-
"magicLink.submit": "Email me a sign-in link",
|
|
333
|
-
"magicLink.error.sendFailed": "Could not send the link.",
|
|
334
|
-
"emailOtp.codeLabel": "Enter the code sent to {email}",
|
|
335
|
-
"emailOtp.verifySubmit": "Verify code",
|
|
336
|
-
"emailOtp.requestSubmit": "Email me a code",
|
|
337
|
-
"emailOtp.changeEmail": "Use a different email",
|
|
338
|
-
"emailOtp.error.invalidCode": "That code is invalid or expired.",
|
|
339
|
-
"emailOtp.error.sendFailed": "Could not send the code.",
|
|
340
|
-
"phoneOtp.title": "Sign in with your phone",
|
|
341
|
-
"phoneOtp.phoneLabel": "Egyptian mobile number",
|
|
342
|
-
"phoneOtp.codeLabel": "Enter the code sent to",
|
|
343
|
-
"phoneOtp.sendSubmit": "Text me a code",
|
|
344
|
-
"phoneOtp.verifySubmit": "Verify code",
|
|
345
|
-
"phoneOtp.changePhone": "Use a different phone number",
|
|
346
|
-
"phoneOtp.backToSignIn": "Back to other sign-in options",
|
|
347
|
-
"phoneOtp.usePhone": "Continue with phone",
|
|
348
|
-
"phoneOtp.error.sendFailed": "Could not send the code.",
|
|
349
|
-
"phoneOtp.error.invalidCode": "That code is invalid or expired.",
|
|
350
|
-
"phoneOtp.error.humanCheck": "Complete the human verification to continue.",
|
|
351
|
-
"authChallenge.checking": "Checking that you are human\u2026",
|
|
352
|
-
"authChallenge.error.failed": "Human verification failed. Try again.",
|
|
353
|
-
"passkey.signInButton": "Sign in with a passkey",
|
|
354
|
-
"passkey.waiting": "Waiting for passkey\u2026",
|
|
355
|
-
"passkey.error.signInFailed": "Passkey sign-in failed.",
|
|
356
|
-
"forgotPassword.sent": "If an account exists for {email}, we've sent a link to reset your password.",
|
|
357
|
-
"forgotPassword.backToSignIn": "Back to sign in",
|
|
358
|
-
"forgotPassword.submit": "Email me a reset link",
|
|
359
|
-
"forgotPassword.error.sendFailed": "Could not send the reset link.",
|
|
360
|
-
"resetPassword.invalidLink": "This password reset link is invalid or has expired. Request a new one.",
|
|
361
|
-
"resetPassword.done": "Your password has been reset. You can now sign in.",
|
|
362
|
-
"resetPassword.newPasswordLabel": "New password",
|
|
363
|
-
"resetPassword.confirmPasswordLabel": "Confirm password",
|
|
364
|
-
"resetPassword.submit": "Reset password",
|
|
365
|
-
"resetPassword.submitPending": "Resetting\u2026",
|
|
366
|
-
"resetPassword.error.mismatch": "Passwords do not match.",
|
|
367
|
-
"resetPassword.error.failed": "Could not reset your password. The link may have expired.",
|
|
368
|
-
"verifyEmail.success": "Your email is verified. You can now sign in.",
|
|
369
|
-
"verifyEmail.invalidLink": "This verification link is invalid or has expired.",
|
|
370
|
-
"verifyEmail.resent": "If an account exists for {email}, a new link is on its way.",
|
|
371
|
-
"verifyEmail.resendSubmit": "Send a new link",
|
|
372
|
-
"verifyEmail.error.resendFailed": "Could not send a new link.",
|
|
373
|
-
"verifyPending.body": "We sent a verification link to {email}. Click it to finish setting up your account, then sign in.",
|
|
374
|
-
"verifyPending.codeBody": "Enter the verification code we sent to {email}.",
|
|
375
|
-
"verifyPending.codeLabel": "Verification code",
|
|
376
|
-
"verifyPending.resendCode": "Send a new code",
|
|
377
|
-
"verifyPending.codeError": "That verification code is invalid or expired.",
|
|
378
|
-
"verifyPending.resent": "Sent again - check your inbox (and spam).",
|
|
379
|
-
"verifyPending.resendButton": "Resend verification email",
|
|
380
|
-
"verifyPending.error.resendFailed": "Could not resend the verification email.",
|
|
381
|
-
"mfa.enroll.title": "Set up two-factor authentication",
|
|
382
|
-
"mfa.enroll.doneTitle": "Two-factor authentication is on",
|
|
383
|
-
"mfa.enroll.doneBody": "Your account now asks for a code from your authenticator app at sign-in. Keep your backup codes somewhere safe - each works once if you lose your device.",
|
|
384
|
-
"mfa.enroll.activeTitle": "Two-factor authentication is on",
|
|
385
|
-
"mfa.enroll.activeBody": "Your account is protected by an authenticator app. To switch devices, turn two-factor off first, then set it up again.",
|
|
386
|
-
"mfa.enroll.passwordHint": "Confirm your password to begin.",
|
|
387
|
-
"mfa.enroll.startPending": "Starting\u2026",
|
|
388
|
-
"mfa.enroll.scanQrTitle": "Scan the QR code",
|
|
389
|
-
"mfa.enroll.scanQrHint": "Scan this with your authenticator app, or enter the key manually.",
|
|
390
|
-
"mfa.enroll.manualKey": "Manual key: {secret}",
|
|
391
|
-
"mfa.enroll.backupCodesWarningStrong": "Save your backup codes.",
|
|
392
|
-
"mfa.enroll.backupCodesWarningRest": "Each works once if you lose your device - they will not be shown again.",
|
|
393
|
-
"mfa.enroll.codeLabel": "Enter the 6-digit code to finish",
|
|
394
|
-
"mfa.enroll.activateSubmit": "Activate two-factor",
|
|
395
|
-
"mfa.enroll.error.startFailed": "Could not start two-factor setup.",
|
|
396
|
-
"mfa.enroll.error.invalidCode": "That code is not valid. Check your app and try again.",
|
|
397
|
-
"mfaGate.title": "Two-factor setup required",
|
|
398
|
-
"mfaGate.body": "This app requires two-factor authentication. Set it up to continue.",
|
|
399
|
-
"mfa.challenge.title": "Two-factor verification",
|
|
400
|
-
"mfa.challenge.totpHint": "Enter the 6-digit code from your authenticator app.",
|
|
401
|
-
"mfa.challenge.backupHint": "Enter one of your saved backup codes.",
|
|
402
|
-
"mfa.challenge.totpLabel": "Authentication code",
|
|
403
|
-
"mfa.challenge.backupLabel": "Backup code",
|
|
404
|
-
"mfa.challenge.trustDevice": "Trust this device for {days} days",
|
|
405
|
-
"mfa.challenge.submit": "Verify",
|
|
406
|
-
"mfa.challenge.useBackup": "Use a backup code instead",
|
|
407
|
-
"mfa.challenge.useTotp": "Use your authenticator app instead",
|
|
408
|
-
"mfa.challenge.useEmailOtp": "Email me a code instead",
|
|
409
|
-
"mfa.challenge.otpHint": "Enter the code we emailed you. It expires in 3 minutes.",
|
|
410
|
-
"mfa.challenge.otpLabel": "Emailed code",
|
|
411
|
-
"mfa.challenge.resendOtp": "Resend code",
|
|
412
|
-
"mfa.challenge.error.invalidOtp": "That code is not valid or has expired.",
|
|
413
|
-
"mfa.challenge.error.otpSendFailed": "Could not send the code.",
|
|
414
|
-
"backupCodes.title": "Backup codes",
|
|
415
|
-
"backupCodes.hint": "Generate a fresh set of single-use backup codes. Your current codes stop working immediately.",
|
|
416
|
-
"backupCodes.submit": "Generate new codes",
|
|
417
|
-
"backupCodes.pending": "Generating\u2026",
|
|
418
|
-
"backupCodes.error.failed": "Could not generate new backup codes.",
|
|
419
|
-
"mfa.challenge.error.invalidTotp": "That code is not valid.",
|
|
420
|
-
"mfa.challenge.error.invalidBackup": "That backup code is not valid.",
|
|
421
|
-
"passkeys.title": "Passkeys",
|
|
422
|
-
"passkeys.signedOut": "Sign in to manage your passkeys.",
|
|
423
|
-
"passkeys.empty": "No passkeys yet.",
|
|
424
|
-
"passkeys.unnamed": "Passkey",
|
|
425
|
-
"passkeys.rename": "Rename",
|
|
426
|
-
"passkeys.remove": "Remove",
|
|
427
|
-
"passkeys.removeConfirm": "Remove {name} from this account?",
|
|
428
|
-
"passkeys.add": "Add a passkey",
|
|
429
|
-
"passkeys.renamePrompt": "Passkey name",
|
|
430
|
-
"passkeys.error.loadFailed": "Could not load passkeys.",
|
|
431
|
-
"passkeys.error.renameFailed": "Could not rename the passkey.",
|
|
432
|
-
"passkeys.error.removeFailed": "Could not remove the passkey.",
|
|
433
|
-
"passkeys.error.addFailed": "Could not add a passkey.",
|
|
434
|
-
"consent.gateTitle": "Our terms have been updated",
|
|
435
|
-
"consent.gateBody": "Please review and accept our {links} to continue.",
|
|
436
|
-
"consent.termsOfService": "Terms of Service",
|
|
437
|
-
"consent.privacyPolicy": "Privacy Policy",
|
|
438
|
-
"consent.docJoiner": " and ",
|
|
439
|
-
"consent.acceptPending": "Saving\u2026",
|
|
440
|
-
"consent.acceptSubmit": "I agree",
|
|
441
|
-
"consent.error.acceptFailed": "Could not record your acceptance. Please try again.",
|
|
442
|
-
"userProfile.title": "Manage account",
|
|
443
|
-
"userProfile.description": "Update your profile and account security.",
|
|
444
|
-
"userProfile.close": "Close account settings",
|
|
445
|
-
"userProfile.signedOut": "Sign in to manage your account.",
|
|
446
|
-
"userProfile.save": "Save changes",
|
|
447
|
-
"userProfile.retry": "Try again",
|
|
448
|
-
"userProfile.cancel": "Cancel",
|
|
449
|
-
"userProfile.nav.aria": "Account settings",
|
|
450
|
-
"userProfile.nav.profile": "Profile",
|
|
451
|
-
"userProfile.nav.email": "Email",
|
|
452
|
-
"userProfile.nav.password": "Password",
|
|
453
|
-
"userProfile.nav.social": "Connected accounts",
|
|
454
|
-
"userProfile.nav.sessions": "Sessions",
|
|
455
|
-
"userProfile.nav.passkeys": "Passkeys",
|
|
456
|
-
"userProfile.nav.mfa": "Two-factor",
|
|
457
|
-
"userProfile.nav.recovery": "Recovery",
|
|
458
|
-
"userProfile.nav.danger": "Delete account",
|
|
459
|
-
"userProfile.profile.title": "Profile",
|
|
460
|
-
"userProfile.profile.description": "Choose how your name and avatar appear.",
|
|
461
|
-
"userProfile.profile.imageLabel": "Avatar image URL",
|
|
462
|
-
"userProfile.profile.saved": "Your profile has been updated.",
|
|
463
|
-
"userProfile.profile.error": "Could not update your profile.",
|
|
464
|
-
"userProfile.email.title": "Email address",
|
|
465
|
-
"userProfile.email.description": "Your new address must be verified before it replaces the current one.",
|
|
466
|
-
"userProfile.email.current": "Current email",
|
|
467
|
-
"userProfile.email.newLabel": "New email address",
|
|
468
|
-
"userProfile.email.submit": "Change email",
|
|
469
|
-
"userProfile.email.sent": "Check your email to approve and verify this change.",
|
|
470
|
-
"userProfile.email.unavailable": "This account does not use an email address.",
|
|
471
|
-
"userProfile.email.error": "Could not start the email change.",
|
|
472
|
-
"userProfile.email.changeDisabled": "This app does not allow users to change their email address.",
|
|
473
|
-
"userProfile.password.title": "Password",
|
|
474
|
-
"userProfile.password.description": "Changing your password signs out your other sessions.",
|
|
475
|
-
"userProfile.password.currentLabel": "Current password",
|
|
476
|
-
"userProfile.password.submit": "Change password",
|
|
477
|
-
"userProfile.password.saved": "Your password has been changed.",
|
|
478
|
-
"userProfile.password.error": "Could not change your password.",
|
|
479
|
-
"userProfile.social.title": "Connected accounts",
|
|
480
|
-
"userProfile.social.description": "Manage the social accounts you can use to sign in.",
|
|
481
|
-
"userProfile.social.connected": "Connected",
|
|
482
|
-
"userProfile.social.disconnect": "Disconnect",
|
|
483
|
-
"userProfile.social.confirmDisconnect": "Disconnect {provider} from this account?",
|
|
484
|
-
"userProfile.social.lastMethod": "Add another sign-in method before disconnecting",
|
|
485
|
-
"userProfile.social.empty": "No social accounts are connected.",
|
|
486
|
-
"userProfile.social.add": "Add another account",
|
|
487
|
-
"userProfile.social.connectProvider": "Connect {provider}",
|
|
488
|
-
"userProfile.social.loadError": "Could not load connected accounts.",
|
|
489
|
-
"userProfile.social.linkError": "Could not connect that account.",
|
|
490
|
-
"userProfile.social.unlinkError": "Could not disconnect that account.",
|
|
491
|
-
"userProfile.sessions.title": "Active sessions",
|
|
492
|
-
"userProfile.sessions.description": "Review the devices that are signed in to your account.",
|
|
493
|
-
"userProfile.sessions.current": "Current device \xB7 ",
|
|
494
|
-
"userProfile.sessions.unknownDevice": "Unknown device",
|
|
495
|
-
"userProfile.sessions.revoke": "Revoke",
|
|
496
|
-
"userProfile.sessions.revokeOthers": "Revoke all other sessions",
|
|
497
|
-
"userProfile.sessions.empty": "No active sessions were found.",
|
|
498
|
-
"userProfile.sessions.confirm": "Revoke the session on {device}?",
|
|
499
|
-
"userProfile.sessions.confirmOthers": "Revoke every session except this device?",
|
|
500
|
-
"userProfile.sessions.loadError": "Could not load active sessions.",
|
|
501
|
-
"userProfile.sessions.revokeError": "Could not revoke the session.",
|
|
502
|
-
"userProfile.passkeys.title": "Passkeys",
|
|
503
|
-
"userProfile.passkeys.description": "Use device-bound credentials for fast, phishing-resistant sign-in.",
|
|
504
|
-
"userProfile.mfa.title": "Two-factor authentication",
|
|
505
|
-
"userProfile.mfa.description": "Add an authenticator app as a second check when you sign in.",
|
|
506
|
-
"userProfile.mfa.requiredDescription": "This app requires an authenticator app before you can continue.",
|
|
507
|
-
"userProfile.mfa.active": "Your account asks for an authenticator code at sign-in.",
|
|
508
|
-
"userProfile.mfa.requiredActive": "This app requires two-factor authentication on your account.",
|
|
509
|
-
"userProfile.mfa.enabled": "Two-factor is on",
|
|
510
|
-
"userProfile.mfa.authenticator": "Authenticator app",
|
|
511
|
-
"userProfile.mfa.disable": "Turn off two-factor",
|
|
512
|
-
"userProfile.mfa.replace": "Replace authenticator",
|
|
513
|
-
"userProfile.mfa.disableWarning": "Turning this off removes your authenticator and invalidates its recovery codes.",
|
|
514
|
-
"userProfile.mfa.replaceWarning": "Your app requires two-factor. Removing this authenticator will immediately ask you to set up a replacement.",
|
|
515
|
-
"userProfile.mfa.disableConfirm": "Turn off two-factor",
|
|
516
|
-
"userProfile.mfa.replaceConfirm": "Remove and replace",
|
|
517
|
-
"userProfile.mfa.disableError": "Could not update two-factor authentication.",
|
|
518
|
-
"userProfile.recovery.title": "Account recovery",
|
|
519
|
-
"userProfile.recovery.description": "Prepare safe ways to complete two-factor sign-in if you lose your authenticator.",
|
|
520
|
-
"userProfile.recovery.emailTitle": "Email recovery",
|
|
521
|
-
"userProfile.recovery.emailDescription": "From the two-factor sign-in screen, you can request a short-lived recovery code at:",
|
|
522
|
-
"userProfile.recovery.emailUnavailable": "Add and verify an email address to use email recovery.",
|
|
523
|
-
"userProfile.delete.title": "Delete account",
|
|
524
|
-
"userProfile.delete.description": "Permanently remove your identity, sessions, and connected sign-in methods from this app.",
|
|
525
|
-
"userProfile.delete.warning": "This cannot be undone. The account {identifier} will be permanently deleted.",
|
|
526
|
-
"userProfile.delete.confirmLabel": "Type this account identifier to confirm:",
|
|
527
|
-
"userProfile.delete.submit": "Permanently delete account",
|
|
528
|
-
"userProfile.delete.error": "Could not delete your account.",
|
|
529
|
-
"organization.loading": "Loading organizations",
|
|
530
|
-
"organization.signedOut": "Sign in to manage organizations.",
|
|
531
|
-
"organization.retry": "Try again",
|
|
532
|
-
"organization.close": "Close organization settings",
|
|
533
|
-
"organization.personal": "Personal account",
|
|
534
|
-
"organization.error.load": "Could not load organizations.",
|
|
535
|
-
"organization.role.owner": "Owner",
|
|
536
|
-
"organization.role.admin": "Admin",
|
|
537
|
-
"organization.role.member": "Member",
|
|
538
|
-
"organization.switcher.label": "Switch organization",
|
|
539
|
-
"organization.switcher.manage": "Manage organization",
|
|
540
|
-
"organization.switcher.create": "Create organization",
|
|
541
|
-
"organization.switcher.error": "Could not switch organizations.",
|
|
542
|
-
"organization.create.title": "Create organization",
|
|
543
|
-
"organization.create.description": "Create a workspace for your team and choose its public slug.",
|
|
544
|
-
"organization.create.name": "Organization name",
|
|
545
|
-
"organization.create.slug": "Organization slug",
|
|
546
|
-
"organization.create.logo": "Logo URL",
|
|
547
|
-
"organization.create.submit": "Create organization",
|
|
548
|
-
"organization.create.error": "Could not create the organization.",
|
|
549
|
-
"organization.list.title": "Organizations",
|
|
550
|
-
"organization.list.description": "Switch workspaces, review invitations, or manage a team.",
|
|
551
|
-
"organization.list.empty": "You do not belong to an organization yet.",
|
|
552
|
-
"organization.list.active": "Active",
|
|
553
|
-
"organization.list.switch": "Switch",
|
|
554
|
-
"organization.list.manage": "Manage",
|
|
555
|
-
"organization.list.invitationsTitle": "Your invitations",
|
|
556
|
-
"organization.list.invitationsDescription": "Accept or decline invitations sent to your verified email.",
|
|
557
|
-
"organization.list.noInvitations": "No pending invitations.",
|
|
558
|
-
"organization.list.invitationsError": "Could not load organization invitations.",
|
|
559
|
-
"organization.list.accept": "Accept",
|
|
560
|
-
"organization.list.reject": "Decline",
|
|
561
|
-
"organization.list.acceptError": "Could not accept the invitation.",
|
|
562
|
-
"organization.list.rejectError": "Could not decline the invitation.",
|
|
563
|
-
"organization.profile.title": "Organization settings",
|
|
564
|
-
"organization.profile.loadError": "Could not load the organization.",
|
|
565
|
-
"organization.profile.noActive": "Choose an organization to manage.",
|
|
566
|
-
"organization.profile.notMember": "You are no longer a member of this organization.",
|
|
567
|
-
"organization.profile.nav.label": "Organization settings",
|
|
568
|
-
"organization.profile.nav.general": "General",
|
|
569
|
-
"organization.profile.nav.members": "Members",
|
|
570
|
-
"organization.profile.nav.invitations": "Invitations",
|
|
571
|
-
"organization.profile.nav.danger": "Leave or delete",
|
|
572
|
-
"organization.profile.general.title": "Organization details",
|
|
573
|
-
"organization.profile.general.description": "Update the name, slug, and logo shown to members.",
|
|
574
|
-
"organization.profile.general.readOnly": "Only organization owners and admins can change these details.",
|
|
575
|
-
"organization.profile.general.save": "Save organization",
|
|
576
|
-
"organization.profile.general.error": "Could not update the organization.",
|
|
577
|
-
"organization.profile.members.title": "Members",
|
|
578
|
-
"organization.profile.members.description": "Review access, promote another owner, or remove a member.",
|
|
579
|
-
"organization.profile.members.you": "(you)",
|
|
580
|
-
"organization.profile.members.role": "Role",
|
|
581
|
-
"organization.profile.members.roleConfirm": "Change {name} to {role}?",
|
|
582
|
-
"organization.profile.members.roleError": "Could not update the member role.",
|
|
583
|
-
"organization.profile.members.remove": "Remove",
|
|
584
|
-
"organization.profile.members.removeConfirm": "Remove {name} from this organization?",
|
|
585
|
-
"organization.profile.members.removeError": "Could not remove the member.",
|
|
586
|
-
"organization.profile.invitations.title": "Invitations",
|
|
587
|
-
"organization.profile.invitations.description": "Invite teammates and manage invitations that have not been accepted.",
|
|
588
|
-
"organization.profile.invitations.email": "Email address",
|
|
589
|
-
"organization.profile.invitations.invite": "Send invitation",
|
|
590
|
-
"organization.profile.invitations.inviteError": "Could not send the invitation.",
|
|
591
|
-
"organization.profile.invitations.empty": "No pending invitations.",
|
|
592
|
-
"organization.profile.invitations.cancel": "Cancel",
|
|
593
|
-
"organization.profile.invitations.cancelConfirm": "Cancel the invitation for {email}?",
|
|
594
|
-
"organization.profile.invitations.cancelError": "Could not cancel the invitation.",
|
|
595
|
-
"organization.profile.danger.title": "Leave or delete",
|
|
596
|
-
"organization.profile.danger.description": "These changes affect access for you or the entire team.",
|
|
597
|
-
"organization.profile.danger.leaveTitle": "Leave organization",
|
|
598
|
-
"organization.profile.danger.leaveHint": "You will lose access to this organization.",
|
|
599
|
-
"organization.profile.danger.ownerLeaveHint": "Promote another member to owner before leaving the organization.",
|
|
600
|
-
"organization.profile.danger.leave": "Leave organization",
|
|
601
|
-
"organization.profile.danger.leaveConfirm": "Leave {name}?",
|
|
602
|
-
"organization.profile.danger.leaveError": "Could not leave the organization.",
|
|
603
|
-
"organization.profile.danger.deleteTitle": "Delete organization",
|
|
604
|
-
"organization.profile.danger.deleteHint": "Permanently delete the organization, its memberships, and pending invitations.",
|
|
605
|
-
"organization.profile.danger.deleteConfirm": "Type this slug to confirm:",
|
|
606
|
-
"organization.profile.danger.delete": "Permanently delete organization",
|
|
607
|
-
"organization.profile.danger.deleteError": "Could not delete the organization.",
|
|
608
|
-
"userButton.manageAccount": "Manage account",
|
|
609
|
-
"userButton.signOut": "Sign out",
|
|
610
|
-
"userButton.openMenuAria": "Account menu",
|
|
611
|
-
"signOut.button": "Sign out",
|
|
612
|
-
"badge.securedBy": "Secured by {brand}",
|
|
613
|
-
"qr.ariaLabel": "QR code",
|
|
614
|
-
"serverError.INVALID_EMAIL_OR_PASSWORD": "Incorrect email or password.",
|
|
615
|
-
"serverError.USER_ALREADY_EXISTS": "An account with this email already exists.",
|
|
616
|
-
// Older compatibility servers emit this longer variant; both stay mapped.
|
|
617
|
-
"serverError.USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL": "An account with this email already exists.",
|
|
618
|
-
"serverError.EMAIL_NOT_VERIFIED": "Verify your email address before signing in.",
|
|
619
|
-
"serverError.TWO_FACTOR_REQUIRED": "This account uses two-factor authentication - sign in with your password instead.",
|
|
620
|
-
"serverError.CONSENT_REQUIRED": "You must accept the terms to create an account.",
|
|
621
|
-
"serverError.MAU_LIMIT_REACHED": "This app is not accepting new sign-ups right now.",
|
|
622
|
-
"serverError.MAU_BUDGET_REACHED": "Sign-ups are temporarily paused for this application. Please try again later.",
|
|
623
|
-
"serverError.EMAIL_PASSWORD_DISABLED": "Password sign-in is disabled for this app.",
|
|
624
|
-
// Verbatim reuse of the server's haveIBeenPwned wording so the two sources stay identical.
|
|
625
|
-
"serverError.PASSWORD_COMPROMISED": "This password has appeared in a known data breach. Please choose a different one.",
|
|
626
|
-
"serverError.PASSWORD_TOO_SHORT": "Your password is too short. Choose a longer one.",
|
|
627
|
-
"serverError.PASSWORD_TOO_LONG": "Your password is too long. Choose a shorter one.",
|
|
628
|
-
"serverError.INVALID_EMAIL": "Enter a valid email address.",
|
|
629
|
-
"serverError.BANNED_USER": "This account has been suspended. Contact the application owner.",
|
|
630
|
-
"serverError.PASSWORD_RESET_REQUIRED": "Reset your password to continue signing in.",
|
|
631
|
-
"serverError.PASSWORD_SIGNUP_REQUIRED": "This application requires two-factor authentication. Create your account with email and password to continue.",
|
|
632
|
-
"serverError.SSO_EMAIL_DOMAIN_MISMATCH": "This identity provider is not authorized for that email domain.",
|
|
633
|
-
"serverError.MFA_ENROLLMENT_REQUIRED": "Finish setting up two-factor authentication to continue.",
|
|
634
|
-
"serverError.TOO_MANY_ATTEMPTS": "Too many attempts. Try again shortly.",
|
|
635
|
-
"serverError.ACCOUNT_TEMPORARILY_LOCKED": "Your account is temporarily locked. Try again shortly.",
|
|
636
|
-
// Duration-aware variants: {duration} is rendered via Intl.NumberFormat unit style.
|
|
637
|
-
"serverError.RATE_LIMITED.retryIn": "Too many attempts. Try again in {duration}.",
|
|
638
|
-
"serverError.TOO_MANY_ATTEMPTS.retryIn": "Too many attempts. Try again in {duration}.",
|
|
639
|
-
"serverError.ACCOUNT_TEMPORARILY_LOCKED.retryIn": "Your account is temporarily locked. Try again in {duration}.",
|
|
640
|
-
"serverError.RATE_LIMITED": "Too many attempts. Try again shortly.",
|
|
641
|
-
"serverError.INVALID_PHONE_NUMBER": "Enter a valid Egyptian mobile number.",
|
|
642
|
-
"serverError.INVALID_PHONE_OTP": "That code is invalid or expired.",
|
|
643
|
-
"serverError.TURNSTILE_FAILED": "Human verification failed. Try again.",
|
|
644
|
-
"serverError.BOT_CHALLENGE_FAILED": "Human verification failed. Try again.",
|
|
645
|
-
"serverError.SMS_LIMIT_REACHED": "SMS sign-in is temporarily unavailable for this app.",
|
|
646
|
-
"serverError.SMS_UNAVAILABLE": "SMS is temporarily unavailable. Try another sign-in method.",
|
|
647
|
-
"serverError.PHONE_OTP_DISABLED": "Phone sign-in is not available for this app.",
|
|
648
|
-
"serverError.PHONE_OTP_PAUSED": "Phone sign-in is temporarily paused for this app.",
|
|
649
|
-
"serverError.PHONE_OTP_UNAVAILABLE": "Phone verification is temporarily unavailable.",
|
|
650
|
-
"serverError.SESSION_NOT_FRESH": "Sign in again before making this security change.",
|
|
651
|
-
"serverError.PASSKEY_PAGE_NOT_FOCUSED": "Keep this page open and focused while completing the passkey prompt.",
|
|
652
|
-
"serverError.ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED": "This device already has a passkey for this account. Use it to sign in, or remove it from device settings before trying again.",
|
|
653
|
-
"serverError.ORGANIZATION_LAST_OWNER": "Transfer organization ownership before continuing.",
|
|
654
|
-
// P1-2: terse two-factor / OTP engine codes. Without these the resolver's
|
|
655
|
-
// English server-message fallback ("Invalid code", "Invalid OTP", ...) fires
|
|
656
|
-
// and shadows the components' own localized copy, so Arabic users saw English
|
|
657
|
-
// on wrong-TOTP / expired-OTP / backup-code failures. Mapping restores the
|
|
658
|
-
// localized string in every locale and the nicer English wording too.
|
|
659
|
-
"serverError.INVALID_CODE": "That code is not valid. Check the code and try again.",
|
|
660
|
-
"serverError.INVALID_BACKUP_CODE": "That backup code is not valid.",
|
|
661
|
-
"serverError.INVALID_OTP": "That code is invalid or expired.",
|
|
662
|
-
"serverError.OTP_EXPIRED": "That code has expired. Request a new one.",
|
|
663
|
-
"serverError.OTP_HAS_EXPIRED": "That code has expired. Request a new one.",
|
|
664
|
-
"serverError.TOO_MANY_ATTEMPTS_REQUEST_NEW_CODE": "Too many attempts. Request a new code and try again.",
|
|
665
|
-
"serverError.INVALID_TWO_FACTOR_COOKIE": "Your verification session expired. Sign in again to continue.",
|
|
666
|
-
// P1-2: high-traffic organization codes surfaced by the org components
|
|
667
|
-
// (create / switch / member / invitation flows). Same shadowing problem.
|
|
668
|
-
"serverError.ORGANIZATION_SLUG_ALREADY_TAKEN": "That organization slug is already taken. Choose another.",
|
|
669
|
-
"serverError.ORGANIZATION_ALREADY_EXISTS": "An organization with these details already exists.",
|
|
670
|
-
"serverError.YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_ORGANIZATIONS": "You have reached the maximum number of organizations.",
|
|
671
|
-
"serverError.ORGANIZATION_NOT_FOUND": "That organization could not be found.",
|
|
672
|
-
"serverError.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION": "You are no longer a member of this organization.",
|
|
673
|
-
"serverError.NO_ACTIVE_ORGANIZATION": "Select an organization to continue.",
|
|
674
|
-
"serverError.ORGANIZATION_MEMBERSHIP_LIMIT_REACHED": "This organization has reached its member limit.",
|
|
675
|
-
"serverError.MEMBER_NOT_FOUND": "That member could not be found.",
|
|
676
|
-
"serverError.INVITATION_NOT_FOUND": "That invitation could not be found. It may have been revoked or already used.",
|
|
677
|
-
"serverError.YOU_ARE_NOT_THE_RECIPIENT_OF_THE_INVITATION": "This invitation was sent to a different email address.",
|
|
678
|
-
"serverError.EMAIL_VERIFICATION_REQUIRED_FOR_INVITATION": "Verify your email address to view your invitations.",
|
|
679
|
-
"serverError.EMAIL_VERIFICATION_REQUIRED_BEFORE_ACCEPTING_OR_REJECTING_INVITATION": "Verify your email address before responding to this invitation.",
|
|
680
|
-
"serverError.USER_IS_ALREADY_A_MEMBER_OF_THIS_ORGANIZATION": "That person is already a member of this organization.",
|
|
681
|
-
"serverError.USER_IS_ALREADY_INVITED_TO_THIS_ORGANIZATION": "That person has already been invited to this organization.",
|
|
682
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_INVITE_USERS_TO_THIS_ORGANIZATION": "You do not have permission to invite members to this organization.",
|
|
683
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_INVITE_USER_WITH_THIS_ROLE": "You do not have permission to invite a member with that role.",
|
|
684
|
-
"serverError.YOU_CANNOT_LEAVE_THE_ORGANIZATION_AS_THE_ONLY_OWNER": "Promote another member to owner before leaving the organization.",
|
|
685
|
-
"serverError.YOU_CANNOT_LEAVE_THE_ORGANIZATION_WITHOUT_AN_OWNER": "Promote another member to owner before leaving the organization.",
|
|
686
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_ORGANIZATION": "You do not have permission to change this organization.",
|
|
687
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_ORGANIZATION": "You do not have permission to delete this organization.",
|
|
688
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_MEMBER": "You do not have permission to remove this member.",
|
|
689
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_MEMBER": "You do not have permission to change this member.",
|
|
690
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_CANCEL_THIS_INVITATION": "You do not have permission to cancel this invitation."
|
|
691
|
-
};
|
|
692
|
-
|
|
693
|
-
// src/i18n/ar.ts
|
|
694
|
-
var ar = {
|
|
695
|
-
"common.emailLabel": "\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A",
|
|
696
|
-
"common.usernameLabel": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645",
|
|
697
|
-
"common.passwordLabel": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
698
|
-
"common.orDivider": "\u0623\u0648",
|
|
699
|
-
"common.sending": "\u062C\u0627\u0631\u064D \u0627\u0644\u0625\u0631\u0633\u0627\u0644\u2026",
|
|
700
|
-
"common.verifying": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0642\u0642\u2026",
|
|
701
|
-
"common.working": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u0646\u0641\u064A\u0630\u2026",
|
|
702
|
-
"common.loading": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0645\u064A\u0644\u2026",
|
|
703
|
-
"common.continue": "\u0645\u062A\u0627\u0628\u0639\u0629",
|
|
704
|
-
"common.error.passwordTooShort": "\u064A\u062C\u0628 \u0623\u0644\u0627 \u062A\u0642\u0644 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0639\u0646 {min} \u0623\u062D\u0631\u0641.",
|
|
705
|
-
"signIn.title": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644",
|
|
706
|
-
"signIn.forgotTitle": "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
707
|
-
"signIn.submit": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644",
|
|
708
|
-
"signIn.submitPending": "\u062C\u0627\u0631\u064D \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644\u2026",
|
|
709
|
-
"signIn.forgotLink": "\u0647\u0644 \u0646\u0633\u064A\u062A \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631\u061F",
|
|
710
|
-
"signIn.useUsername": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645",
|
|
711
|
-
"signIn.useEmail": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A",
|
|
712
|
-
"signIn.error.failed": "\u062A\u0639\u0630\u0631 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644",
|
|
713
|
-
"signIn.empty.unsupported": "\u064A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0637\u0631\u064A\u0642\u0629 \u062A\u0633\u062C\u064A\u0644 \u062F\u062E\u0648\u0644 \u062A\u062A\u0637\u0644\u0628 \u0625\u0635\u062F\u0627\u0631\u064B\u0627 \u0623\u062D\u062F\u062B \u0645\u0646 \u062D\u0632\u0645\u0629 \u0627\u0644\u062A\u0637\u0648\u064A\u0631.",
|
|
714
|
-
"signIn.empty.none": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0637\u0631\u0642 \u062A\u0633\u062C\u064A\u0644 \u062F\u062E\u0648\u0644 \u0645\u0641\u0639\u0651\u0644\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642.",
|
|
715
|
-
"signUp.title": "\u0625\u0646\u0634\u0627\u0621 \u062D\u0633\u0627\u0628",
|
|
716
|
-
"signUp.submit": "\u0625\u0646\u0634\u0627\u0621 \u062D\u0633\u0627\u0628",
|
|
717
|
-
"signUp.submitPending": "\u062C\u0627\u0631\u064D \u0627\u0644\u0625\u0646\u0634\u0627\u0621\u2026",
|
|
718
|
-
"signUp.nameLabel": "\u0627\u0644\u0627\u0633\u0645",
|
|
719
|
-
"signUp.firstNameLabel": "\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0623\u0648\u0644",
|
|
720
|
-
"signUp.lastNameLabel": "\u0627\u0633\u0645 \u0627\u0644\u0639\u0627\u0626\u0644\u0629",
|
|
721
|
-
"signUp.passwordlessSubmit": "\u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629 \u0628\u0631\u0645\u0632 \u0639\u0628\u0631 \u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A",
|
|
722
|
-
"signUp.passkeyTitle": "\u0625\u0646\u0634\u0627\u0621 \u0645\u0641\u062A\u0627\u062D \u0645\u0631\u0648\u0631",
|
|
723
|
-
"signUp.passkeyDescription": "\u0627\u0633\u062A\u062E\u062F\u0645 \u0628\u0635\u0645\u0629 \u0627\u0644\u0625\u0635\u0628\u0639 \u0623\u0648 \u0627\u0644\u0648\u062C\u0647 \u0623\u0648 \u0642\u0641\u0644 \u0627\u0644\u062C\u0647\u0627\u0632 \u0644\u062A\u0633\u062C\u064A\u0644 \u062F\u062E\u0648\u0644 \u0622\u0645\u0646 \u0628\u062F\u0648\u0646 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631.",
|
|
724
|
-
"signUp.passkeySubmit": "\u0625\u0646\u0634\u0627\u0621 \u0645\u0641\u062A\u0627\u062D \u0645\u0631\u0648\u0631",
|
|
725
|
-
"signUp.passkeySkip": "\u0627\u0644\u062A\u062E\u0637\u064A \u0627\u0644\u0622\u0646",
|
|
726
|
-
"signUp.consentLabel": "\u0623\u0648\u0627\u0641\u0642 \u0639\u0644\u0649 {links}.",
|
|
727
|
-
"signUp.error.failed": "\u062A\u0639\u0630\u0631 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u062D\u0633\u0627\u0628",
|
|
728
|
-
"signUp.error.consentRequired": "\u064A\u0631\u062C\u0649 \u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0631\u0648\u0637 \u0644\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
|
|
729
|
-
"signUp.error.passkeyFailed": "\u062A\u0639\u0630\u0631 \u0625\u0646\u0634\u0627\u0621 \u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0645\u0631\u0648\u0631. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0623\u0648 \u062A\u062E\u0637 \u0647\u0630\u0647 \u0627\u0644\u062E\u0637\u0648\u0629 \u0627\u0644\u0622\u0646.",
|
|
730
|
-
"signUp.empty.unsupported": "\u064A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0637\u0631\u064A\u0642\u0629 \u062A\u0633\u062C\u064A\u0644 \u062A\u062A\u0637\u0644\u0628 \u0625\u0635\u062F\u0627\u0631\u064B\u0627 \u0623\u062D\u062F\u062B \u0645\u0646 \u062D\u0632\u0645\u0629 \u0627\u0644\u062A\u0637\u0648\u064A\u0631.",
|
|
731
|
-
"signUp.empty.none": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0637\u0631\u0642 \u0625\u0646\u0634\u0627\u0621 \u062D\u0633\u0627\u0628 \u0645\u0641\u0639\u0651\u0644\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642.",
|
|
732
|
-
"waitlist.title": "\u0627\u0646\u0636\u0645 \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631",
|
|
733
|
-
"waitlist.description": "\u0623\u062F\u062E\u0644 \u0628\u0631\u064A\u062F\u0643 \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0648\u0633\u0646\u062E\u0628\u0631\u0643 \u0639\u0646\u062F\u0645\u0627 \u064A\u0635\u0628\u062D \u0627\u0644\u0648\u0635\u0648\u0644 \u0645\u062A\u0627\u062D\u064B\u0627.",
|
|
734
|
-
"waitlist.submit": "\u0627\u0644\u0627\u0646\u0636\u0645\u0627\u0645 \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631",
|
|
735
|
-
"waitlist.submitPending": "\u062C\u0627\u0631\u064D \u0627\u0644\u0627\u0646\u0636\u0645\u0627\u0645\u2026",
|
|
736
|
-
"waitlist.acceptedTitle": "\u0623\u0646\u062A \u0639\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631",
|
|
737
|
-
"waitlist.acceptedDescription": "\u062A\u0645 \u0627\u0633\u062A\u0644\u0627\u0645 \u0637\u0644\u0628\u0643. \u0633\u0646\u062A\u0648\u0627\u0635\u0644 \u0645\u0639\u0643 \u0639\u0646\u062F\u0645\u0627 \u064A\u0635\u0628\u062D \u0627\u0644\u0648\u0635\u0648\u0644 \u0645\u062A\u0627\u062D\u064B\u0627.",
|
|
738
|
-
"waitlist.error.failed": "\u062A\u0639\u0630\u0631 \u0627\u0644\u0627\u0646\u0636\u0645\u0627\u0645 \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
|
|
739
|
-
"social.continueWith": "\u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629 \u0639\u0628\u0631 {provider}",
|
|
740
|
-
"social.redirecting": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0648\u064A\u0644\u2026",
|
|
741
|
-
"social.error.startFailed": "\u062A\u0639\u0630\u0631 \u0628\u062F\u0621 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644.",
|
|
742
|
-
"sso.continueWith": "\u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629 \u0639\u0628\u0631 \u0627\u0644\u062F\u062E\u0648\u0644 \u0627\u0644\u0645\u0648\u062D\u0651\u062F",
|
|
743
|
-
"sso.redirecting": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0648\u064A\u0644\u2026",
|
|
744
|
-
"sso.error.startFailed": "\u062A\u0639\u0630\u0651\u0631 \u0628\u062F\u0621 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0639\u0628\u0631 \u0627\u0644\u062F\u062E\u0648\u0644 \u0627\u0644\u0645\u0648\u062D\u0651\u062F.",
|
|
745
|
-
"sso.error.notFound": "\u0644\u0627 \u064A\u0648\u062C\u062F \u0627\u062A\u0635\u0627\u0644 \u062F\u062E\u0648\u0644 \u0645\u0648\u062D\u0651\u062F \u0645\u064F\u0639\u062F\u0651 \u0644\u0646\u0637\u0627\u0642 \u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A.",
|
|
746
|
-
"magicLink.sent": "\u062A\u062D\u0642\u0642 \u0645\u0646 \u0628\u0631\u064A\u062F\u0643 \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0631\u0627\u0628\u0637 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644.",
|
|
747
|
-
"magicLink.submit": "\u0623\u0631\u0633\u0644 \u0644\u064A \u0631\u0627\u0628\u0637 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644",
|
|
748
|
-
"magicLink.error.sendFailed": "\u062A\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0631\u0627\u0628\u0637.",
|
|
749
|
-
"emailOtp.codeLabel": "\u0623\u062F\u062E\u0644 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0631\u0633\u0644 \u0625\u0644\u0649 {email}",
|
|
750
|
-
"emailOtp.verifySubmit": "\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0631\u0645\u0632",
|
|
751
|
-
"emailOtp.requestSubmit": "\u0623\u0631\u0633\u0644 \u0644\u064A \u0631\u0645\u0632\u064B\u0627",
|
|
752
|
-
"emailOtp.changeEmail": "\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0622\u062E\u0631",
|
|
753
|
-
"emailOtp.error.invalidCode": "\u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D \u0623\u0648 \u0645\u0646\u062A\u0647\u064A \u0627\u0644\u0635\u0644\u0627\u062D\u064A\u0629.",
|
|
754
|
-
"emailOtp.error.sendFailed": "\u062A\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0631\u0645\u0632.",
|
|
755
|
-
"phoneOtp.title": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062A\u0641",
|
|
756
|
-
"phoneOtp.phoneLabel": "\u0631\u0642\u0645 \u0627\u0644\u0645\u0648\u0628\u0627\u064A\u0644 \u0627\u0644\u0645\u0635\u0631\u064A",
|
|
757
|
-
"phoneOtp.codeLabel": "\u0623\u062F\u062E\u0644 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0631\u0633\u0644 \u0625\u0644\u0649",
|
|
758
|
-
"phoneOtp.sendSubmit": "\u0623\u0631\u0633\u0644 \u0644\u064A \u0631\u0645\u0632\u064B\u0627",
|
|
759
|
-
"phoneOtp.verifySubmit": "\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0631\u0645\u0632",
|
|
760
|
-
"phoneOtp.changePhone": "\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0622\u062E\u0631",
|
|
761
|
-
"phoneOtp.backToSignIn": "\u0627\u0644\u0639\u0648\u062F\u0629 \u0625\u0644\u0649 \u0637\u0631\u0642 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0627\u0644\u0623\u062E\u0631\u0649",
|
|
762
|
-
"phoneOtp.usePhone": "\u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629 \u0628\u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062A\u0641",
|
|
763
|
-
"phoneOtp.error.sendFailed": "\u062A\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0631\u0645\u0632.",
|
|
764
|
-
"phoneOtp.error.invalidCode": "\u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D \u0623\u0648 \u0645\u0646\u062A\u0647\u064A \u0627\u0644\u0635\u0644\u0627\u062D\u064A\u0629.",
|
|
765
|
-
"phoneOtp.error.humanCheck": "\u0623\u0643\u0645\u0644 \u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0628\u0634\u0631\u064A \u0644\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
|
|
766
|
-
"authChallenge.checking": "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0623\u0646\u0643 \u0634\u062E\u0635 \u062D\u0642\u064A\u0642\u064A\u2026",
|
|
767
|
-
"authChallenge.error.failed": "\u0641\u0634\u0644 \u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0628\u0634\u0631\u064A. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
|
|
768
|
-
"passkey.signInButton": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0645\u0641\u062A\u0627\u062D \u0645\u0631\u0648\u0631",
|
|
769
|
-
"passkey.waiting": "\u0641\u064A \u0627\u0646\u062A\u0638\u0627\u0631 \u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0645\u0631\u0648\u0631\u2026",
|
|
770
|
-
"passkey.error.signInFailed": "\u062A\u0639\u0630\u0631 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0645\u0631\u0648\u0631.",
|
|
771
|
-
"forgotPassword.sent": "\u0625\u0630\u0627 \u0643\u0627\u0646 \u0647\u0646\u0627\u0643 \u062D\u0633\u0627\u0628 \u0645\u0633\u062C\u0644 \u0628\u0627\u0644\u0628\u0631\u064A\u062F {email}\u060C \u0641\u0642\u062F \u0623\u0631\u0633\u0644\u0646\u0627 \u0631\u0627\u0628\u0637\u064B\u0627 \u0644\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631.",
|
|
772
|
-
"forgotPassword.backToSignIn": "\u0627\u0644\u0639\u0648\u062F\u0629 \u0625\u0644\u0649 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644",
|
|
773
|
-
"forgotPassword.submit": "\u0623\u0631\u0633\u0644 \u0644\u064A \u0631\u0627\u0628\u0637 \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0639\u064A\u064A\u0646",
|
|
774
|
-
"forgotPassword.error.sendFailed": "\u062A\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0631\u0627\u0628\u0637 \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0639\u064A\u064A\u0646.",
|
|
775
|
-
"resetPassword.invalidLink": "\u0631\u0627\u0628\u0637 \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D \u0623\u0648 \u0645\u0646\u062A\u0647\u064A \u0627\u0644\u0635\u0644\u0627\u062D\u064A\u0629. \u0627\u0637\u0644\u0628 \u0631\u0627\u0628\u0637\u064B\u0627 \u062C\u062F\u064A\u062F\u064B\u0627.",
|
|
776
|
-
"resetPassword.done": "\u062A\u0645\u062A \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631. \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0622\u0646 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644.",
|
|
777
|
-
"resetPassword.newPasswordLabel": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062C\u062F\u064A\u062F\u0629",
|
|
778
|
-
"resetPassword.confirmPasswordLabel": "\u062A\u0623\u0643\u064A\u062F \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
779
|
-
"resetPassword.submit": "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
780
|
-
"resetPassword.submitPending": "\u062C\u0627\u0631\u064D \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u062A\u0639\u064A\u064A\u0646\u2026",
|
|
781
|
-
"resetPassword.error.mismatch": "\u0643\u0644\u0645\u062A\u0627 \u0627\u0644\u0645\u0631\u0648\u0631 \u063A\u064A\u0631 \u0645\u062A\u0637\u0627\u0628\u0642\u062A\u064A\u0646.",
|
|
782
|
-
"resetPassword.error.failed": "\u062A\u0639\u0630\u0631 \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631. \u0631\u0628\u0645\u0627 \u0627\u0646\u062A\u0647\u062A \u0635\u0644\u0627\u062D\u064A\u0629 \u0627\u0644\u0631\u0627\u0628\u0637.",
|
|
783
|
-
"verifyEmail.success": "\u062A\u0645 \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0628\u0631\u064A\u062F\u0643 \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A. \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0622\u0646 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644.",
|
|
784
|
-
"verifyEmail.invalidLink": "\u0631\u0627\u0628\u0637 \u0627\u0644\u062A\u062D\u0642\u0642 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D \u0623\u0648 \u0645\u0646\u062A\u0647\u064A \u0627\u0644\u0635\u0644\u0627\u062D\u064A\u0629.",
|
|
785
|
-
"verifyEmail.resent": "\u0625\u0630\u0627 \u0643\u0627\u0646 \u0647\u0646\u0627\u0643 \u062D\u0633\u0627\u0628 \u0645\u0633\u062C\u0644 \u0628\u0627\u0644\u0628\u0631\u064A\u062F {email}\u060C \u0641\u0633\u064A\u0635\u0644\u0643 \u0631\u0627\u0628\u0637 \u062C\u062F\u064A\u062F \u0642\u0631\u064A\u0628\u064B\u0627.",
|
|
786
|
-
"verifyEmail.resendSubmit": "\u0625\u0631\u0633\u0627\u0644 \u0631\u0627\u0628\u0637 \u062C\u062F\u064A\u062F",
|
|
787
|
-
"verifyEmail.error.resendFailed": "\u062A\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0631\u0627\u0628\u0637 \u062C\u062F\u064A\u062F.",
|
|
788
|
-
"verifyPending.body": "\u0623\u0631\u0633\u0644\u0646\u0627 \u0631\u0627\u0628\u0637 \u062A\u062D\u0642\u0642 \u0625\u0644\u0649 {email}. \u0627\u0636\u063A\u0637 \u0639\u0644\u064A\u0647 \u0644\u0625\u0643\u0645\u0627\u0644 \u0625\u0639\u062F\u0627\u062F \u062D\u0633\u0627\u0628\u0643\u060C \u062B\u0645 \u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644.",
|
|
789
|
-
"verifyPending.codeBody": "\u0623\u062F\u062E\u0644 \u0631\u0645\u0632 \u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0630\u064A \u0623\u0631\u0633\u0644\u0646\u0627\u0647 \u0625\u0644\u0649 {email}.",
|
|
790
|
-
"verifyPending.codeLabel": "\u0631\u0645\u0632 \u0627\u0644\u062A\u062D\u0642\u0642",
|
|
791
|
-
"verifyPending.resendCode": "\u0625\u0631\u0633\u0627\u0644 \u0631\u0645\u0632 \u062C\u062F\u064A\u062F",
|
|
792
|
-
"verifyPending.codeError": "\u0631\u0645\u0632 \u0627\u0644\u062A\u062D\u0642\u0642 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D \u0623\u0648 \u0645\u0646\u062A\u0647\u064A \u0627\u0644\u0635\u0644\u0627\u062D\u064A\u0629.",
|
|
793
|
-
"verifyPending.resent": "\u062A\u0645 \u0627\u0644\u0625\u0631\u0633\u0627\u0644 \u0645\u062C\u062F\u062F\u064B\u0627 - \u062A\u062D\u0642\u0642 \u0645\u0646 \u0628\u0631\u064A\u062F\u0643 \u0627\u0644\u0648\u0627\u0631\u062F (\u0648\u0645\u062C\u0644\u062F \u0627\u0644\u0631\u0633\u0627\u0626\u0644 \u063A\u064A\u0631 \u0627\u0644\u0645\u0631\u063A\u0648\u0628 \u0641\u064A\u0647\u0627).",
|
|
794
|
-
"verifyPending.resendButton": "\u0625\u0639\u0627\u062F\u0629 \u0625\u0631\u0633\u0627\u0644 \u0631\u0633\u0627\u0644\u0629 \u0627\u0644\u062A\u062D\u0642\u0642",
|
|
795
|
-
"verifyPending.error.resendFailed": "\u062A\u0639\u0630\u0631 \u0625\u0639\u0627\u062F\u0629 \u0625\u0631\u0633\u0627\u0644 \u0631\u0633\u0627\u0644\u0629 \u0627\u0644\u062A\u062D\u0642\u0642.",
|
|
796
|
-
"mfa.enroll.title": "\u0625\u0639\u062F\u0627\u062F \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629",
|
|
797
|
-
"mfa.enroll.doneTitle": "\u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629 \u0645\u0641\u0639\u0651\u0644\u0629",
|
|
798
|
-
"mfa.enroll.doneBody": "\u0633\u064A\u0637\u0644\u0628 \u062D\u0633\u0627\u0628\u0643 \u0627\u0644\u0622\u0646 \u0631\u0645\u0632\u064B\u0627 \u0645\u0646 \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0639\u0646\u062F \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644. \u0627\u062D\u062A\u0641\u0638 \u0628\u0631\u0645\u0648\u0632 \u0627\u0644\u0627\u062D\u062A\u064A\u0627\u0637 \u0641\u064A \u0645\u0643\u0627\u0646 \u0622\u0645\u0646 - \u064A\u0639\u0645\u0644 \u0643\u0644 \u0631\u0645\u0632 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0625\u0630\u0627 \u0641\u0642\u062F\u062A \u062C\u0647\u0627\u0632\u0643.",
|
|
799
|
-
"mfa.enroll.activeTitle": "\u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629 \u0645\u0641\u0639\u0651\u0644\u0629",
|
|
800
|
-
"mfa.enroll.activeBody": "\u062D\u0633\u0627\u0628\u0643 \u0645\u062D\u0645\u064A \u0628\u062A\u0637\u0628\u064A\u0642 \u0645\u0635\u0627\u062F\u0642\u0629. \u0644\u062A\u0628\u062F\u064A\u0644 \u0627\u0644\u0623\u062C\u0647\u0632\u0629\u060C \u0623\u0648\u0642\u0641 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629 \u0623\u0648\u0644\u064B\u0627 \u062B\u0645 \u0623\u0639\u062F \u0625\u0639\u062F\u0627\u062F\u0647\u0627.",
|
|
801
|
-
"mfa.enroll.passwordHint": "\u0623\u0643\u0651\u062F \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0644\u0644\u0628\u062F\u0621.",
|
|
802
|
-
"mfa.enroll.startPending": "\u062C\u0627\u0631\u064D \u0627\u0644\u0628\u062F\u0621\u2026",
|
|
803
|
-
"mfa.enroll.scanQrTitle": "\u0627\u0645\u0633\u062D \u0631\u0645\u0632 QR",
|
|
804
|
-
"mfa.enroll.scanQrHint": "\u0627\u0645\u0633\u062D \u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u0628\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629\u060C \u0623\u0648 \u0623\u062F\u062E\u0644 \u0627\u0644\u0645\u0641\u062A\u0627\u062D \u064A\u062F\u0648\u064A\u064B\u0627.",
|
|
805
|
-
"mfa.enroll.manualKey": "\u0627\u0644\u0645\u0641\u062A\u0627\u062D \u0627\u0644\u064A\u062F\u0648\u064A: {secret}",
|
|
806
|
-
"mfa.enroll.backupCodesWarningStrong": "\u0627\u062D\u0641\u0638 \u0631\u0645\u0648\u0632 \u0627\u0644\u0627\u062D\u062A\u064A\u0627\u0637.",
|
|
807
|
-
"mfa.enroll.backupCodesWarningRest": "\u064A\u0639\u0645\u0644 \u0643\u0644 \u0631\u0645\u0632 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0625\u0630\u0627 \u0641\u0642\u062F\u062A \u062C\u0647\u0627\u0632\u0643 - \u0648\u0644\u0646 \u062A\u0638\u0647\u0631 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
|
|
808
|
-
"mfa.enroll.codeLabel": "\u0623\u062F\u062E\u0644 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0643\u0648\u0651\u0646 \u0645\u0646 6 \u0623\u0631\u0642\u0627\u0645 \u0644\u0644\u0625\u0646\u0647\u0627\u0621",
|
|
809
|
-
"mfa.enroll.activateSubmit": "\u062A\u0641\u0639\u064A\u0644 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629",
|
|
810
|
-
"mfa.enroll.error.startFailed": "\u062A\u0639\u0630\u0631 \u0628\u062F\u0621 \u0625\u0639\u062F\u0627\u062F \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629.",
|
|
811
|
-
"mfa.enroll.error.invalidCode": "\u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D. \u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0648\u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
|
|
812
|
-
"mfaGate.title": "\u0625\u0639\u062F\u0627\u062F \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629 \u0645\u0637\u0644\u0648\u0628",
|
|
813
|
-
"mfaGate.body": "\u064A\u062A\u0637\u0644\u0628 \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629. \u0642\u0645 \u0628\u0625\u0639\u062F\u0627\u062F\u0647\u0627 \u0644\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
|
|
814
|
-
"mfa.challenge.title": "\u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u062B\u0646\u0627\u0626\u064A",
|
|
815
|
-
"mfa.challenge.totpHint": "\u0623\u062F\u062E\u0644 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0643\u0648\u0651\u0646 \u0645\u0646 6 \u0623\u0631\u0642\u0627\u0645 \u0645\u0646 \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629.",
|
|
816
|
-
"mfa.challenge.backupHint": "\u0623\u062F\u062E\u0644 \u0623\u062D\u062F \u0631\u0645\u0648\u0632 \u0627\u0644\u0627\u062D\u062A\u064A\u0627\u0637 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629 \u0644\u062F\u064A\u0643.",
|
|
817
|
-
"mfa.challenge.totpLabel": "\u0631\u0645\u0632 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629",
|
|
818
|
-
"mfa.challenge.backupLabel": "\u0631\u0645\u0632 \u0627\u0644\u0627\u062D\u062A\u064A\u0627\u0637",
|
|
819
|
-
"mfa.challenge.trustDevice": "\u0627\u0644\u0648\u062B\u0648\u0642 \u0628\u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632 \u0644\u0645\u062F\u0629 {days} \u064A\u0648\u0645\u064B\u0627",
|
|
820
|
-
"mfa.challenge.submit": "\u062A\u062D\u0642\u0642",
|
|
821
|
-
"mfa.challenge.useBackup": "\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0631\u0645\u0632 \u0627\u062D\u062A\u064A\u0627\u0637 \u0628\u062F\u0644\u064B\u0627 \u0645\u0646 \u0630\u0644\u0643",
|
|
822
|
-
"mfa.challenge.useTotp": "\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0628\u062F\u0644\u064B\u0627 \u0645\u0646 \u0630\u0644\u0643",
|
|
823
|
-
"mfa.challenge.useEmailOtp": "\u0623\u0631\u0633\u0644 \u0644\u064A \u0631\u0645\u0632\u064B\u0627 \u0628\u0627\u0644\u0628\u0631\u064A\u062F \u0628\u062F\u0644\u064B\u0627 \u0645\u0646 \u0630\u0644\u0643",
|
|
824
|
-
"mfa.challenge.otpHint": "\u0623\u062F\u062E\u0644 \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0630\u064A \u0623\u0631\u0633\u0644\u0646\u0627\u0647 \u0625\u0644\u0649 \u0628\u0631\u064A\u062F\u0643 \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A. \u062A\u0646\u062A\u0647\u064A \u0635\u0644\u0627\u062D\u064A\u062A\u0647 \u062E\u0644\u0627\u0644 3 \u062F\u0642\u0627\u0626\u0642.",
|
|
825
|
-
"mfa.challenge.otpLabel": "\u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0645\u0631\u0633\u0644 \u0628\u0627\u0644\u0628\u0631\u064A\u062F",
|
|
826
|
-
"mfa.challenge.resendOtp": "\u0625\u0639\u0627\u062F\u0629 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0631\u0645\u0632",
|
|
827
|
-
"mfa.challenge.error.invalidOtp": "\u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D \u0623\u0648 \u0645\u0646\u062A\u0647\u064A \u0627\u0644\u0635\u0644\u0627\u062D\u064A\u0629.",
|
|
828
|
-
"mfa.challenge.error.otpSendFailed": "\u062A\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0631\u0645\u0632.",
|
|
829
|
-
"backupCodes.title": "\u0631\u0645\u0648\u0632 \u0627\u0644\u0627\u062D\u062A\u064A\u0627\u0637",
|
|
830
|
-
"backupCodes.hint": "\u0623\u0646\u0634\u0626 \u0645\u062C\u0645\u0648\u0639\u0629 \u062C\u062F\u064A\u062F\u0629 \u0645\u0646 \u0631\u0645\u0648\u0632 \u0627\u0644\u0627\u062D\u062A\u064A\u0627\u0637 \u0623\u062D\u0627\u062F\u064A\u0629 \u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645. \u062A\u062A\u0648\u0642\u0641 \u0631\u0645\u0648\u0632\u0643 \u0627\u0644\u062D\u0627\u0644\u064A\u0629 \u0639\u0646 \u0627\u0644\u0639\u0645\u0644 \u0641\u0648\u0631\u064B\u0627.",
|
|
831
|
-
"backupCodes.submit": "\u0625\u0646\u0634\u0627\u0621 \u0631\u0645\u0648\u0632 \u062C\u062F\u064A\u062F\u0629",
|
|
832
|
-
"backupCodes.pending": "\u062C\u0627\u0631\u064D \u0627\u0644\u0625\u0646\u0634\u0627\u0621\u2026",
|
|
833
|
-
"backupCodes.error.failed": "\u062A\u0639\u0630\u0631 \u0625\u0646\u0634\u0627\u0621 \u0631\u0645\u0648\u0632 \u0627\u062D\u062A\u064A\u0627\u0637 \u062C\u062F\u064A\u062F\u0629.",
|
|
834
|
-
"mfa.challenge.error.invalidTotp": "\u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D.",
|
|
835
|
-
"mfa.challenge.error.invalidBackup": "\u0631\u0645\u0632 \u0627\u0644\u0627\u062D\u062A\u064A\u0627\u0637 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D.",
|
|
836
|
-
"passkeys.title": "\u0645\u0641\u0627\u062A\u064A\u062D \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
837
|
-
"passkeys.signedOut": "\u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0644\u0625\u062F\u0627\u0631\u0629 \u0645\u0641\u0627\u062A\u064A\u062D \u0627\u0644\u0645\u0631\u0648\u0631.",
|
|
838
|
-
"passkeys.empty": "\u0644\u0627 \u062A\u0648\u062C\u062F \u0645\u0641\u0627\u062A\u064A\u062D \u0645\u0631\u0648\u0631 \u0628\u0639\u062F.",
|
|
839
|
-
"passkeys.unnamed": "\u0645\u0641\u062A\u0627\u062D \u0645\u0631\u0648\u0631",
|
|
840
|
-
"passkeys.rename": "\u0625\u0639\u0627\u062F\u0629 \u062A\u0633\u0645\u064A\u0629",
|
|
841
|
-
"passkeys.remove": "\u0625\u0632\u0627\u0644\u0629",
|
|
842
|
-
"passkeys.removeConfirm": "\u0647\u0644 \u062A\u0631\u064A\u062F \u0625\u0632\u0627\u0644\u0629 {name} \u0645\u0646 \u0647\u0630\u0627 \u0627\u0644\u062D\u0633\u0627\u0628\u061F",
|
|
843
|
-
"passkeys.add": "\u0625\u0636\u0627\u0641\u0629 \u0645\u0641\u062A\u0627\u062D \u0645\u0631\u0648\u0631",
|
|
844
|
-
"passkeys.renamePrompt": "\u0627\u0633\u0645 \u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
845
|
-
"passkeys.error.loadFailed": "\u062A\u0639\u0630\u0631 \u062A\u062D\u0645\u064A\u0644 \u0645\u0641\u0627\u062A\u064A\u062D \u0627\u0644\u0645\u0631\u0648\u0631.",
|
|
846
|
-
"passkeys.error.renameFailed": "\u062A\u0639\u0630\u0631 \u0625\u0639\u0627\u062F\u0629 \u062A\u0633\u0645\u064A\u0629 \u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0645\u0631\u0648\u0631.",
|
|
847
|
-
"passkeys.error.removeFailed": "\u062A\u0639\u0630\u0631 \u0625\u0632\u0627\u0644\u0629 \u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0645\u0631\u0648\u0631.",
|
|
848
|
-
"passkeys.error.addFailed": "\u062A\u0639\u0630\u0631 \u0625\u0636\u0627\u0641\u0629 \u0645\u0641\u062A\u0627\u062D \u0645\u0631\u0648\u0631.",
|
|
849
|
-
"consent.gateTitle": "\u062A\u0645 \u062A\u062D\u062F\u064A\u062B \u0634\u0631\u0648\u0637\u0646\u0627",
|
|
850
|
-
"consent.gateBody": "\u064A\u0631\u062C\u0649 \u0645\u0631\u0627\u062C\u0639\u0629 {links} \u0648\u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0639\u0644\u064A\u0647\u0627 \u0644\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
|
|
851
|
-
"consent.termsOfService": "\u0634\u0631\u0648\u0637 \u0627\u0644\u062E\u062F\u0645\u0629",
|
|
852
|
-
"consent.privacyPolicy": "\u0633\u064A\u0627\u0633\u0629 \u0627\u0644\u062E\u0635\u0648\u0635\u064A\u0629",
|
|
853
|
-
"consent.docJoiner": " \u0648",
|
|
854
|
-
"consent.acceptPending": "\u062C\u0627\u0631\u064D \u0627\u0644\u062D\u0641\u0638\u2026",
|
|
855
|
-
"consent.acceptSubmit": "\u0623\u0648\u0627\u0641\u0642",
|
|
856
|
-
"consent.error.acceptFailed": "\u062A\u0639\u0630\u0631 \u062A\u0633\u062C\u064A\u0644 \u0645\u0648\u0627\u0641\u0642\u062A\u0643. \u064A\u0631\u062C\u0649 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
|
|
857
|
-
"userProfile.title": "\u0625\u062F\u0627\u0631\u0629 \u0627\u0644\u062D\u0633\u0627\u0628",
|
|
858
|
-
"userProfile.description": "\u062D\u062F\u0651\u062B \u0645\u0644\u0641\u0643 \u0627\u0644\u0634\u062E\u0635\u064A \u0648\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0623\u0645\u0627\u0646 \u0627\u0644\u062D\u0633\u0627\u0628.",
|
|
859
|
-
"userProfile.close": "\u0625\u063A\u0644\u0627\u0642 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062D\u0633\u0627\u0628",
|
|
860
|
-
"userProfile.signedOut": "\u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0644\u0625\u062F\u0627\u0631\u0629 \u062D\u0633\u0627\u0628\u0643.",
|
|
861
|
-
"userProfile.save": "\u062D\u0641\u0638 \u0627\u0644\u062A\u063A\u064A\u064A\u0631\u0627\u062A",
|
|
862
|
-
"userProfile.retry": "\u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649",
|
|
863
|
-
"userProfile.cancel": "\u0625\u0644\u063A\u0627\u0621",
|
|
864
|
-
"userProfile.nav.aria": "\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062D\u0633\u0627\u0628",
|
|
865
|
-
"userProfile.nav.profile": "\u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062E\u0635\u064A",
|
|
866
|
-
"userProfile.nav.email": "\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A",
|
|
867
|
-
"userProfile.nav.password": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
868
|
-
"userProfile.nav.social": "\u0627\u0644\u062D\u0633\u0627\u0628\u0627\u062A \u0627\u0644\u0645\u0631\u062A\u0628\u0637\u0629",
|
|
869
|
-
"userProfile.nav.sessions": "\u0627\u0644\u062C\u0644\u0633\u0627\u062A",
|
|
870
|
-
"userProfile.nav.passkeys": "\u0645\u0641\u0627\u062A\u064A\u062D \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
871
|
-
"userProfile.nav.mfa": "\u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629",
|
|
872
|
-
"userProfile.nav.recovery": "\u0627\u0644\u0627\u0633\u062A\u0631\u062F\u0627\u062F",
|
|
873
|
-
"userProfile.nav.danger": "\u062D\u0630\u0641 \u0627\u0644\u062D\u0633\u0627\u0628",
|
|
874
|
-
"userProfile.profile.title": "\u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062E\u0635\u064A",
|
|
875
|
-
"userProfile.profile.description": "\u0627\u062E\u062A\u0631 \u0637\u0631\u064A\u0642\u0629 \u0638\u0647\u0648\u0631 \u0627\u0633\u0645\u0643 \u0648\u0635\u0648\u0631\u062A\u0643.",
|
|
876
|
-
"userProfile.profile.imageLabel": "\u0631\u0627\u0628\u0637 \u0635\u0648\u0631\u0629 \u0627\u0644\u062D\u0633\u0627\u0628",
|
|
877
|
-
"userProfile.profile.saved": "\u062A\u0645 \u062A\u062D\u062F\u064A\u062B \u0645\u0644\u0641\u0643 \u0627\u0644\u0634\u062E\u0635\u064A.",
|
|
878
|
-
"userProfile.profile.error": "\u062A\u0639\u0630\u0631 \u062A\u062D\u062F\u064A\u062B \u0645\u0644\u0641\u0643 \u0627\u0644\u0634\u062E\u0635\u064A.",
|
|
879
|
-
"userProfile.email.title": "\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A",
|
|
880
|
-
"userProfile.email.description": "\u064A\u062C\u0628 \u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u062C\u062F\u064A\u062F \u0642\u0628\u0644 \u0623\u0646 \u064A\u062D\u0644 \u0645\u062D\u0644 \u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u062D\u0627\u0644\u064A.",
|
|
881
|
-
"userProfile.email.current": "\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u062D\u0627\u0644\u064A",
|
|
882
|
-
"userProfile.email.newLabel": "\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0627\u0644\u062C\u062F\u064A\u062F",
|
|
883
|
-
"userProfile.email.submit": "\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A",
|
|
884
|
-
"userProfile.email.sent": "\u062A\u062D\u0642\u0642 \u0645\u0646 \u0628\u0631\u064A\u062F\u0643 \u0644\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062A\u063A\u064A\u064A\u0631 \u0648\u062A\u0623\u0643\u064A\u062F\u0647.",
|
|
885
|
-
"userProfile.email.unavailable": "\u0647\u0630\u0627 \u0627\u0644\u062D\u0633\u0627\u0628 \u0644\u0627 \u064A\u0633\u062A\u062E\u062F\u0645 \u0628\u0631\u064A\u062F\u064B\u0627 \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A\u064B\u0627.",
|
|
886
|
-
"userProfile.email.error": "\u062A\u0639\u0630\u0631 \u0628\u062F\u0621 \u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A.",
|
|
887
|
-
"userProfile.email.changeDisabled": "\u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0644\u0627 \u064A\u0633\u0645\u062D \u0644\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u064A\u0646 \u0628\u062A\u063A\u064A\u064A\u0631 \u0628\u0631\u064A\u062F\u0647\u0645 \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A.",
|
|
888
|
-
"userProfile.password.title": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
889
|
-
"userProfile.password.description": "\u0633\u064A\u0624\u062F\u064A \u062A\u063A\u064A\u064A\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0625\u0644\u0649 \u062A\u0633\u062C\u064A\u0644 \u062E\u0631\u0648\u062C \u0627\u0644\u062C\u0644\u0633\u0627\u062A \u0627\u0644\u0623\u062E\u0631\u0649.",
|
|
890
|
-
"userProfile.password.currentLabel": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062D\u0627\u0644\u064A\u0629",
|
|
891
|
-
"userProfile.password.submit": "\u062A\u063A\u064A\u064A\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
892
|
-
"userProfile.password.saved": "\u062A\u0645 \u062A\u063A\u064A\u064A\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631.",
|
|
893
|
-
"userProfile.password.error": "\u062A\u0639\u0630\u0631 \u062A\u063A\u064A\u064A\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631.",
|
|
894
|
-
"userProfile.social.title": "\u0627\u0644\u062D\u0633\u0627\u0628\u0627\u062A \u0627\u0644\u0645\u0631\u062A\u0628\u0637\u0629",
|
|
895
|
-
"userProfile.social.description": "\u0623\u062F\u0631 \u0627\u0644\u062D\u0633\u0627\u0628\u0627\u062A \u0627\u0644\u0627\u062C\u062A\u0645\u0627\u0639\u064A\u0629 \u0627\u0644\u062A\u064A \u064A\u0645\u0643\u0646\u0643 \u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u0627 \u0644\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644.",
|
|
896
|
-
"userProfile.social.connected": "\u0645\u0631\u062A\u0628\u0637",
|
|
897
|
-
"userProfile.social.disconnect": "\u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u0631\u0628\u0637",
|
|
898
|
-
"userProfile.social.confirmDisconnect": "\u0647\u0644 \u062A\u0631\u064A\u062F \u0625\u0644\u063A\u0627\u0621 \u0631\u0628\u0637 {provider} \u0628\u0647\u0630\u0627 \u0627\u0644\u062D\u0633\u0627\u0628\u061F",
|
|
899
|
-
"userProfile.social.lastMethod": "\u0623\u0636\u0641 \u0637\u0631\u064A\u0642\u0629 \u062A\u0633\u062C\u064A\u0644 \u062F\u062E\u0648\u0644 \u0623\u062E\u0631\u0649 \u0642\u0628\u0644 \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u0631\u0628\u0637",
|
|
900
|
-
"userProfile.social.empty": "\u0644\u0627 \u062A\u0648\u062C\u062F \u062D\u0633\u0627\u0628\u0627\u062A \u0627\u062C\u062A\u0645\u0627\u0639\u064A\u0629 \u0645\u0631\u062A\u0628\u0637\u0629.",
|
|
901
|
-
"userProfile.social.add": "\u0625\u0636\u0627\u0641\u0629 \u062D\u0633\u0627\u0628 \u0622\u062E\u0631",
|
|
902
|
-
"userProfile.social.connectProvider": "\u0631\u0628\u0637 {provider}",
|
|
903
|
-
"userProfile.social.loadError": "\u062A\u0639\u0630\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062D\u0633\u0627\u0628\u0627\u062A \u0627\u0644\u0645\u0631\u062A\u0628\u0637\u0629.",
|
|
904
|
-
"userProfile.social.linkError": "\u062A\u0639\u0630\u0631 \u0631\u0628\u0637 \u0647\u0630\u0627 \u0627\u0644\u062D\u0633\u0627\u0628.",
|
|
905
|
-
"userProfile.social.unlinkError": "\u062A\u0639\u0630\u0631 \u0625\u0644\u063A\u0627\u0621 \u0631\u0628\u0637 \u0647\u0630\u0627 \u0627\u0644\u062D\u0633\u0627\u0628.",
|
|
906
|
-
"userProfile.sessions.title": "\u0627\u0644\u062C\u0644\u0633\u0627\u062A \u0627\u0644\u0646\u0634\u0637\u0629",
|
|
907
|
-
"userProfile.sessions.description": "\u0631\u0627\u062C\u0639 \u0627\u0644\u0623\u062C\u0647\u0632\u0629 \u0627\u0644\u0645\u0633\u062C\u0651\u0644 \u062F\u062E\u0648\u0644\u0647\u0627 \u0625\u0644\u0649 \u062D\u0633\u0627\u0628\u0643.",
|
|
908
|
-
"userProfile.sessions.current": "\u0627\u0644\u062C\u0647\u0627\u0632 \u0627\u0644\u062D\u0627\u0644\u064A \xB7 ",
|
|
909
|
-
"userProfile.sessions.unknownDevice": "\u062C\u0647\u0627\u0632 \u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641",
|
|
910
|
-
"userProfile.sessions.revoke": "\u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u062C\u0644\u0633\u0629",
|
|
911
|
-
"userProfile.sessions.revokeOthers": "\u0625\u0644\u063A\u0627\u0621 \u0643\u0644 \u0627\u0644\u062C\u0644\u0633\u0627\u062A \u0627\u0644\u0623\u062E\u0631\u0649",
|
|
912
|
-
"userProfile.sessions.empty": "\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u062C\u0644\u0633\u0627\u062A \u0646\u0634\u0637\u0629.",
|
|
913
|
-
"userProfile.sessions.confirm": "\u0647\u0644 \u062A\u0631\u064A\u062F \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u062C\u0644\u0633\u0629 \u0639\u0644\u0649 {device}\u061F",
|
|
914
|
-
"userProfile.sessions.confirmOthers": "\u0647\u0644 \u062A\u0631\u064A\u062F \u0625\u0644\u063A\u0627\u0621 \u0643\u0644 \u0627\u0644\u062C\u0644\u0633\u0627\u062A \u0628\u0627\u0633\u062A\u062B\u0646\u0627\u0621 \u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632\u061F",
|
|
915
|
-
"userProfile.sessions.loadError": "\u062A\u0639\u0630\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u062C\u0644\u0633\u0627\u062A \u0627\u0644\u0646\u0634\u0637\u0629.",
|
|
916
|
-
"userProfile.sessions.revokeError": "\u062A\u0639\u0630\u0631 \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u062C\u0644\u0633\u0629.",
|
|
917
|
-
"userProfile.passkeys.title": "\u0645\u0641\u0627\u062A\u064A\u062D \u0627\u0644\u0645\u0631\u0648\u0631",
|
|
918
|
-
"userProfile.passkeys.description": "\u0627\u0633\u062A\u062E\u062F\u0645 \u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0639\u062A\u0645\u0627\u062F \u0645\u0631\u062A\u0628\u0637\u0629 \u0628\u062C\u0647\u0627\u0632\u0643 \u0644\u062A\u0633\u062C\u064A\u0644 \u062F\u062E\u0648\u0644 \u0633\u0631\u064A\u0639 \u0648\u0645\u0642\u0627\u0648\u0645 \u0644\u0644\u062A\u0635\u064A\u062F.",
|
|
919
|
-
"userProfile.mfa.title": "\u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629",
|
|
920
|
-
"userProfile.mfa.description": "\u0623\u0636\u0641 \u062A\u0637\u0628\u064A\u0642 \u0645\u0635\u0627\u062F\u0642\u0629 \u0643\u062E\u0637\u0648\u0629 \u062A\u062D\u0642\u0642 \u062B\u0627\u0646\u064A\u0629 \u0639\u0646\u062F \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644.",
|
|
921
|
-
"userProfile.mfa.requiredDescription": "\u064A\u062A\u0637\u0644\u0628 \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0625\u0639\u062F\u0627\u062F \u062A\u0637\u0628\u064A\u0642 \u0645\u0635\u0627\u062F\u0642\u0629 \u0642\u0628\u0644 \u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
|
|
922
|
-
"userProfile.mfa.active": "\u064A\u0637\u0644\u0628 \u062D\u0633\u0627\u0628\u0643 \u0631\u0645\u0632\u064B\u0627 \u0645\u0646 \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0639\u0646\u062F \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644.",
|
|
923
|
-
"userProfile.mfa.requiredActive": "\u064A\u0641\u0631\u0636 \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629 \u0639\u0644\u0649 \u062D\u0633\u0627\u0628\u0643.",
|
|
924
|
-
"userProfile.mfa.enabled": "\u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629 \u0645\u0641\u0639\u0644\u0629",
|
|
925
|
-
"userProfile.mfa.authenticator": "\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629",
|
|
926
|
-
"userProfile.mfa.disable": "\u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629",
|
|
927
|
-
"userProfile.mfa.replace": "\u0627\u0633\u062A\u0628\u062F\u0627\u0644 \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629",
|
|
928
|
-
"userProfile.mfa.disableWarning": "\u064A\u0624\u062F\u064A \u0627\u0644\u0625\u064A\u0642\u0627\u0641 \u0625\u0644\u0649 \u0625\u0632\u0627\u0644\u0629 \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0648\u0625\u0628\u0637\u0627\u0644 \u0631\u0645\u0648\u0632 \u0627\u0644\u0627\u0633\u062A\u0631\u062F\u0627\u062F \u0627\u0644\u062D\u0627\u0644\u064A\u0629.",
|
|
929
|
-
"userProfile.mfa.replaceWarning": "\u064A\u0641\u0631\u0636 \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629. \u0633\u062A\u062A\u0645 \u0645\u0637\u0627\u0644\u0628\u062A\u0643 \u0628\u0625\u0639\u062F\u0627\u062F \u0628\u062F\u064A\u0644 \u0641\u0648\u0631 \u0625\u0632\u0627\u0644\u0629 \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062D\u0627\u0644\u064A.",
|
|
930
|
-
"userProfile.mfa.disableConfirm": "\u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629",
|
|
931
|
-
"userProfile.mfa.replaceConfirm": "\u0625\u0632\u0627\u0644\u0629 \u0648\u0627\u0633\u062A\u0628\u062F\u0627\u0644",
|
|
932
|
-
"userProfile.mfa.disableError": "\u062A\u0639\u0630\u0631 \u062A\u062D\u062F\u064A\u062B \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629.",
|
|
933
|
-
"userProfile.recovery.title": "\u0627\u0633\u062A\u0631\u062F\u0627\u062F \u0627\u0644\u062D\u0633\u0627\u0628",
|
|
934
|
-
"userProfile.recovery.description": "\u062C\u0647\u0651\u0632 \u0637\u0631\u0642\u064B\u0627 \u0622\u0645\u0646\u0629 \u0644\u0625\u0643\u0645\u0627\u0644 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0625\u0630\u0627 \u0641\u0642\u062F\u062A \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629.",
|
|
935
|
-
"userProfile.recovery.emailTitle": "\u0627\u0644\u0627\u0633\u062A\u0631\u062F\u0627\u062F \u0639\u0628\u0631 \u0627\u0644\u0628\u0631\u064A\u062F",
|
|
936
|
-
"userProfile.recovery.emailDescription": "\u0645\u0646 \u0634\u0627\u0634\u0629 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629 \u0639\u0646\u062F \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644\u060C \u064A\u0645\u0643\u0646\u0643 \u0637\u0644\u0628 \u0631\u0645\u0632 \u0627\u0633\u062A\u0631\u062F\u0627\u062F \u0642\u0635\u064A\u0631 \u0627\u0644\u0635\u0644\u0627\u062D\u064A\u0629 \u0639\u0644\u0649:",
|
|
937
|
-
"userProfile.recovery.emailUnavailable": "\u0623\u0636\u0641 \u0628\u0631\u064A\u062F\u064B\u0627 \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A\u064B\u0627 \u0648\u0641\u0639\u0651\u0644\u0647 \u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0627\u0633\u062A\u0631\u062F\u0627\u062F \u0639\u0628\u0631 \u0627\u0644\u0628\u0631\u064A\u062F.",
|
|
938
|
-
"userProfile.delete.title": "\u062D\u0630\u0641 \u0627\u0644\u062D\u0633\u0627\u0628",
|
|
939
|
-
"userProfile.delete.description": "\u0623\u0632\u0644 \u0647\u0648\u064A\u062A\u0643 \u0648\u062C\u0644\u0633\u0627\u062A\u0643 \u0648\u0637\u0631\u0642 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0627\u0644\u0645\u0631\u062A\u0628\u0637\u0629 \u0646\u0647\u0627\u0626\u064A\u064B\u0627 \u0645\u0646 \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642.",
|
|
940
|
-
"userProfile.delete.warning": "\u0644\u0627 \u064A\u0645\u0643\u0646 \u0627\u0644\u062A\u0631\u0627\u062C\u0639 \u0639\u0646 \u0647\u0630\u0627 \u0627\u0644\u0625\u062C\u0631\u0627\u0621. \u0633\u064A\u064F\u062D\u0630\u0641 \u0627\u0644\u062D\u0633\u0627\u0628 {identifier} \u0646\u0647\u0627\u0626\u064A\u064B\u0627.",
|
|
941
|
-
"userProfile.delete.confirmLabel": "\u0627\u0643\u062A\u0628 \u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u062D\u0633\u0627\u0628 \u0647\u0630\u0627 \u0644\u0644\u062A\u0623\u0643\u064A\u062F:",
|
|
942
|
-
"userProfile.delete.submit": "\u062D\u0630\u0641 \u0627\u0644\u062D\u0633\u0627\u0628 \u0646\u0647\u0627\u0626\u064A\u064B\u0627",
|
|
943
|
-
"userProfile.delete.error": "\u062A\u0639\u0630\u0631 \u062D\u0630\u0641 \u062D\u0633\u0627\u0628\u0643.",
|
|
944
|
-
"organization.loading": "\u062C\u0627\u0631\u064D \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062A",
|
|
945
|
-
"organization.signedOut": "\u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0644\u0625\u062F\u0627\u0631\u0629 \u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062A.",
|
|
946
|
-
"organization.retry": "\u0623\u0639\u062F \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629",
|
|
947
|
-
"organization.close": "\u0625\u063A\u0644\u0627\u0642 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
948
|
-
"organization.personal": "\u0627\u0644\u062D\u0633\u0627\u0628 \u0627\u0644\u0634\u062E\u0635\u064A",
|
|
949
|
-
"organization.error.load": "\u062A\u0639\u0630\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062A.",
|
|
950
|
-
"organization.role.owner": "\u0645\u0627\u0644\u0643",
|
|
951
|
-
"organization.role.admin": "\u0645\u0634\u0631\u0641",
|
|
952
|
-
"organization.role.member": "\u0639\u0636\u0648",
|
|
953
|
-
"organization.switcher.label": "\u062A\u0628\u062F\u064A\u0644 \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
954
|
-
"organization.switcher.manage": "\u0625\u062F\u0627\u0631\u0629 \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
955
|
-
"organization.switcher.create": "\u0625\u0646\u0634\u0627\u0621 \u0645\u0624\u0633\u0633\u0629",
|
|
956
|
-
"organization.switcher.error": "\u062A\u0639\u0630\u0631 \u062A\u0628\u062F\u064A\u0644 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
957
|
-
"organization.create.title": "\u0625\u0646\u0634\u0627\u0621 \u0645\u0624\u0633\u0633\u0629",
|
|
958
|
-
"organization.create.description": "\u0623\u0646\u0634\u0626 \u0645\u0633\u0627\u062D\u0629 \u0639\u0645\u0644 \u0644\u0641\u0631\u064A\u0642\u0643 \u0648\u0627\u062E\u062A\u0631 \u0627\u0644\u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u0639\u0627\u0645 \u0644\u0647\u0627.",
|
|
959
|
-
"organization.create.name": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
960
|
-
"organization.create.slug": "\u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
961
|
-
"organization.create.logo": "\u0631\u0627\u0628\u0637 \u0627\u0644\u0634\u0639\u0627\u0631",
|
|
962
|
-
"organization.create.submit": "\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
963
|
-
"organization.create.error": "\u062A\u0639\u0630\u0631 \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
964
|
-
"organization.list.title": "\u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062A",
|
|
965
|
-
"organization.list.description": "\u0628\u062F\u0651\u0644 \u0645\u0633\u0627\u062D\u0627\u062A \u0627\u0644\u0639\u0645\u0644 \u0623\u0648 \u0631\u0627\u062C\u0639 \u0627\u0644\u062F\u0639\u0648\u0627\u062A \u0623\u0648 \u0623\u062F\u0631 \u0641\u0631\u064A\u0642\u064B\u0627.",
|
|
966
|
-
"organization.list.empty": "\u0644\u0633\u062A \u0639\u0636\u0648\u064B\u0627 \u0641\u064A \u0623\u064A \u0645\u0624\u0633\u0633\u0629 \u0628\u0639\u062F.",
|
|
967
|
-
"organization.list.active": "\u0646\u0634\u0637\u0629",
|
|
968
|
-
"organization.list.switch": "\u062A\u0628\u062F\u064A\u0644",
|
|
969
|
-
"organization.list.manage": "\u0625\u062F\u0627\u0631\u0629",
|
|
970
|
-
"organization.list.invitationsTitle": "\u062F\u0639\u0648\u0627\u062A\u0643",
|
|
971
|
-
"organization.list.invitationsDescription": "\u0627\u0642\u0628\u0644 \u0623\u0648 \u0627\u0631\u0641\u0636 \u0627\u0644\u062F\u0639\u0648\u0627\u062A \u0627\u0644\u0645\u0631\u0633\u0644\u0629 \u0625\u0644\u0649 \u0628\u0631\u064A\u062F\u0643 \u0627\u0644\u0645\u0641\u0639\u0651\u0644.",
|
|
972
|
-
"organization.list.noInvitations": "\u0644\u0627 \u062A\u0648\u062C\u062F \u062F\u0639\u0648\u0627\u062A \u0645\u0639\u0644\u0642\u0629.",
|
|
973
|
-
"organization.list.invitationsError": "\u062A\u0639\u0630\u0631 \u062A\u062D\u0645\u064A\u0644 \u062F\u0639\u0648\u0627\u062A \u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062A.",
|
|
974
|
-
"organization.list.accept": "\u0642\u0628\u0648\u0644",
|
|
975
|
-
"organization.list.reject": "\u0631\u0641\u0636",
|
|
976
|
-
"organization.list.acceptError": "\u062A\u0639\u0630\u0631 \u0642\u0628\u0648\u0644 \u0627\u0644\u062F\u0639\u0648\u0629.",
|
|
977
|
-
"organization.list.rejectError": "\u062A\u0639\u0630\u0631 \u0631\u0641\u0636 \u0627\u0644\u062F\u0639\u0648\u0629.",
|
|
978
|
-
"organization.profile.title": "\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
979
|
-
"organization.profile.loadError": "\u062A\u0639\u0630\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
980
|
-
"organization.profile.noActive": "\u0627\u062E\u062A\u0631 \u0645\u0624\u0633\u0633\u0629 \u0644\u0625\u062F\u0627\u0631\u062A\u0647\u0627.",
|
|
981
|
-
"organization.profile.notMember": "\u0644\u0645 \u062A\u0639\u062F \u0639\u0636\u0648\u064B\u0627 \u0641\u064A \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
982
|
-
"organization.profile.nav.label": "\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
983
|
-
"organization.profile.nav.general": "\u0639\u0627\u0645",
|
|
984
|
-
"organization.profile.nav.members": "\u0627\u0644\u0623\u0639\u0636\u0627\u0621",
|
|
985
|
-
"organization.profile.nav.invitations": "\u0627\u0644\u062F\u0639\u0648\u0627\u062A",
|
|
986
|
-
"organization.profile.nav.danger": "\u0627\u0644\u0645\u063A\u0627\u062F\u0631\u0629 \u0623\u0648 \u0627\u0644\u062D\u0630\u0641",
|
|
987
|
-
"organization.profile.general.title": "\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
988
|
-
"organization.profile.general.description": "\u062D\u062F\u0651\u062B \u0627\u0644\u0627\u0633\u0645 \u0648\u0627\u0644\u0645\u0639\u0631\u0651\u0641 \u0648\u0627\u0644\u0634\u0639\u0627\u0631 \u0627\u0644\u0638\u0627\u0647\u0631 \u0644\u0644\u0623\u0639\u0636\u0627\u0621.",
|
|
989
|
-
"organization.profile.general.readOnly": "\u064A\u0645\u0643\u0646 \u0644\u0644\u0645\u0627\u0644\u0643\u064A\u0646 \u0648\u0627\u0644\u0645\u0634\u0631\u0641\u064A\u0646 \u0641\u0642\u0637 \u062A\u0639\u062F\u064A\u0644 \u0647\u0630\u0647 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A.",
|
|
990
|
-
"organization.profile.general.save": "\u062D\u0641\u0638 \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
991
|
-
"organization.profile.general.error": "\u062A\u0639\u0630\u0631 \u062A\u062D\u062F\u064A\u062B \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
992
|
-
"organization.profile.members.title": "\u0627\u0644\u0623\u0639\u0636\u0627\u0621",
|
|
993
|
-
"organization.profile.members.description": "\u0631\u0627\u062C\u0639 \u0627\u0644\u0635\u0644\u0627\u062D\u064A\u0627\u062A \u0623\u0648 \u0631\u0642\u0651 \u0645\u0627\u0644\u0643\u064B\u0627 \u0622\u062E\u0631 \u0623\u0648 \u0623\u0632\u0644 \u0639\u0636\u0648\u064B\u0627.",
|
|
994
|
-
"organization.profile.members.you": "(\u0623\u0646\u062A)",
|
|
995
|
-
"organization.profile.members.role": "\u0627\u0644\u062F\u0648\u0631",
|
|
996
|
-
"organization.profile.members.roleConfirm": "\u0647\u0644 \u062A\u0631\u064A\u062F \u062A\u063A\u064A\u064A\u0631 \u062F\u0648\u0631 {name} \u0625\u0644\u0649 {role}\u061F",
|
|
997
|
-
"organization.profile.members.roleError": "\u062A\u0639\u0630\u0631 \u062A\u062D\u062F\u064A\u062B \u062F\u0648\u0631 \u0627\u0644\u0639\u0636\u0648.",
|
|
998
|
-
"organization.profile.members.remove": "\u0625\u0632\u0627\u0644\u0629",
|
|
999
|
-
"organization.profile.members.removeConfirm": "\u0647\u0644 \u062A\u0631\u064A\u062F \u0625\u0632\u0627\u0644\u0629 {name} \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629\u061F",
|
|
1000
|
-
"organization.profile.members.removeError": "\u062A\u0639\u0630\u0631 \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0639\u0636\u0648.",
|
|
1001
|
-
"organization.profile.invitations.title": "\u0627\u0644\u062F\u0639\u0648\u0627\u062A",
|
|
1002
|
-
"organization.profile.invitations.description": "\u0627\u062F\u0639\u064F \u0632\u0645\u0644\u0627\u0621\u0643 \u0648\u0623\u062F\u0631 \u0627\u0644\u062F\u0639\u0648\u0627\u062A \u0627\u0644\u062A\u064A \u0644\u0645 \u062A\u064F\u0642\u0628\u0644 \u0628\u0639\u062F.",
|
|
1003
|
-
"organization.profile.invitations.email": "\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A",
|
|
1004
|
-
"organization.profile.invitations.invite": "\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u062F\u0639\u0648\u0629",
|
|
1005
|
-
"organization.profile.invitations.inviteError": "\u062A\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u062F\u0639\u0648\u0629.",
|
|
1006
|
-
"organization.profile.invitations.empty": "\u0644\u0627 \u062A\u0648\u062C\u062F \u062F\u0639\u0648\u0627\u062A \u0645\u0639\u0644\u0642\u0629.",
|
|
1007
|
-
"organization.profile.invitations.cancel": "\u0625\u0644\u063A\u0627\u0621",
|
|
1008
|
-
"organization.profile.invitations.cancelConfirm": "\u0647\u0644 \u062A\u0631\u064A\u062F \u0625\u0644\u063A\u0627\u0621 \u062F\u0639\u0648\u0629 {email}\u061F",
|
|
1009
|
-
"organization.profile.invitations.cancelError": "\u062A\u0639\u0630\u0631 \u0625\u0644\u063A\u0627\u0621 \u0627\u0644\u062F\u0639\u0648\u0629.",
|
|
1010
|
-
"organization.profile.danger.title": "\u0627\u0644\u0645\u063A\u0627\u062F\u0631\u0629 \u0623\u0648 \u0627\u0644\u062D\u0630\u0641",
|
|
1011
|
-
"organization.profile.danger.description": "\u062A\u0624\u062B\u0631 \u0647\u0630\u0647 \u0627\u0644\u062A\u063A\u064A\u064A\u0631\u0627\u062A \u0641\u064A \u0648\u0635\u0648\u0644\u0643 \u0623\u0648 \u0641\u064A \u0627\u0644\u0641\u0631\u064A\u0642 \u0628\u0623\u0643\u0645\u0644\u0647.",
|
|
1012
|
-
"organization.profile.danger.leaveTitle": "\u0645\u063A\u0627\u062F\u0631\u0629 \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
1013
|
-
"organization.profile.danger.leaveHint": "\u0633\u062A\u0641\u0642\u062F \u0635\u0644\u0627\u062D\u064A\u0629 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1014
|
-
"organization.profile.danger.ownerLeaveHint": "\u0631\u0642\u0651 \u0639\u0636\u0648\u064B\u0627 \u0622\u062E\u0631 \u0625\u0644\u0649 \u0645\u0627\u0644\u0643 \u0642\u0628\u0644 \u0645\u063A\u0627\u062F\u0631\u0629 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1015
|
-
"organization.profile.danger.leave": "\u0645\u063A\u0627\u062F\u0631\u0629 \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
1016
|
-
"organization.profile.danger.leaveConfirm": "\u0647\u0644 \u062A\u0631\u064A\u062F \u0645\u063A\u0627\u062F\u0631\u0629 {name}\u061F",
|
|
1017
|
-
"organization.profile.danger.leaveError": "\u062A\u0639\u0630\u0631 \u0645\u063A\u0627\u062F\u0631\u0629 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1018
|
-
"organization.profile.danger.deleteTitle": "\u062D\u0630\u0641 \u0627\u0644\u0645\u0624\u0633\u0633\u0629",
|
|
1019
|
-
"organization.profile.danger.deleteHint": "\u0627\u062D\u0630\u0641 \u0627\u0644\u0645\u0624\u0633\u0633\u0629 \u0648\u0639\u0636\u0648\u064A\u0627\u062A\u0647\u0627 \u0648\u062F\u0639\u0648\u0627\u062A\u0647\u0627 \u0627\u0644\u0645\u0639\u0644\u0642\u0629 \u0646\u0647\u0627\u0626\u064A\u064B\u0627.",
|
|
1020
|
-
"organization.profile.danger.deleteConfirm": "\u0627\u0643\u062A\u0628 \u0647\u0630\u0627 \u0627\u0644\u0645\u0639\u0631\u0651\u0641 \u0644\u0644\u062A\u0623\u0643\u064A\u062F:",
|
|
1021
|
-
"organization.profile.danger.delete": "\u062D\u0630\u0641 \u0627\u0644\u0645\u0624\u0633\u0633\u0629 \u0646\u0647\u0627\u0626\u064A\u064B\u0627",
|
|
1022
|
-
"organization.profile.danger.deleteError": "\u062A\u0639\u0630\u0631 \u062D\u0630\u0641 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1023
|
-
"userButton.manageAccount": "\u0625\u062F\u0627\u0631\u0629 \u0627\u0644\u062D\u0633\u0627\u0628",
|
|
1024
|
-
"userButton.signOut": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062E\u0631\u0648\u062C",
|
|
1025
|
-
"userButton.openMenuAria": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062D\u0633\u0627\u0628",
|
|
1026
|
-
"signOut.button": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062E\u0631\u0648\u062C",
|
|
1027
|
-
"badge.securedBy": "\u0645\u062D\u0645\u064A \u0628\u0648\u0627\u0633\u0637\u0629 {brand}",
|
|
1028
|
-
"qr.ariaLabel": "\u0631\u0645\u0632 QR",
|
|
1029
|
-
"serverError.INVALID_EMAIL_OR_PASSWORD": "\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0623\u0648 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u063A\u064A\u0631 \u0635\u062D\u064A\u062D\u0629.",
|
|
1030
|
-
"serverError.USER_ALREADY_EXISTS": "\u064A\u0648\u062C\u062F \u062D\u0633\u0627\u0628 \u0645\u0633\u062C\u0644 \u0628\u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0628\u0627\u0644\u0641\u0639\u0644.",
|
|
1031
|
-
"serverError.USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL": "\u064A\u0648\u062C\u062F \u062D\u0633\u0627\u0628 \u0645\u0633\u062C\u0644 \u0628\u0647\u0630\u0627 \u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0628\u0627\u0644\u0641\u0639\u0644.",
|
|
1032
|
-
"serverError.EMAIL_NOT_VERIFIED": "\u062A\u062D\u0642\u0642 \u0645\u0646 \u0628\u0631\u064A\u062F\u0643 \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0642\u0628\u0644 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644.",
|
|
1033
|
-
"serverError.TWO_FACTOR_REQUIRED": "\u064A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0627 \u0627\u0644\u062D\u0633\u0627\u0628 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629 - \u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0628\u062F\u0644\u064B\u0627 \u0645\u0646 \u0630\u0644\u0643.",
|
|
1034
|
-
"serverError.CONSENT_REQUIRED": "\u064A\u062C\u0628 \u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0639\u0644\u0649 \u0627\u0644\u0634\u0631\u0648\u0637 \u0644\u0625\u0646\u0634\u0627\u0621 \u062D\u0633\u0627\u0628.",
|
|
1035
|
-
"serverError.MAU_LIMIT_REACHED": "\u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0644\u0627 \u064A\u0642\u0628\u0644 \u062A\u0633\u062C\u064A\u0644\u0627\u062A \u062C\u062F\u064A\u062F\u0629 \u062D\u0627\u0644\u064A\u064B\u0627.",
|
|
1036
|
-
"serverError.MAU_BUDGET_REACHED": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062D\u0633\u0627\u0628\u0627\u062A \u0627\u0644\u062C\u062F\u064A\u062F\u0629 \u0645\u062A\u0648\u0642\u0641 \u0645\u0624\u0642\u062A\u064B\u0627 \u0644\u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642. \u064A\u064F\u0631\u062C\u0649 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0644\u0627\u062D\u0642\u064B\u0627.",
|
|
1037
|
-
"serverError.EMAIL_PASSWORD_DISABLED": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0645\u0639\u0637\u0651\u0644 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642.",
|
|
1038
|
-
"serverError.PASSWORD_COMPROMISED": "\u0638\u0647\u0631\u062A \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0647\u0630\u0647 \u0641\u064A \u062A\u0633\u0631\u064A\u0628 \u0628\u064A\u0627\u0646\u0627\u062A \u0645\u0639\u0631\u0648\u0641. \u064A\u064F\u0631\u062C\u0649 \u0627\u062E\u062A\u064A\u0627\u0631 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0645\u062E\u062A\u0644\u0641\u0629.",
|
|
1039
|
-
"serverError.PASSWORD_TOO_SHORT": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0642\u0635\u064A\u0631\u0629 \u062C\u062F\u064B\u0627. \u0627\u062E\u062A\u0631 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0623\u0637\u0648\u0644.",
|
|
1040
|
-
"serverError.PASSWORD_TOO_LONG": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0637\u0648\u064A\u0644\u0629 \u062C\u062F\u064B\u0627. \u0627\u062E\u062A\u0631 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0623\u0642\u0635\u0631.",
|
|
1041
|
-
"serverError.INVALID_EMAIL": "\u0623\u062F\u062E\u0644 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0635\u0627\u0644\u062D\u064B\u0627.",
|
|
1042
|
-
"serverError.BANNED_USER": "\u062A\u0645 \u062A\u0639\u0644\u064A\u0642 \u0647\u0630\u0627 \u0627\u0644\u062D\u0633\u0627\u0628. \u062A\u0648\u0627\u0635\u0644 \u0645\u0639 \u0645\u0627\u0644\u0643 \u0627\u0644\u062A\u0637\u0628\u064A\u0642.",
|
|
1043
|
-
"serverError.PASSWORD_RESET_REQUIRED": "\u0623\u0639\u062F \u062A\u0639\u064A\u064A\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0644\u0645\u062A\u0627\u0628\u0639\u0629 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644.",
|
|
1044
|
-
"serverError.PASSWORD_SIGNUP_REQUIRED": "\u064A\u062A\u0637\u0644\u0628 \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629. \u0623\u0646\u0634\u0626 \u062D\u0633\u0627\u0628\u0643 \u0628\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0648\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0644\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
|
|
1045
|
-
"serverError.SSO_EMAIL_DOMAIN_MISMATCH": "\u0645\u0632\u0648\u0651\u062F \u0627\u0644\u0647\u0648\u064A\u0629 \u0647\u0630\u0627 \u063A\u064A\u0631 \u0645\u0635\u0631\u0651\u062D \u0644\u0647 \u0628\u0646\u0637\u0627\u0642 \u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0647\u0630\u0627.",
|
|
1046
|
-
"serverError.MFA_ENROLLMENT_REQUIRED": "\u0623\u0643\u0645\u0644 \u0625\u0639\u062F\u0627\u062F \u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0629 \u0627\u0644\u062B\u0646\u0627\u0626\u064A\u0629 \u0644\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
|
|
1047
|
-
"serverError.TOO_MANY_ATTEMPTS": "\u0645\u062D\u0627\u0648\u0644\u0627\u062A \u0643\u062B\u064A\u0631\u0629 \u062C\u062F\u064B\u0627. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0628\u0639\u062F \u0642\u0644\u064A\u0644.",
|
|
1048
|
-
"serverError.ACCOUNT_TEMPORARILY_LOCKED": "\u062D\u0633\u0627\u0628\u0643 \u0645\u0642\u0641\u0644 \u0645\u0624\u0642\u062A\u064B\u0627. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0628\u0639\u062F \u0642\u0644\u064A\u0644.",
|
|
1049
|
-
"serverError.RATE_LIMITED.retryIn": "\u0645\u062D\u0627\u0648\u0644\u0627\u062A \u0643\u062B\u064A\u0631\u0629 \u062C\u062F\u064B\u0627. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0628\u0639\u062F {duration}.",
|
|
1050
|
-
"serverError.TOO_MANY_ATTEMPTS.retryIn": "\u0645\u062D\u0627\u0648\u0644\u0627\u062A \u0643\u062B\u064A\u0631\u0629 \u062C\u062F\u064B\u0627. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0628\u0639\u062F {duration}.",
|
|
1051
|
-
"serverError.ACCOUNT_TEMPORARILY_LOCKED.retryIn": "\u062D\u0633\u0627\u0628\u0643 \u0645\u0642\u0641\u0644 \u0645\u0624\u0642\u062A\u064B\u0627. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0628\u0639\u062F {duration}.",
|
|
1052
|
-
"serverError.RATE_LIMITED": "\u0645\u062D\u0627\u0648\u0644\u0627\u062A \u0643\u062B\u064A\u0631\u0629 \u062C\u062F\u064B\u0627. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0628\u0639\u062F \u0642\u0644\u064A\u0644.",
|
|
1053
|
-
"serverError.INVALID_PHONE_NUMBER": "\u0623\u062F\u062E\u0644 \u0631\u0642\u0645 \u0645\u0648\u0628\u0627\u064A\u0644 \u0645\u0635\u0631\u064A\u064B\u0627 \u0635\u0627\u0644\u062D\u064B\u0627.",
|
|
1054
|
-
"serverError.INVALID_PHONE_OTP": "\u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D \u0623\u0648 \u0645\u0646\u062A\u0647\u064A \u0627\u0644\u0635\u0644\u0627\u062D\u064A\u0629.",
|
|
1055
|
-
"serverError.TURNSTILE_FAILED": "\u0641\u0634\u0644 \u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0628\u0634\u0631\u064A. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
|
|
1056
|
-
"serverError.BOT_CHALLENGE_FAILED": "\u0641\u0634\u0644 \u0627\u0644\u062A\u062D\u0642\u0642 \u0627\u0644\u0628\u0634\u0631\u064A. \u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
|
|
1057
|
-
"serverError.SMS_LIMIT_REACHED": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0627\u0644\u0631\u0633\u0627\u0626\u0644 \u063A\u064A\u0631 \u0645\u062A\u0627\u062D \u0645\u0624\u0642\u062A\u064B\u0627 \u0644\u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642.",
|
|
1058
|
-
"serverError.SMS_UNAVAILABLE": "\u0627\u0644\u0631\u0633\u0627\u0626\u0644 \u063A\u064A\u0631 \u0645\u062A\u0627\u062D\u0629 \u0645\u0624\u0642\u062A\u064B\u0627. \u0627\u0633\u062A\u062E\u062F\u0645 \u0637\u0631\u064A\u0642\u0629 \u062A\u0633\u062C\u064A\u0644 \u062F\u062E\u0648\u0644 \u0623\u062E\u0631\u0649.",
|
|
1059
|
-
"serverError.PHONE_OTP_DISABLED": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0627\u0644\u0647\u0627\u062A\u0641 \u063A\u064A\u0631 \u0645\u062A\u0627\u062D \u0644\u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642.",
|
|
1060
|
-
"serverError.PHONE_OTP_PAUSED": "\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0628\u0627\u0644\u0647\u0627\u062A\u0641 \u0645\u062A\u0648\u0642\u0641 \u0645\u0624\u0642\u062A\u064B\u0627 \u0644\u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642.",
|
|
1061
|
-
"serverError.PHONE_OTP_UNAVAILABLE": "\u0627\u0644\u062A\u062D\u0642\u0642 \u0639\u0628\u0631 \u0627\u0644\u0647\u0627\u062A\u0641 \u063A\u064A\u0631 \u0645\u062A\u0627\u062D \u0645\u0624\u0642\u062A\u064B\u0627.",
|
|
1062
|
-
"serverError.SESSION_NOT_FRESH": "\u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0642\u0628\u0644 \u0625\u062C\u0631\u0627\u0621 \u0647\u0630\u0627 \u0627\u0644\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0623\u0645\u0646\u064A.",
|
|
1063
|
-
"serverError.PASSKEY_PAGE_NOT_FOCUSED": "\u0623\u0628\u0642\u0650 \u0647\u0630\u0647 \u0627\u0644\u0635\u0641\u062D\u0629 \u0645\u0641\u062A\u0648\u062D\u0629 \u0648\u0641\u064A \u0627\u0644\u0645\u0642\u062F\u0645\u0629 \u0623\u062B\u0646\u0627\u0621 \u0625\u0643\u0645\u0627\u0644 \u0625\u0639\u062F\u0627\u062F \u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0645\u0631\u0648\u0631.",
|
|
1064
|
-
"serverError.ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED": "\u064A\u0648\u062C\u062F \u0645\u0641\u062A\u0627\u062D \u0645\u0631\u0648\u0631 \u0644\u0647\u0630\u0627 \u0627\u0644\u062D\u0633\u0627\u0628 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632 \u0628\u0627\u0644\u0641\u0639\u0644. \u0627\u0633\u062A\u062E\u062F\u0645\u0647 \u0644\u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0623\u0648 \u0627\u062D\u0630\u0641\u0647 \u0645\u0646 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062C\u0647\u0627\u0632 \u0642\u0628\u0644 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
|
|
1065
|
-
"serverError.ORGANIZATION_LAST_OWNER": "\u0627\u0646\u0642\u0644 \u0645\u0644\u0643\u064A\u0629 \u0627\u0644\u0645\u0624\u0633\u0633\u0629 \u0642\u0628\u0644 \u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
|
|
1066
|
-
// P1-2 (drafted MSA - PENDING native-speaker review, per B.3 gate). These
|
|
1067
|
-
// localize the terse two-factor / OTP codes that previously surfaced English
|
|
1068
|
-
// via the server-message fallback.
|
|
1069
|
-
"serverError.INVALID_CODE": "\u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D. \u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0631\u0645\u0632 \u0648\u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
|
|
1070
|
-
"serverError.INVALID_BACKUP_CODE": "\u0631\u0645\u0632 \u0627\u0644\u0627\u062D\u062A\u064A\u0627\u0637 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D.",
|
|
1071
|
-
"serverError.INVALID_OTP": "\u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632 \u063A\u064A\u0631 \u0635\u0627\u0644\u062D \u0623\u0648 \u0645\u0646\u062A\u0647\u064A \u0627\u0644\u0635\u0644\u0627\u062D\u064A\u0629.",
|
|
1072
|
-
"serverError.OTP_EXPIRED": "\u0627\u0646\u062A\u0647\u062A \u0635\u0644\u0627\u062D\u064A\u0629 \u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632. \u0627\u0637\u0644\u0628 \u0631\u0645\u0632\u064B\u0627 \u062C\u062F\u064A\u062F\u064B\u0627.",
|
|
1073
|
-
"serverError.OTP_HAS_EXPIRED": "\u0627\u0646\u062A\u0647\u062A \u0635\u0644\u0627\u062D\u064A\u0629 \u0647\u0630\u0627 \u0627\u0644\u0631\u0645\u0632. \u0627\u0637\u0644\u0628 \u0631\u0645\u0632\u064B\u0627 \u062C\u062F\u064A\u062F\u064B\u0627.",
|
|
1074
|
-
"serverError.TOO_MANY_ATTEMPTS_REQUEST_NEW_CODE": "\u0645\u062D\u0627\u0648\u0644\u0627\u062A \u0643\u062B\u064A\u0631\u0629 \u062C\u062F\u064B\u0627. \u0627\u0637\u0644\u0628 \u0631\u0645\u0632\u064B\u0627 \u062C\u062F\u064A\u062F\u064B\u0627 \u0648\u062D\u0627\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
|
|
1075
|
-
"serverError.INVALID_TWO_FACTOR_COOKIE": "\u0627\u0646\u062A\u0647\u062A \u0635\u0644\u0627\u062D\u064A\u0629 \u062C\u0644\u0633\u0629 \u0627\u0644\u062A\u062D\u0642\u0642. \u0633\u062C\u0651\u0644 \u0627\u0644\u062F\u062E\u0648\u0644 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649 \u0644\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
|
|
1076
|
-
// P1-2 organization codes (drafted MSA - PENDING native-speaker review).
|
|
1077
|
-
"serverError.ORGANIZATION_SLUG_ALREADY_TAKEN": "\u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u0645\u0624\u0633\u0633\u0629 \u0647\u0630\u0627 \u0645\u0633\u062A\u062E\u062F\u0645 \u0628\u0627\u0644\u0641\u0639\u0644. \u0627\u062E\u062A\u0631 \u0645\u0639\u0631\u0651\u0641\u064B\u0627 \u0622\u062E\u0631.",
|
|
1078
|
-
"serverError.ORGANIZATION_ALREADY_EXISTS": "\u062A\u0648\u062C\u062F \u0645\u0624\u0633\u0633\u0629 \u0628\u0647\u0630\u0647 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0628\u0627\u0644\u0641\u0639\u0644.",
|
|
1079
|
-
"serverError.YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_ORGANIZATIONS": "\u0644\u0642\u062F \u0648\u0635\u0644\u062A \u0625\u0644\u0649 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062F\u062F \u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062A.",
|
|
1080
|
-
"serverError.ORGANIZATION_NOT_FOUND": "\u062A\u0639\u0630\u0631 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1081
|
-
"serverError.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION": "\u0644\u0645 \u062A\u0639\u062F \u0639\u0636\u0648\u064B\u0627 \u0641\u064A \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1082
|
-
"serverError.NO_ACTIVE_ORGANIZATION": "\u0627\u062E\u062A\u0631 \u0645\u0624\u0633\u0633\u0629 \u0644\u0644\u0645\u062A\u0627\u0628\u0639\u0629.",
|
|
1083
|
-
"serverError.ORGANIZATION_MEMBERSHIP_LIMIT_REACHED": "\u0648\u0635\u0644\u062A \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629 \u0625\u0644\u0649 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062F\u062F \u0627\u0644\u0623\u0639\u0636\u0627\u0621.",
|
|
1084
|
-
"serverError.MEMBER_NOT_FOUND": "\u062A\u0639\u0630\u0631 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0639\u0636\u0648.",
|
|
1085
|
-
"serverError.INVITATION_NOT_FOUND": "\u062A\u0639\u0630\u0631 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u062F\u0639\u0648\u0629. \u0631\u0628\u0645\u0627 \u062A\u0645 \u0625\u0644\u063A\u0627\u0624\u0647\u0627 \u0623\u0648 \u0627\u0633\u062A\u064F\u062E\u062F\u0645\u062A \u0628\u0627\u0644\u0641\u0639\u0644.",
|
|
1086
|
-
"serverError.YOU_ARE_NOT_THE_RECIPIENT_OF_THE_INVITATION": "\u0623\u064F\u0631\u0633\u0644\u062A \u0647\u0630\u0647 \u0627\u0644\u062F\u0639\u0648\u0629 \u0625\u0644\u0649 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0645\u062E\u062A\u0644\u0641.",
|
|
1087
|
-
"serverError.EMAIL_VERIFICATION_REQUIRED_FOR_INVITATION": "\u0641\u0639\u0651\u0644 \u0628\u0631\u064A\u062F\u0643 \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0644\u0639\u0631\u0636 \u062F\u0639\u0648\u0627\u062A\u0643.",
|
|
1088
|
-
"serverError.EMAIL_VERIFICATION_REQUIRED_BEFORE_ACCEPTING_OR_REJECTING_INVITATION": "\u0641\u0639\u0651\u0644 \u0628\u0631\u064A\u062F\u0643 \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0642\u0628\u0644 \u0627\u0644\u0631\u062F \u0639\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u062F\u0639\u0648\u0629.",
|
|
1089
|
-
"serverError.USER_IS_ALREADY_A_MEMBER_OF_THIS_ORGANIZATION": "\u0647\u0630\u0627 \u0627\u0644\u0634\u062E\u0635 \u0639\u0636\u0648 \u0641\u064A \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629 \u0628\u0627\u0644\u0641\u0639\u0644.",
|
|
1090
|
-
"serverError.USER_IS_ALREADY_INVITED_TO_THIS_ORGANIZATION": "\u062A\u0645\u062A \u062F\u0639\u0648\u0629 \u0647\u0630\u0627 \u0627\u0644\u0634\u062E\u0635 \u0625\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629 \u0628\u0627\u0644\u0641\u0639\u0644.",
|
|
1091
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_INVITE_USERS_TO_THIS_ORGANIZATION": "\u0644\u064A\u0633 \u0644\u062F\u064A\u0643 \u0635\u0644\u0627\u062D\u064A\u0629 \u062F\u0639\u0648\u0629 \u0623\u0639\u0636\u0627\u0621 \u0625\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1092
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_INVITE_USER_WITH_THIS_ROLE": "\u0644\u064A\u0633 \u0644\u062F\u064A\u0643 \u0635\u0644\u0627\u062D\u064A\u0629 \u062F\u0639\u0648\u0629 \u0639\u0636\u0648 \u0628\u0647\u0630\u0627 \u0627\u0644\u062F\u0648\u0631.",
|
|
1093
|
-
"serverError.YOU_CANNOT_LEAVE_THE_ORGANIZATION_AS_THE_ONLY_OWNER": "\u0631\u0642\u0651 \u0639\u0636\u0648\u064B\u0627 \u0622\u062E\u0631 \u0625\u0644\u0649 \u0645\u0627\u0644\u0643 \u0642\u0628\u0644 \u0645\u063A\u0627\u062F\u0631\u0629 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1094
|
-
"serverError.YOU_CANNOT_LEAVE_THE_ORGANIZATION_WITHOUT_AN_OWNER": "\u0631\u0642\u0651 \u0639\u0636\u0648\u064B\u0627 \u0622\u062E\u0631 \u0625\u0644\u0649 \u0645\u0627\u0644\u0643 \u0642\u0628\u0644 \u0645\u063A\u0627\u062F\u0631\u0629 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1095
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_ORGANIZATION": "\u0644\u064A\u0633 \u0644\u062F\u064A\u0643 \u0635\u0644\u0627\u062D\u064A\u0629 \u062A\u0639\u062F\u064A\u0644 \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1096
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_ORGANIZATION": "\u0644\u064A\u0633 \u0644\u062F\u064A\u0643 \u0635\u0644\u0627\u062D\u064A\u0629 \u062D\u0630\u0641 \u0647\u0630\u0647 \u0627\u0644\u0645\u0624\u0633\u0633\u0629.",
|
|
1097
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_MEMBER": "\u0644\u064A\u0633 \u0644\u062F\u064A\u0643 \u0635\u0644\u0627\u062D\u064A\u0629 \u0625\u0632\u0627\u0644\u0629 \u0647\u0630\u0627 \u0627\u0644\u0639\u0636\u0648.",
|
|
1098
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_MEMBER": "\u0644\u064A\u0633 \u0644\u062F\u064A\u0643 \u0635\u0644\u0627\u062D\u064A\u0629 \u062A\u0639\u062F\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u0639\u0636\u0648.",
|
|
1099
|
-
"serverError.YOU_ARE_NOT_ALLOWED_TO_CANCEL_THIS_INVITATION": "\u0644\u064A\u0633 \u0644\u062F\u064A\u0643 \u0635\u0644\u0627\u062D\u064A\u0629 \u0625\u0644\u063A\u0627\u0621 \u0647\u0630\u0647 \u0627\u0644\u062F\u0639\u0648\u0629."
|
|
1100
|
-
};
|
|
1101
|
-
|
|
1102
|
-
// src/i18n/catalog.ts
|
|
1103
|
-
var catalogs = { en, ar };
|
|
1104
|
-
function formatMessage(locale, key, params) {
|
|
1105
|
-
const message = catalogs[locale][key];
|
|
1106
|
-
if (!params) return message;
|
|
1107
|
-
return message.replace(
|
|
1108
|
-
/\{(\w+)\}/g,
|
|
1109
|
-
(token, name) => name in params ? String(params[name]) : token
|
|
1110
|
-
);
|
|
1111
|
-
}
|
|
1112
|
-
function serverErrorMessage(locale, code) {
|
|
1113
|
-
if (!code) return null;
|
|
1114
|
-
const key = `serverError.${code}`;
|
|
1115
|
-
return key in catalogs[locale] ? catalogs[locale][key] : null;
|
|
1116
|
-
}
|
|
1117
|
-
var RETRY_FAMILY = /* @__PURE__ */ new Set(["RATE_LIMITED", "TOO_MANY_ATTEMPTS", "ACCOUNT_TEMPORARILY_LOCKED"]);
|
|
1118
|
-
var ENUMERATION_DENYLIST = /* @__PURE__ */ new Set([
|
|
1119
|
-
"USER_NOT_FOUND",
|
|
1120
|
-
"USER_EMAIL_NOT_FOUND",
|
|
1121
|
-
"ACCOUNT_NOT_FOUND",
|
|
1122
|
-
"CREDENTIAL_ACCOUNT_NOT_FOUND"
|
|
1123
|
-
]);
|
|
1124
|
-
var MAX_SERVER_MESSAGE_LENGTH = 200;
|
|
1125
|
-
function formatRetryDuration(locale, seconds) {
|
|
1126
|
-
const safe = Math.max(1, Math.trunc(seconds));
|
|
1127
|
-
const useMinutes = safe >= 90;
|
|
1128
|
-
const value = useMinutes ? Math.ceil(safe / 60) : safe;
|
|
1129
|
-
return new Intl.NumberFormat(locale, {
|
|
1130
|
-
style: "unit",
|
|
1131
|
-
unit: useMinutes ? "minute" : "second",
|
|
1132
|
-
unitDisplay: "long"
|
|
1133
|
-
}).format(value);
|
|
1134
|
-
}
|
|
1135
|
-
function resolveServerError(locale, error, fallback) {
|
|
1136
|
-
if (!error) return fallback;
|
|
1137
|
-
const code = error.code ?? (error.status === 429 ? "RATE_LIMITED" : void 0);
|
|
1138
|
-
if (code && RETRY_FAMILY.has(code) && isRetryAfter(error.retryAfterSeconds)) {
|
|
1139
|
-
const retryKey = `serverError.${code}.retryIn`;
|
|
1140
|
-
if (retryKey in catalogs[locale]) {
|
|
1141
|
-
return formatMessage(locale, retryKey, {
|
|
1142
|
-
duration: formatRetryDuration(locale, error.retryAfterSeconds)
|
|
1143
|
-
});
|
|
1144
|
-
}
|
|
1145
|
-
}
|
|
1146
|
-
const mapped = serverErrorMessage(locale, code);
|
|
1147
|
-
if (mapped !== null) return mapped;
|
|
1148
|
-
if (canSurfaceServerMessage(error, code)) return error.message.trim();
|
|
1149
|
-
return fallback;
|
|
1150
|
-
}
|
|
1151
|
-
function isRetryAfter(value) {
|
|
1152
|
-
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
1153
|
-
}
|
|
1154
|
-
function canSurfaceServerMessage(error, code) {
|
|
1155
|
-
if (code && ENUMERATION_DENYLIST.has(code)) return false;
|
|
1156
|
-
const status = error.status;
|
|
1157
|
-
if (typeof status !== "number" || status < 400 || status > 499) return false;
|
|
1158
|
-
const message = error.message?.trim();
|
|
1159
|
-
if (!message || message.length > MAX_SERVER_MESSAGE_LENGTH) return false;
|
|
1160
|
-
if (message === error.statusText?.trim() || message === "Request failed") return false;
|
|
1161
|
-
return true;
|
|
1162
|
-
}
|
|
1163
|
-
|
|
1164
|
-
// src/i18n/index.tsx
|
|
277
|
+
import {
|
|
278
|
+
formatMessage,
|
|
279
|
+
resolveServerError
|
|
280
|
+
} from "@authowl/core/i18n";
|
|
281
|
+
import {
|
|
282
|
+
formatMessage as formatMessage2,
|
|
283
|
+
serverErrorMessage,
|
|
284
|
+
resolveServerError as resolveServerError2,
|
|
285
|
+
formatRetryDuration,
|
|
286
|
+
catalogs
|
|
287
|
+
} from "@authowl/core/i18n";
|
|
1165
288
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
1166
289
|
function useLocale() {
|
|
1167
290
|
return useAuthOwlContext().locale;
|
|
@@ -1404,38 +527,9 @@ function useSignOut() {
|
|
|
1404
527
|
}
|
|
1405
528
|
|
|
1406
529
|
// src/project-capabilities.ts
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
const legacyPasskey = methods.includes("passkey");
|
|
1411
|
-
const authentication = config?.authentication;
|
|
1412
|
-
const mfa = config?.mfa;
|
|
1413
|
-
return {
|
|
1414
|
-
emailSignUp: authentication?.email.signUp ?? methods.some((method) => method === "password" || method === "magic_link" || method === "email_otp"),
|
|
1415
|
-
passwordSignUp: authentication?.password.signUp ?? legacyPassword,
|
|
1416
|
-
phoneSignUp: authentication?.phone.signUp ?? methods.includes("phone_otp"),
|
|
1417
|
-
passwordSignIn: authentication?.email.signIn.includes("password") ?? legacyPassword,
|
|
1418
|
-
passwordMinLength: authentication?.password.minLength ?? 8,
|
|
1419
|
-
passwordMaxLength: authentication?.password.maxLength ?? 128,
|
|
1420
|
-
magicLinkSignIn: authentication?.email.signIn.includes("magic_link") ?? methods.includes("magic_link"),
|
|
1421
|
-
emailOtpSignIn: authentication?.email.signIn.includes("email_otp") ?? methods.includes("email_otp"),
|
|
1422
|
-
phoneSignIn: authentication?.phone.signIn ?? methods.includes("phone_otp"),
|
|
1423
|
-
usernameSignIn: authentication?.username.signIn ?? false,
|
|
1424
|
-
collectUsername: authentication?.username.collectOnSignUp ?? false,
|
|
1425
|
-
passkeySignIn: authentication?.passkey.signIn ?? legacyPasskey,
|
|
1426
|
-
passkeyAdd: authentication?.passkey.add ?? legacyPasskey,
|
|
1427
|
-
firstLastName: config?.userModel?.firstLastName ?? false,
|
|
1428
|
-
// Existing servers predate the switch but allowed email changes by default.
|
|
1429
|
-
emailChange: config === null ? false : config.userModel?.emailChange ?? true,
|
|
1430
|
-
accountDeletion: config?.userModel?.accountDeletion ?? config?.accountDeletion ?? false,
|
|
1431
|
-
emailVerificationRequired: config?.emailVerification?.required ?? config?.requireEmailVerification ?? false,
|
|
1432
|
-
emailVerificationMethod: config?.emailVerification?.method ?? "link",
|
|
1433
|
-
totp: mfa?.totp ?? config?.twoFactor ?? false,
|
|
1434
|
-
mfaRequired: mfa?.required ?? config?.mfaRequired ?? false,
|
|
1435
|
-
backupCodes: mfa?.backupCodes ?? config?.twoFactor ?? false,
|
|
1436
|
-
legacyNameField: config?.authentication === void 0
|
|
1437
|
-
};
|
|
1438
|
-
}
|
|
530
|
+
import {
|
|
531
|
+
resolveProjectCapabilities
|
|
532
|
+
} from "@authowl/core";
|
|
1439
533
|
|
|
1440
534
|
// src/signin-methods.ts
|
|
1441
535
|
var KNOWN_METHODS = [
|
|
@@ -1457,7 +551,7 @@ function resolveSignInMethods(config) {
|
|
|
1457
551
|
const password = capabilities.passwordSignIn;
|
|
1458
552
|
const username = capabilities.usernameSignIn;
|
|
1459
553
|
const magicLink = capabilities.magicLinkSignIn;
|
|
1460
|
-
const emailOtp = capabilities.emailOtpSignIn;
|
|
554
|
+
const emailOtp = capabilities.emailOtpSignIn && !capabilities.totp && !capabilities.mfaRequired;
|
|
1461
555
|
const phoneOtp = capabilities.phoneSignIn;
|
|
1462
556
|
const passkey = capabilities.passkeySignIn;
|
|
1463
557
|
const sso = has("sso");
|
|
@@ -1488,7 +582,7 @@ function resolveSignInMethods(config) {
|
|
|
1488
582
|
}
|
|
1489
583
|
|
|
1490
584
|
// src/components/SignIn.tsx
|
|
1491
|
-
import * as
|
|
585
|
+
import * as React13 from "react";
|
|
1492
586
|
|
|
1493
587
|
// src/components/redirect.ts
|
|
1494
588
|
function isSafeRedirect(redirectTo, origin) {
|
|
@@ -2142,8 +1236,11 @@ function MFAChallenge({ onVerified, allowTrustDevice = true }) {
|
|
|
2142
1236
|
}
|
|
2143
1237
|
)
|
|
2144
1238
|
] }),
|
|
2145
|
-
mode !== "backup" && allowTrustDevice && /* @__PURE__ */ jsxs8("label", { className: "ba-consent", children: [
|
|
2146
|
-
/* @__PURE__ */
|
|
1239
|
+
mode !== "backup" && allowTrustDevice && /* @__PURE__ */ jsxs8("label", { className: "ba-consent ba-consent-centered", children: [
|
|
1240
|
+
/* @__PURE__ */ jsxs8("span", { className: "ba-checkbox-control", children: [
|
|
1241
|
+
/* @__PURE__ */ jsx12("input", { className: "ba-checkbox", type: "checkbox", checked: trustDevice, onChange: (e) => setTrustDevice(e.target.checked) }),
|
|
1242
|
+
/* @__PURE__ */ jsx12("span", { className: "ba-checkbox-visual", "aria-hidden": "true", children: /* @__PURE__ */ jsx12("span", { className: "ba-checkbox-check" }) })
|
|
1243
|
+
] }),
|
|
2147
1244
|
/* @__PURE__ */ jsx12("span", { children: t("mfa.challenge.trustDevice", { days: 30 }) })
|
|
2148
1245
|
] }),
|
|
2149
1246
|
/* @__PURE__ */ jsx12(FormError, { children: error }),
|
|
@@ -2215,14 +1312,18 @@ function LegalConsentCheckbox({
|
|
|
2215
1312
|
const t = useT();
|
|
2216
1313
|
if (!legal.required) return null;
|
|
2217
1314
|
return /* @__PURE__ */ jsxs11("label", { className: "ba-consent", "data-testid": testId, children: [
|
|
2218
|
-
/* @__PURE__ */
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
1315
|
+
/* @__PURE__ */ jsxs11("span", { className: "ba-checkbox-control", children: [
|
|
1316
|
+
/* @__PURE__ */ jsx15(
|
|
1317
|
+
"input",
|
|
1318
|
+
{
|
|
1319
|
+
className: "ba-checkbox",
|
|
1320
|
+
type: "checkbox",
|
|
1321
|
+
checked: accepted,
|
|
1322
|
+
onChange: (event) => onAcceptedChange(event.target.checked)
|
|
1323
|
+
}
|
|
1324
|
+
),
|
|
1325
|
+
/* @__PURE__ */ jsx15("span", { className: "ba-checkbox-visual", "aria-hidden": "true", children: /* @__PURE__ */ jsx15("span", { className: "ba-checkbox-check" }) })
|
|
1326
|
+
] }),
|
|
2226
1327
|
/* @__PURE__ */ jsx15("span", { children: richMessage(t("signUp.consentLabel"), {
|
|
2227
1328
|
links: /* @__PURE__ */ jsx15(ConsentDocLinks, { termsUrl: legal.termsUrl, privacyUrl: legal.privacyUrl })
|
|
2228
1329
|
}) })
|
|
@@ -2409,9 +1510,65 @@ function PhoneOTP({ redirectTo, onSignedIn, onBack }) {
|
|
|
2409
1510
|
);
|
|
2410
1511
|
}
|
|
2411
1512
|
|
|
1513
|
+
// src/components/AuthOwlBranding.tsx
|
|
1514
|
+
import * as React12 from "react";
|
|
1515
|
+
import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1516
|
+
function AuthOwlBranding({ href, showEnvironment = true } = {}) {
|
|
1517
|
+
const t = useT();
|
|
1518
|
+
const { config } = usePublicConfig();
|
|
1519
|
+
const logoUrl = config?.branding?.logoUrl;
|
|
1520
|
+
const appName = config?.branding?.appName?.trim() ?? "";
|
|
1521
|
+
const showAppName = config?.branding?.showAppName !== false && appName.length > 0;
|
|
1522
|
+
const alignment = config?.branding?.alignment ?? "left";
|
|
1523
|
+
const [logoFailed, setLogoFailed] = React12.useState(false);
|
|
1524
|
+
React12.useEffect(() => setLogoFailed(false), [logoUrl]);
|
|
1525
|
+
if (!config) return null;
|
|
1526
|
+
if (!logoUrl && !showAppName && (!showEnvironment || !config.environmentType)) return null;
|
|
1527
|
+
const identity = /* @__PURE__ */ jsxs13("div", { className: "ba-branding-identity", children: [
|
|
1528
|
+
logoUrl && !logoFailed ? /* @__PURE__ */ jsx17(
|
|
1529
|
+
"img",
|
|
1530
|
+
{
|
|
1531
|
+
className: "ba-branding-logo",
|
|
1532
|
+
src: logoUrl,
|
|
1533
|
+
alt: showAppName ? `${appName} logo` : "Application logo",
|
|
1534
|
+
referrerPolicy: "no-referrer",
|
|
1535
|
+
onError: () => setLogoFailed(true)
|
|
1536
|
+
}
|
|
1537
|
+
) : showAppName ? /* @__PURE__ */ jsx17("span", { className: "ba-branding-fallback", "aria-hidden": "true", children: appName.charAt(0).toLocaleUpperCase() }) : null,
|
|
1538
|
+
showAppName ? /* @__PURE__ */ jsx17("span", { className: "ba-branding-name", children: appName }) : null
|
|
1539
|
+
] });
|
|
1540
|
+
return /* @__PURE__ */ jsxs13(
|
|
1541
|
+
"header",
|
|
1542
|
+
{
|
|
1543
|
+
className: `ba-branding ba-branding-align-${alignment}`,
|
|
1544
|
+
"data-testid": "authowl-branding",
|
|
1545
|
+
children: [
|
|
1546
|
+
href ? /* @__PURE__ */ jsx17("a", { className: "ba-branding-link", href, children: identity }) : identity,
|
|
1547
|
+
showEnvironment && config.environmentType ? /* @__PURE__ */ jsxs13(
|
|
1548
|
+
"span",
|
|
1549
|
+
{
|
|
1550
|
+
className: `ba-environment ba-environment-${config.environmentType}`,
|
|
1551
|
+
"data-testid": "authowl-environment",
|
|
1552
|
+
children: [
|
|
1553
|
+
/* @__PURE__ */ jsx17("span", { className: "ba-environment-dot", "aria-hidden": "true" }),
|
|
1554
|
+
t(`branding.environment.${config.environmentType}`)
|
|
1555
|
+
]
|
|
1556
|
+
}
|
|
1557
|
+
) : null
|
|
1558
|
+
]
|
|
1559
|
+
}
|
|
1560
|
+
);
|
|
1561
|
+
}
|
|
1562
|
+
|
|
2412
1563
|
// src/components/SignIn.tsx
|
|
2413
|
-
import { Fragment as Fragment5, jsx as
|
|
2414
|
-
function SignIn({
|
|
1564
|
+
import { Fragment as Fragment5, jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1565
|
+
function SignIn({
|
|
1566
|
+
redirectTo,
|
|
1567
|
+
onSignedIn,
|
|
1568
|
+
resetPasswordUrl,
|
|
1569
|
+
showBadge,
|
|
1570
|
+
showBranding = true
|
|
1571
|
+
} = {}) {
|
|
2415
1572
|
const t = useT();
|
|
2416
1573
|
const { sessionStore } = useAuthClient();
|
|
2417
1574
|
const {
|
|
@@ -2425,47 +1582,51 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2425
1582
|
const { config, isLoading, isError } = usePublicConfig();
|
|
2426
1583
|
const { pending, error, setError, run } = useSubmitAction();
|
|
2427
1584
|
const authChallenge = useAuthChallenge();
|
|
2428
|
-
const [email, setEmail] =
|
|
2429
|
-
const [username, setUsername] =
|
|
2430
|
-
const [password, setPassword] =
|
|
2431
|
-
const [credentialMode, setCredentialMode] =
|
|
2432
|
-
const [otp, setOtp] =
|
|
2433
|
-
const [view, setView] =
|
|
1585
|
+
const [email, setEmail] = React13.useState("");
|
|
1586
|
+
const [username, setUsername] = React13.useState("");
|
|
1587
|
+
const [password, setPassword] = React13.useState("");
|
|
1588
|
+
const [credentialMode, setCredentialMode] = React13.useState("email");
|
|
1589
|
+
const [otp, setOtp] = React13.useState("");
|
|
1590
|
+
const [view, setView] = React13.useState(
|
|
2434
1591
|
"sign-in"
|
|
2435
1592
|
);
|
|
2436
|
-
const [inFlight, setInFlight] =
|
|
2437
|
-
const [challenge, setChallenge] =
|
|
2438
|
-
const emailRef =
|
|
1593
|
+
const [inFlight, setInFlight] = React13.useState(null);
|
|
1594
|
+
const [challenge, setChallenge] = React13.useState(false);
|
|
1595
|
+
const emailRef = React13.useRef(null);
|
|
2439
1596
|
const plan = resolveSignInMethods(config);
|
|
2440
1597
|
usePasskeyAutofill({
|
|
2441
1598
|
enabled: credentialMode === "email" && plan.autofillHost !== null,
|
|
2442
1599
|
redirectTo,
|
|
2443
1600
|
onSignedIn
|
|
2444
1601
|
});
|
|
2445
|
-
const badge = /* @__PURE__ */
|
|
1602
|
+
const badge = /* @__PURE__ */ jsx18(AuthOwlBadge, { force: showBadge });
|
|
1603
|
+
const branding = showBranding ? /* @__PURE__ */ jsx18(AuthOwlBranding, {}) : null;
|
|
2446
1604
|
if (isLoading) {
|
|
2447
|
-
return /* @__PURE__ */
|
|
2448
|
-
/* @__PURE__ */
|
|
2449
|
-
/* @__PURE__ */
|
|
1605
|
+
return /* @__PURE__ */ jsxs14("div", { className: "ba-form", "data-testid": "signin-loading", "aria-busy": "true", children: [
|
|
1606
|
+
/* @__PURE__ */ jsx18("div", { className: "ba-skeleton" }),
|
|
1607
|
+
/* @__PURE__ */ jsx18("div", { className: "ba-skeleton" })
|
|
2450
1608
|
] });
|
|
2451
1609
|
}
|
|
2452
1610
|
if (challenge) {
|
|
2453
|
-
return /* @__PURE__ */
|
|
2454
|
-
|
|
1611
|
+
return /* @__PURE__ */ jsxs14("div", { className: "ba-form", "data-testid": "signin-mfa", children: [
|
|
1612
|
+
branding,
|
|
1613
|
+
/* @__PURE__ */ jsx18(MFAChallenge, { onVerified: () => finishSignIn({ sessionStore, redirectTo, onSignedIn }) }),
|
|
2455
1614
|
badge
|
|
2456
1615
|
] });
|
|
2457
1616
|
}
|
|
2458
1617
|
if (view === "forgot" && resetPasswordUrl) {
|
|
2459
|
-
return /* @__PURE__ */
|
|
2460
|
-
|
|
2461
|
-
/* @__PURE__ */
|
|
1618
|
+
return /* @__PURE__ */ jsxs14("div", { className: "ba-form", "data-testid": "signin-forgot", children: [
|
|
1619
|
+
branding,
|
|
1620
|
+
/* @__PURE__ */ jsx18("h2", { className: "ba-title", children: t("signIn.forgotTitle") }),
|
|
1621
|
+
/* @__PURE__ */ jsx18(ForgotPassword, { resetPasswordUrl, onBack: () => setView("sign-in") }),
|
|
2462
1622
|
badge
|
|
2463
1623
|
] });
|
|
2464
1624
|
}
|
|
2465
1625
|
if (view === "otp-code") {
|
|
2466
|
-
return /* @__PURE__ */
|
|
2467
|
-
|
|
2468
|
-
/* @__PURE__ */
|
|
1626
|
+
return /* @__PURE__ */ jsxs14("div", { className: "ba-form", "data-testid": "signin-otp-code", children: [
|
|
1627
|
+
branding,
|
|
1628
|
+
/* @__PURE__ */ jsx18("h2", { className: "ba-title", children: t("signIn.title") }),
|
|
1629
|
+
/* @__PURE__ */ jsx18(
|
|
2469
1630
|
OtpCodeForm,
|
|
2470
1631
|
{
|
|
2471
1632
|
email,
|
|
@@ -2491,16 +1652,18 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2491
1652
|
] });
|
|
2492
1653
|
}
|
|
2493
1654
|
if (view === "magic-sent") {
|
|
2494
|
-
return /* @__PURE__ */
|
|
2495
|
-
|
|
2496
|
-
/* @__PURE__ */
|
|
2497
|
-
/* @__PURE__ */
|
|
1655
|
+
return /* @__PURE__ */ jsxs14("div", { className: "ba-form", "data-testid": "signin-magic-sent", children: [
|
|
1656
|
+
branding,
|
|
1657
|
+
/* @__PURE__ */ jsx18("h2", { className: "ba-title", children: t("signIn.title") }),
|
|
1658
|
+
/* @__PURE__ */ jsx18("p", { className: "ba-muted", children: t("magicLink.sent") }),
|
|
1659
|
+
/* @__PURE__ */ jsx18("button", { type: "button", className: "ba-link-button", onClick: () => setView("sign-in"), children: t("forgotPassword.backToSignIn") }),
|
|
2498
1660
|
badge
|
|
2499
1661
|
] });
|
|
2500
1662
|
}
|
|
2501
1663
|
if (view === "phone") {
|
|
2502
|
-
return /* @__PURE__ */
|
|
2503
|
-
|
|
1664
|
+
return /* @__PURE__ */ jsxs14("div", { className: "ba-form", "data-testid": "signin-phone", children: [
|
|
1665
|
+
branding,
|
|
1666
|
+
/* @__PURE__ */ jsx18(
|
|
2504
1667
|
PhoneOTP,
|
|
2505
1668
|
{
|
|
2506
1669
|
redirectTo,
|
|
@@ -2572,12 +1735,13 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2572
1735
|
{ key: "otp", enabled: plan.emailOtp, action: doRequestOtp, label: t("emailOtp.requestSubmit"), pendingLabel: t("common.sending") },
|
|
2573
1736
|
{ key: "sso", enabled: plan.sso, action: doSso, label: t("sso.continueWith"), pendingLabel: t("sso.redirecting") }
|
|
2574
1737
|
];
|
|
2575
|
-
return /* @__PURE__ */
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
/* @__PURE__ */
|
|
2579
|
-
|
|
2580
|
-
|
|
1738
|
+
return /* @__PURE__ */ jsxs14("div", { className: "ba-form", "data-testid": "signin-form", children: [
|
|
1739
|
+
branding,
|
|
1740
|
+
/* @__PURE__ */ jsx18("h2", { className: "ba-title", children: t("signIn.title") }),
|
|
1741
|
+
process.env.NODE_ENV !== "production" && isError && /* @__PURE__ */ jsx18("p", { className: "ba-muted", "data-testid": "signin-dev-config-notice", children: "AuthOwl (dev): couldn't load this project's config, so this is a password-only fallback that may not match the project's enabled sign-in methods. Check apiUrl / publishableKey; see the console for details." }),
|
|
1742
|
+
/* @__PURE__ */ jsx18(SocialButtons, { providers: plan.social, callbackURL: redirectTo }),
|
|
1743
|
+
showDivider && /* @__PURE__ */ jsx18("div", { className: "ba-divider", children: t("common.orDivider") }),
|
|
1744
|
+
hasCredentialForm && /* @__PURE__ */ jsxs14(
|
|
2581
1745
|
"form",
|
|
2582
1746
|
{
|
|
2583
1747
|
method: "post",
|
|
@@ -2588,9 +1752,9 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2588
1752
|
else if (plan.primary) PRIMARY_ACTION[plan.primary]();
|
|
2589
1753
|
},
|
|
2590
1754
|
children: [
|
|
2591
|
-
credentialMode === "email" ? /* @__PURE__ */
|
|
1755
|
+
credentialMode === "email" ? /* @__PURE__ */ jsxs14("label", { className: "ba-label", children: [
|
|
2592
1756
|
t("common.emailLabel"),
|
|
2593
|
-
/* @__PURE__ */
|
|
1757
|
+
/* @__PURE__ */ jsx18(
|
|
2594
1758
|
"input",
|
|
2595
1759
|
{
|
|
2596
1760
|
ref: emailRef,
|
|
@@ -2605,9 +1769,9 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2605
1769
|
required: true
|
|
2606
1770
|
}
|
|
2607
1771
|
)
|
|
2608
|
-
] }) : /* @__PURE__ */
|
|
1772
|
+
] }) : /* @__PURE__ */ jsxs14("label", { className: "ba-label", children: [
|
|
2609
1773
|
t("common.usernameLabel"),
|
|
2610
|
-
/* @__PURE__ */
|
|
1774
|
+
/* @__PURE__ */ jsx18(
|
|
2611
1775
|
"input",
|
|
2612
1776
|
{
|
|
2613
1777
|
className: "ba-input",
|
|
@@ -2622,9 +1786,9 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2622
1786
|
}
|
|
2623
1787
|
)
|
|
2624
1788
|
] }),
|
|
2625
|
-
plan.password && /* @__PURE__ */
|
|
1789
|
+
plan.password && /* @__PURE__ */ jsxs14("label", { className: "ba-label", children: [
|
|
2626
1790
|
t("common.passwordLabel"),
|
|
2627
|
-
/* @__PURE__ */
|
|
1791
|
+
/* @__PURE__ */ jsx18(
|
|
2628
1792
|
"input",
|
|
2629
1793
|
{
|
|
2630
1794
|
className: "ba-input",
|
|
@@ -2640,19 +1804,19 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2640
1804
|
)
|
|
2641
1805
|
] }),
|
|
2642
1806
|
authChallenge.control,
|
|
2643
|
-
/* @__PURE__ */
|
|
2644
|
-
plan.password && /* @__PURE__ */
|
|
2645
|
-
/* @__PURE__ */
|
|
1807
|
+
/* @__PURE__ */ jsx18(FormError, { children: error }),
|
|
1808
|
+
plan.password && /* @__PURE__ */ jsxs14(Fragment5, { children: [
|
|
1809
|
+
/* @__PURE__ */ jsx18(
|
|
2646
1810
|
"button",
|
|
2647
1811
|
{
|
|
2648
1812
|
className: "ba-button",
|
|
2649
1813
|
type: "submit",
|
|
2650
1814
|
disabled: pending || authChallenge.configPending,
|
|
2651
1815
|
"aria-busy": pending && inFlight === "password" || void 0,
|
|
2652
|
-
children: /* @__PURE__ */
|
|
1816
|
+
children: /* @__PURE__ */ jsx18(Busy, { busy: pending && inFlight === "password", label: t("signIn.submitPending"), children: t("signIn.submit") })
|
|
2653
1817
|
}
|
|
2654
1818
|
),
|
|
2655
|
-
resetPasswordUrl && /* @__PURE__ */
|
|
1819
|
+
resetPasswordUrl && /* @__PURE__ */ jsx18(
|
|
2656
1820
|
"button",
|
|
2657
1821
|
{
|
|
2658
1822
|
type: "button",
|
|
@@ -2664,7 +1828,7 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2664
1828
|
] }),
|
|
2665
1829
|
credentialMode === "email" && alternates.filter((a) => a.enabled).map(({ key, action, label: label2, pendingLabel }) => {
|
|
2666
1830
|
const isPrimary = plan.primary === key;
|
|
2667
|
-
return /* @__PURE__ */
|
|
1831
|
+
return /* @__PURE__ */ jsx18(
|
|
2668
1832
|
"button",
|
|
2669
1833
|
{
|
|
2670
1834
|
type: isPrimary ? "submit" : "button",
|
|
@@ -2672,12 +1836,12 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2672
1836
|
disabled: pending || authChallenge.configPending,
|
|
2673
1837
|
"aria-busy": pending && inFlight === key || void 0,
|
|
2674
1838
|
onClick: isPrimary ? void 0 : withEmail(action),
|
|
2675
|
-
children: /* @__PURE__ */
|
|
1839
|
+
children: /* @__PURE__ */ jsx18(Busy, { busy: pending && inFlight === key, label: pendingLabel, children: label2 })
|
|
2676
1840
|
},
|
|
2677
1841
|
key
|
|
2678
1842
|
);
|
|
2679
1843
|
}),
|
|
2680
|
-
plan.username && /* @__PURE__ */
|
|
1844
|
+
plan.username && /* @__PURE__ */ jsx18(
|
|
2681
1845
|
"button",
|
|
2682
1846
|
{
|
|
2683
1847
|
type: "button",
|
|
@@ -2693,8 +1857,8 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2693
1857
|
]
|
|
2694
1858
|
}
|
|
2695
1859
|
),
|
|
2696
|
-
plan.passkey && /* @__PURE__ */
|
|
2697
|
-
plan.phoneOtp && /* @__PURE__ */
|
|
1860
|
+
plan.passkey && /* @__PURE__ */ jsx18(PasskeyButton, { redirectTo, onSignedIn }),
|
|
1861
|
+
plan.phoneOtp && /* @__PURE__ */ jsx18(
|
|
2698
1862
|
"button",
|
|
2699
1863
|
{
|
|
2700
1864
|
type: "button",
|
|
@@ -2703,17 +1867,17 @@ function SignIn({ redirectTo, onSignedIn, resetPasswordUrl, showBadge } = {}) {
|
|
|
2703
1867
|
children: t("phoneOtp.usePhone")
|
|
2704
1868
|
}
|
|
2705
1869
|
),
|
|
2706
|
-
!plan.renderable && /* @__PURE__ */
|
|
1870
|
+
!plan.renderable && /* @__PURE__ */ jsx18("p", { className: "ba-muted", children: plan.emptyReason === "unsupported" ? t("signIn.empty.unsupported") : t("signIn.empty.none") }),
|
|
2707
1871
|
badge
|
|
2708
1872
|
] });
|
|
2709
1873
|
}
|
|
2710
1874
|
|
|
2711
1875
|
// src/components/SignUp.tsx
|
|
2712
|
-
import * as
|
|
1876
|
+
import * as React17 from "react";
|
|
2713
1877
|
|
|
2714
1878
|
// src/components/VerificationPending.tsx
|
|
2715
|
-
import * as
|
|
2716
|
-
import { jsx as
|
|
1879
|
+
import * as React14 from "react";
|
|
1880
|
+
import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2717
1881
|
function VerificationPending({
|
|
2718
1882
|
email,
|
|
2719
1883
|
callbackURL,
|
|
@@ -2727,14 +1891,14 @@ function VerificationPending({
|
|
|
2727
1891
|
} = useEmailVerification();
|
|
2728
1892
|
const { pending, error, run } = useSubmitAction();
|
|
2729
1893
|
const authChallenge = useAuthChallenge();
|
|
2730
|
-
const [resent, setResent] =
|
|
2731
|
-
const [code, setCode] =
|
|
2732
|
-
const [verified, setVerified] =
|
|
1894
|
+
const [resent, setResent] = React14.useState(false);
|
|
1895
|
+
const [code, setCode] = React14.useState("");
|
|
1896
|
+
const [verified, setVerified] = React14.useState(false);
|
|
2733
1897
|
if (verified) {
|
|
2734
|
-
return /* @__PURE__ */
|
|
1898
|
+
return /* @__PURE__ */ jsx19("p", { className: "ba-success", role: "status", "data-testid": "verify-code-success", children: t("verifyEmail.success") });
|
|
2735
1899
|
}
|
|
2736
1900
|
if (method === "code") {
|
|
2737
|
-
return /* @__PURE__ */
|
|
1901
|
+
return /* @__PURE__ */ jsxs15(
|
|
2738
1902
|
"form",
|
|
2739
1903
|
{
|
|
2740
1904
|
method: "post",
|
|
@@ -2751,12 +1915,12 @@ function VerificationPending({
|
|
|
2751
1915
|
);
|
|
2752
1916
|
},
|
|
2753
1917
|
children: [
|
|
2754
|
-
/* @__PURE__ */
|
|
2755
|
-
email: /* @__PURE__ */
|
|
1918
|
+
/* @__PURE__ */ jsx19("p", { className: "ba-muted", children: richMessage(t("verifyPending.codeBody"), {
|
|
1919
|
+
email: /* @__PURE__ */ jsx19("strong", { children: /* @__PURE__ */ jsx19(Bidi, { children: email }) })
|
|
2756
1920
|
}) }),
|
|
2757
|
-
/* @__PURE__ */
|
|
1921
|
+
/* @__PURE__ */ jsxs15("label", { className: "ba-label", children: [
|
|
2758
1922
|
t("verifyPending.codeLabel"),
|
|
2759
|
-
/* @__PURE__ */
|
|
1923
|
+
/* @__PURE__ */ jsx19(
|
|
2760
1924
|
"input",
|
|
2761
1925
|
{
|
|
2762
1926
|
className: "ba-input",
|
|
@@ -2768,20 +1932,20 @@ function VerificationPending({
|
|
|
2768
1932
|
}
|
|
2769
1933
|
)
|
|
2770
1934
|
] }),
|
|
2771
|
-
resent && /* @__PURE__ */
|
|
1935
|
+
resent && /* @__PURE__ */ jsx19("p", { className: "ba-muted", children: t("verifyPending.resent") }),
|
|
2772
1936
|
authChallenge.control,
|
|
2773
|
-
/* @__PURE__ */
|
|
2774
|
-
/* @__PURE__ */
|
|
1937
|
+
/* @__PURE__ */ jsx19(FormError, { children: error }),
|
|
1938
|
+
/* @__PURE__ */ jsx19(
|
|
2775
1939
|
"button",
|
|
2776
1940
|
{
|
|
2777
1941
|
className: "ba-button",
|
|
2778
1942
|
type: "submit",
|
|
2779
1943
|
disabled: pending || !code,
|
|
2780
1944
|
"aria-busy": pending || void 0,
|
|
2781
|
-
children: /* @__PURE__ */
|
|
1945
|
+
children: /* @__PURE__ */ jsx19(Busy, { busy: pending, label: t("common.verifying"), children: t("emailOtp.verifySubmit") })
|
|
2782
1946
|
}
|
|
2783
1947
|
),
|
|
2784
|
-
/* @__PURE__ */
|
|
1948
|
+
/* @__PURE__ */ jsx19(
|
|
2785
1949
|
"button",
|
|
2786
1950
|
{
|
|
2787
1951
|
type: "button",
|
|
@@ -2807,14 +1971,14 @@ function VerificationPending({
|
|
|
2807
1971
|
}
|
|
2808
1972
|
);
|
|
2809
1973
|
}
|
|
2810
|
-
return /* @__PURE__ */
|
|
2811
|
-
/* @__PURE__ */
|
|
2812
|
-
email: /* @__PURE__ */
|
|
1974
|
+
return /* @__PURE__ */ jsxs15("div", { className: "ba-fields", "data-testid": "verify-pending", children: [
|
|
1975
|
+
/* @__PURE__ */ jsx19("p", { className: "ba-muted", children: richMessage(t("verifyPending.body"), {
|
|
1976
|
+
email: /* @__PURE__ */ jsx19("strong", { children: /* @__PURE__ */ jsx19(Bidi, { children: email }) })
|
|
2813
1977
|
}) }),
|
|
2814
|
-
resent && /* @__PURE__ */
|
|
1978
|
+
resent && /* @__PURE__ */ jsx19("p", { className: "ba-muted", children: t("verifyPending.resent") }),
|
|
2815
1979
|
authChallenge.control,
|
|
2816
|
-
/* @__PURE__ */
|
|
2817
|
-
/* @__PURE__ */
|
|
1980
|
+
/* @__PURE__ */ jsx19(FormError, { children: error }),
|
|
1981
|
+
/* @__PURE__ */ jsx19(
|
|
2818
1982
|
"button",
|
|
2819
1983
|
{
|
|
2820
1984
|
type: "button",
|
|
@@ -2825,25 +1989,25 @@ function VerificationPending({
|
|
|
2825
1989
|
failure: t("verifyPending.error.resendFailed"),
|
|
2826
1990
|
onSuccess: () => setResent(true)
|
|
2827
1991
|
}),
|
|
2828
|
-
children: /* @__PURE__ */
|
|
1992
|
+
children: /* @__PURE__ */ jsx19(Busy, { busy: pending, label: t("common.sending"), children: t("verifyPending.resendButton") })
|
|
2829
1993
|
}
|
|
2830
1994
|
)
|
|
2831
1995
|
] });
|
|
2832
1996
|
}
|
|
2833
1997
|
|
|
2834
1998
|
// src/components/PasswordlessSignUp.tsx
|
|
2835
|
-
import * as
|
|
2836
|
-
import { jsx as
|
|
1999
|
+
import * as React15 from "react";
|
|
2000
|
+
import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
2837
2001
|
function PasswordlessSignUp({ onAuthenticated }) {
|
|
2838
2002
|
const t = useT();
|
|
2839
2003
|
const { sendEmailOtp, signInEmailOtp } = useSignIn();
|
|
2840
2004
|
const { pending, error, setError, run } = useSubmitAction();
|
|
2841
2005
|
const authChallenge = useAuthChallenge();
|
|
2842
|
-
const [email, setEmail] =
|
|
2843
|
-
const [code, setCode] =
|
|
2844
|
-
const [codeSent, setCodeSent] =
|
|
2006
|
+
const [email, setEmail] = React15.useState("");
|
|
2007
|
+
const [code, setCode] = React15.useState("");
|
|
2008
|
+
const [codeSent, setCodeSent] = React15.useState(false);
|
|
2845
2009
|
if (codeSent) {
|
|
2846
|
-
return /* @__PURE__ */
|
|
2010
|
+
return /* @__PURE__ */ jsx20("div", { className: "ba-fields", "data-testid": "signup-emailotp-code", children: /* @__PURE__ */ jsx20(
|
|
2847
2011
|
OtpCodeForm,
|
|
2848
2012
|
{
|
|
2849
2013
|
email,
|
|
@@ -2863,7 +2027,7 @@ function PasswordlessSignUp({ onAuthenticated }) {
|
|
|
2863
2027
|
}
|
|
2864
2028
|
) });
|
|
2865
2029
|
}
|
|
2866
|
-
return /* @__PURE__ */
|
|
2030
|
+
return /* @__PURE__ */ jsxs16(
|
|
2867
2031
|
"form",
|
|
2868
2032
|
{
|
|
2869
2033
|
method: "post",
|
|
@@ -2877,9 +2041,9 @@ function PasswordlessSignUp({ onAuthenticated }) {
|
|
|
2877
2041
|
});
|
|
2878
2042
|
},
|
|
2879
2043
|
children: [
|
|
2880
|
-
/* @__PURE__ */
|
|
2044
|
+
/* @__PURE__ */ jsxs16("label", { className: "ba-label", children: [
|
|
2881
2045
|
t("common.emailLabel"),
|
|
2882
|
-
/* @__PURE__ */
|
|
2046
|
+
/* @__PURE__ */ jsx20(
|
|
2883
2047
|
"input",
|
|
2884
2048
|
{
|
|
2885
2049
|
className: "ba-input",
|
|
@@ -2892,15 +2056,15 @@ function PasswordlessSignUp({ onAuthenticated }) {
|
|
|
2892
2056
|
)
|
|
2893
2057
|
] }),
|
|
2894
2058
|
authChallenge.control,
|
|
2895
|
-
/* @__PURE__ */
|
|
2896
|
-
/* @__PURE__ */
|
|
2059
|
+
/* @__PURE__ */ jsx20(FormError, { children: error }),
|
|
2060
|
+
/* @__PURE__ */ jsx20(
|
|
2897
2061
|
"button",
|
|
2898
2062
|
{
|
|
2899
2063
|
className: "ba-button ba-button-secondary",
|
|
2900
2064
|
type: "submit",
|
|
2901
2065
|
disabled: pending || authChallenge.configPending,
|
|
2902
2066
|
"aria-busy": pending || void 0,
|
|
2903
|
-
children: /* @__PURE__ */
|
|
2067
|
+
children: /* @__PURE__ */ jsx20(Busy, { busy: pending, label: t("common.sending"), children: t("signUp.passwordlessSubmit") })
|
|
2904
2068
|
}
|
|
2905
2069
|
)
|
|
2906
2070
|
]
|
|
@@ -2909,16 +2073,16 @@ function PasswordlessSignUp({ onAuthenticated }) {
|
|
|
2909
2073
|
}
|
|
2910
2074
|
|
|
2911
2075
|
// src/components/PasskeySignUpCompletion.tsx
|
|
2912
|
-
import { jsx as
|
|
2076
|
+
import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
2913
2077
|
function PasskeySignUpCompletion({ onComplete }) {
|
|
2914
2078
|
const t = useT();
|
|
2915
2079
|
const { addPasskey } = usePasskeys();
|
|
2916
2080
|
const { pending, error, run } = useSubmitAction();
|
|
2917
|
-
return /* @__PURE__ */
|
|
2918
|
-
/* @__PURE__ */
|
|
2919
|
-
/* @__PURE__ */
|
|
2920
|
-
/* @__PURE__ */
|
|
2921
|
-
/* @__PURE__ */
|
|
2081
|
+
return /* @__PURE__ */ jsxs17("div", { className: "ba-fields", "data-testid": "signup-passkey-completion", children: [
|
|
2082
|
+
/* @__PURE__ */ jsx21("h3", { className: "ba-title", children: t("signUp.passkeyTitle") }),
|
|
2083
|
+
/* @__PURE__ */ jsx21("p", { className: "ba-muted", children: t("signUp.passkeyDescription") }),
|
|
2084
|
+
/* @__PURE__ */ jsx21(FormError, { children: error }),
|
|
2085
|
+
/* @__PURE__ */ jsx21(
|
|
2922
2086
|
"button",
|
|
2923
2087
|
{
|
|
2924
2088
|
className: "ba-button",
|
|
@@ -2929,34 +2093,36 @@ function PasskeySignUpCompletion({ onComplete }) {
|
|
|
2929
2093
|
failure: t("signUp.error.passkeyFailed"),
|
|
2930
2094
|
onSuccess: onComplete
|
|
2931
2095
|
}),
|
|
2932
|
-
children: /* @__PURE__ */
|
|
2096
|
+
children: /* @__PURE__ */ jsx21(Busy, { busy: pending, label: t("passkey.waiting"), children: t("signUp.passkeySubmit") })
|
|
2933
2097
|
}
|
|
2934
2098
|
),
|
|
2935
|
-
/* @__PURE__ */
|
|
2099
|
+
/* @__PURE__ */ jsx21("button", { className: "ba-link-button", type: "button", disabled: pending, onClick: onComplete, children: t("signUp.passkeySkip") })
|
|
2936
2100
|
] });
|
|
2937
2101
|
}
|
|
2938
2102
|
|
|
2939
2103
|
// src/components/Waitlist.tsx
|
|
2940
|
-
import * as
|
|
2941
|
-
import { jsx as
|
|
2942
|
-
function Waitlist({ onJoined, showBadge } = {}) {
|
|
2104
|
+
import * as React16 from "react";
|
|
2105
|
+
import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
2106
|
+
function Waitlist({ onJoined, showBadge, showBranding = true } = {}) {
|
|
2943
2107
|
const t = useT();
|
|
2944
2108
|
const { join } = useWaitlist();
|
|
2945
2109
|
const { pending, error, run } = useSubmitAction();
|
|
2946
2110
|
const authChallenge = useAuthChallenge();
|
|
2947
|
-
const [email, setEmail] =
|
|
2948
|
-
const [joined, setJoined] =
|
|
2111
|
+
const [email, setEmail] = React16.useState("");
|
|
2112
|
+
const [joined, setJoined] = React16.useState(false);
|
|
2949
2113
|
if (joined) {
|
|
2950
|
-
return /* @__PURE__ */
|
|
2951
|
-
/* @__PURE__ */
|
|
2952
|
-
/* @__PURE__ */
|
|
2953
|
-
/* @__PURE__ */
|
|
2114
|
+
return /* @__PURE__ */ jsxs18("div", { className: "ba-form", "data-testid": "waitlist-accepted", children: [
|
|
2115
|
+
showBranding ? /* @__PURE__ */ jsx22(AuthOwlBranding, {}) : null,
|
|
2116
|
+
/* @__PURE__ */ jsx22("h2", { className: "ba-title", children: t("waitlist.acceptedTitle") }),
|
|
2117
|
+
/* @__PURE__ */ jsx22("p", { className: "ba-muted", children: t("waitlist.acceptedDescription") }),
|
|
2118
|
+
/* @__PURE__ */ jsx22(AuthOwlBadge, { force: showBadge })
|
|
2954
2119
|
] });
|
|
2955
2120
|
}
|
|
2956
|
-
return /* @__PURE__ */
|
|
2957
|
-
/* @__PURE__ */
|
|
2958
|
-
/* @__PURE__ */
|
|
2959
|
-
/* @__PURE__ */
|
|
2121
|
+
return /* @__PURE__ */ jsxs18("div", { className: "ba-form", "data-testid": "waitlist-form", children: [
|
|
2122
|
+
showBranding ? /* @__PURE__ */ jsx22(AuthOwlBranding, {}) : null,
|
|
2123
|
+
/* @__PURE__ */ jsx22("h2", { className: "ba-title", children: t("waitlist.title") }),
|
|
2124
|
+
/* @__PURE__ */ jsx22("p", { className: "ba-muted", children: t("waitlist.description") }),
|
|
2125
|
+
/* @__PURE__ */ jsxs18(
|
|
2960
2126
|
"form",
|
|
2961
2127
|
{
|
|
2962
2128
|
method: "post",
|
|
@@ -2978,9 +2144,9 @@ function Waitlist({ onJoined, showBadge } = {}) {
|
|
|
2978
2144
|
);
|
|
2979
2145
|
},
|
|
2980
2146
|
children: [
|
|
2981
|
-
/* @__PURE__ */
|
|
2147
|
+
/* @__PURE__ */ jsxs18("label", { className: "ba-label", children: [
|
|
2982
2148
|
t("common.emailLabel"),
|
|
2983
|
-
/* @__PURE__ */
|
|
2149
|
+
/* @__PURE__ */ jsx22(
|
|
2984
2150
|
"input",
|
|
2985
2151
|
{
|
|
2986
2152
|
className: "ba-input",
|
|
@@ -2994,47 +2160,48 @@ function Waitlist({ onJoined, showBadge } = {}) {
|
|
|
2994
2160
|
)
|
|
2995
2161
|
] }),
|
|
2996
2162
|
authChallenge.control,
|
|
2997
|
-
/* @__PURE__ */
|
|
2998
|
-
/* @__PURE__ */
|
|
2163
|
+
/* @__PURE__ */ jsx22(FormError, { children: error }),
|
|
2164
|
+
/* @__PURE__ */ jsx22(
|
|
2999
2165
|
"button",
|
|
3000
2166
|
{
|
|
3001
2167
|
className: "ba-button",
|
|
3002
2168
|
type: "submit",
|
|
3003
2169
|
disabled: pending || authChallenge.configPending,
|
|
3004
2170
|
"aria-busy": pending || void 0,
|
|
3005
|
-
children: /* @__PURE__ */
|
|
2171
|
+
children: /* @__PURE__ */ jsx22(Busy, { busy: pending, label: t("waitlist.submitPending"), children: t("waitlist.submit") })
|
|
3006
2172
|
}
|
|
3007
2173
|
)
|
|
3008
2174
|
]
|
|
3009
2175
|
}
|
|
3010
2176
|
),
|
|
3011
|
-
/* @__PURE__ */
|
|
2177
|
+
/* @__PURE__ */ jsx22(AuthOwlBadge, { force: showBadge })
|
|
3012
2178
|
] });
|
|
3013
2179
|
}
|
|
3014
2180
|
|
|
3015
2181
|
// src/components/SignUp.tsx
|
|
3016
|
-
import { Fragment as Fragment6, jsx as
|
|
2182
|
+
import { Fragment as Fragment6, jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
3017
2183
|
function SignUp({
|
|
3018
2184
|
redirectTo,
|
|
3019
2185
|
onSignedUp,
|
|
3020
2186
|
verifyEmailUrl,
|
|
3021
2187
|
showBadge,
|
|
3022
|
-
onWaitlisted
|
|
2188
|
+
onWaitlisted,
|
|
2189
|
+
showBranding = true
|
|
3023
2190
|
} = {}) {
|
|
3024
2191
|
const t = useT();
|
|
3025
2192
|
const toServerError = useServerError();
|
|
3026
2193
|
const { signUp } = useSignUp();
|
|
3027
2194
|
const { config, isLoading } = usePublicConfig();
|
|
3028
2195
|
const authChallenge = useAuthChallenge();
|
|
3029
|
-
const [email, setEmail] =
|
|
3030
|
-
const [password, setPassword] =
|
|
3031
|
-
const [name, setName] =
|
|
3032
|
-
const [firstName, setFirstName] =
|
|
3033
|
-
const [lastName, setLastName] =
|
|
3034
|
-
const [username, setUsername] =
|
|
3035
|
-
const [error, setError] =
|
|
3036
|
-
const [submitting, setSubmitting] =
|
|
3037
|
-
const [accepted, setAccepted] =
|
|
2196
|
+
const [email, setEmail] = React17.useState("");
|
|
2197
|
+
const [password, setPassword] = React17.useState("");
|
|
2198
|
+
const [name, setName] = React17.useState("");
|
|
2199
|
+
const [firstName, setFirstName] = React17.useState("");
|
|
2200
|
+
const [lastName, setLastName] = React17.useState("");
|
|
2201
|
+
const [username, setUsername] = React17.useState("");
|
|
2202
|
+
const [error, setError] = React17.useState(null);
|
|
2203
|
+
const [submitting, setSubmitting] = React17.useState(false);
|
|
2204
|
+
const [accepted, setAccepted] = React17.useState(false);
|
|
3038
2205
|
const legal = config?.legal;
|
|
3039
2206
|
const consentRequired = Boolean(legal?.required);
|
|
3040
2207
|
const consentBlocked = consentRequired && !accepted;
|
|
@@ -3042,8 +2209,8 @@ function SignUp({
|
|
|
3042
2209
|
const passwordMinLength = capabilities.passwordMinLength;
|
|
3043
2210
|
const passwordMaxLength = capabilities.passwordMaxLength;
|
|
3044
2211
|
const passkeysEnabled = capabilities.passkeyAdd;
|
|
3045
|
-
const [pendingEmail, setPendingEmail] =
|
|
3046
|
-
const [completeWithPasskey, setCompleteWithPasskey] =
|
|
2212
|
+
const [pendingEmail, setPendingEmail] = React17.useState(null);
|
|
2213
|
+
const [completeWithPasskey, setCompleteWithPasskey] = React17.useState(false);
|
|
3047
2214
|
function finishSignUp() {
|
|
3048
2215
|
onSignedUp?.();
|
|
3049
2216
|
if (redirectTo) window.location.assign(redirectTo);
|
|
@@ -3096,17 +2263,18 @@ function SignUp({
|
|
|
3096
2263
|
}
|
|
3097
2264
|
}
|
|
3098
2265
|
if (isLoading) {
|
|
3099
|
-
return /* @__PURE__ */
|
|
3100
|
-
/* @__PURE__ */
|
|
3101
|
-
/* @__PURE__ */
|
|
2266
|
+
return /* @__PURE__ */ jsxs19("div", { className: "ba-form", "data-testid": "signup-loading", "aria-busy": "true", children: [
|
|
2267
|
+
/* @__PURE__ */ jsx23("div", { className: "ba-skeleton" }),
|
|
2268
|
+
/* @__PURE__ */ jsx23("div", { className: "ba-skeleton" })
|
|
3102
2269
|
] });
|
|
3103
2270
|
}
|
|
3104
2271
|
if (config?.signUp?.mode === "waitlist") {
|
|
3105
|
-
return /* @__PURE__ */
|
|
2272
|
+
return /* @__PURE__ */ jsx23(Waitlist, { onJoined: onWaitlisted, showBadge, showBranding });
|
|
3106
2273
|
}
|
|
3107
2274
|
if (pendingEmail) {
|
|
3108
|
-
return /* @__PURE__ */
|
|
3109
|
-
/* @__PURE__ */
|
|
2275
|
+
return /* @__PURE__ */ jsxs19("div", { className: "ba-form", "data-testid": "signup-verify-pending", children: [
|
|
2276
|
+
showBranding ? /* @__PURE__ */ jsx23(AuthOwlBranding, {}) : null,
|
|
2277
|
+
/* @__PURE__ */ jsx23(
|
|
3110
2278
|
VerificationPending,
|
|
3111
2279
|
{
|
|
3112
2280
|
email: pendingEmail,
|
|
@@ -3114,7 +2282,7 @@ function SignUp({
|
|
|
3114
2282
|
method: capabilities.emailVerificationMethod
|
|
3115
2283
|
}
|
|
3116
2284
|
),
|
|
3117
|
-
/* @__PURE__ */
|
|
2285
|
+
/* @__PURE__ */ jsx23(AuthOwlBadge, { force: showBadge })
|
|
3118
2286
|
] });
|
|
3119
2287
|
}
|
|
3120
2288
|
const methods = config?.enabledMethods ?? ["password"];
|
|
@@ -3124,28 +2292,21 @@ function SignUp({
|
|
|
3124
2292
|
const showPasswordless = publicSignupAllowed && capabilities.emailOtpSignIn && capabilities.emailSignUp && !consentRequired && !capabilities.mfaRequired;
|
|
3125
2293
|
const renderable = showPassword || showPasswordless || social.length > 0;
|
|
3126
2294
|
if (completeWithPasskey) {
|
|
3127
|
-
return /* @__PURE__ */
|
|
3128
|
-
/* @__PURE__ */
|
|
3129
|
-
/* @__PURE__ */
|
|
2295
|
+
return /* @__PURE__ */ jsxs19("div", { className: "ba-form", "data-testid": "signup-passkey-step", children: [
|
|
2296
|
+
showBranding ? /* @__PURE__ */ jsx23(AuthOwlBranding, {}) : null,
|
|
2297
|
+
/* @__PURE__ */ jsx23(PasskeySignUpCompletion, { onComplete: finishSignUp }),
|
|
2298
|
+
/* @__PURE__ */ jsx23(AuthOwlBadge, { force: showBadge })
|
|
3130
2299
|
] });
|
|
3131
2300
|
}
|
|
3132
|
-
return /* @__PURE__ */
|
|
3133
|
-
/* @__PURE__ */
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
onAcceptedChange: setAccepted,
|
|
3140
|
-
testId: "signup-consent"
|
|
3141
|
-
}
|
|
3142
|
-
),
|
|
3143
|
-
/* @__PURE__ */ jsx22(SocialButtons, { providers: social, callbackURL: redirectTo }),
|
|
3144
|
-
showPassword && social.length > 0 && /* @__PURE__ */ jsx22("div", { className: "ba-divider", children: t("common.orDivider") }),
|
|
3145
|
-
showPassword && /* @__PURE__ */ jsxs18("form", { method: "post", onSubmit, className: "ba-fields", children: [
|
|
3146
|
-
capabilities.legacyNameField && /* @__PURE__ */ jsxs18("label", { className: "ba-label", children: [
|
|
2301
|
+
return /* @__PURE__ */ jsxs19("div", { className: "ba-form", "data-testid": "signup-form", children: [
|
|
2302
|
+
showBranding ? /* @__PURE__ */ jsx23(AuthOwlBranding, {}) : null,
|
|
2303
|
+
/* @__PURE__ */ jsx23("h2", { className: "ba-title", children: t("signUp.title") }),
|
|
2304
|
+
/* @__PURE__ */ jsx23(SocialButtons, { providers: social, callbackURL: redirectTo }),
|
|
2305
|
+
showPassword && social.length > 0 && /* @__PURE__ */ jsx23("div", { className: "ba-divider", children: t("common.orDivider") }),
|
|
2306
|
+
showPassword && /* @__PURE__ */ jsxs19("form", { method: "post", onSubmit, className: "ba-fields", children: [
|
|
2307
|
+
capabilities.legacyNameField && /* @__PURE__ */ jsxs19("label", { className: "ba-label", children: [
|
|
3147
2308
|
t("signUp.nameLabel"),
|
|
3148
|
-
/* @__PURE__ */
|
|
2309
|
+
/* @__PURE__ */ jsx23(
|
|
3149
2310
|
"input",
|
|
3150
2311
|
{
|
|
3151
2312
|
className: "ba-input",
|
|
@@ -3159,10 +2320,10 @@ function SignUp({
|
|
|
3159
2320
|
}
|
|
3160
2321
|
)
|
|
3161
2322
|
] }),
|
|
3162
|
-
capabilities.firstLastName && /* @__PURE__ */
|
|
3163
|
-
/* @__PURE__ */
|
|
2323
|
+
capabilities.firstLastName && /* @__PURE__ */ jsxs19(Fragment6, { children: [
|
|
2324
|
+
/* @__PURE__ */ jsxs19("label", { className: "ba-label", children: [
|
|
3164
2325
|
t("signUp.firstNameLabel"),
|
|
3165
|
-
/* @__PURE__ */
|
|
2326
|
+
/* @__PURE__ */ jsx23(
|
|
3166
2327
|
"input",
|
|
3167
2328
|
{
|
|
3168
2329
|
className: "ba-input",
|
|
@@ -3175,9 +2336,9 @@ function SignUp({
|
|
|
3175
2336
|
}
|
|
3176
2337
|
)
|
|
3177
2338
|
] }),
|
|
3178
|
-
/* @__PURE__ */
|
|
2339
|
+
/* @__PURE__ */ jsxs19("label", { className: "ba-label", children: [
|
|
3179
2340
|
t("signUp.lastNameLabel"),
|
|
3180
|
-
/* @__PURE__ */
|
|
2341
|
+
/* @__PURE__ */ jsx23(
|
|
3181
2342
|
"input",
|
|
3182
2343
|
{
|
|
3183
2344
|
className: "ba-input",
|
|
@@ -3191,9 +2352,9 @@ function SignUp({
|
|
|
3191
2352
|
)
|
|
3192
2353
|
] })
|
|
3193
2354
|
] }),
|
|
3194
|
-
capabilities.collectUsername && /* @__PURE__ */
|
|
2355
|
+
capabilities.collectUsername && /* @__PURE__ */ jsxs19("label", { className: "ba-label", children: [
|
|
3195
2356
|
t("common.usernameLabel"),
|
|
3196
|
-
/* @__PURE__ */
|
|
2357
|
+
/* @__PURE__ */ jsx23(
|
|
3197
2358
|
"input",
|
|
3198
2359
|
{
|
|
3199
2360
|
className: "ba-input",
|
|
@@ -3207,9 +2368,9 @@ function SignUp({
|
|
|
3207
2368
|
}
|
|
3208
2369
|
)
|
|
3209
2370
|
] }),
|
|
3210
|
-
/* @__PURE__ */
|
|
2371
|
+
/* @__PURE__ */ jsxs19("label", { className: "ba-label", children: [
|
|
3211
2372
|
t("common.emailLabel"),
|
|
3212
|
-
/* @__PURE__ */
|
|
2373
|
+
/* @__PURE__ */ jsx23(
|
|
3213
2374
|
"input",
|
|
3214
2375
|
{
|
|
3215
2376
|
className: "ba-input",
|
|
@@ -3224,9 +2385,9 @@ function SignUp({
|
|
|
3224
2385
|
}
|
|
3225
2386
|
)
|
|
3226
2387
|
] }),
|
|
3227
|
-
/* @__PURE__ */
|
|
2388
|
+
/* @__PURE__ */ jsxs19("label", { className: "ba-label", children: [
|
|
3228
2389
|
t("common.passwordLabel"),
|
|
3229
|
-
/* @__PURE__ */
|
|
2390
|
+
/* @__PURE__ */ jsx23(
|
|
3230
2391
|
"input",
|
|
3231
2392
|
{
|
|
3232
2393
|
className: "ba-input",
|
|
@@ -3244,20 +2405,29 @@ function SignUp({
|
|
|
3244
2405
|
)
|
|
3245
2406
|
] }),
|
|
3246
2407
|
authChallenge.control,
|
|
3247
|
-
/* @__PURE__ */
|
|
3248
|
-
|
|
2408
|
+
legal && /* @__PURE__ */ jsx23(
|
|
2409
|
+
LegalConsentCheckbox,
|
|
2410
|
+
{
|
|
2411
|
+
legal,
|
|
2412
|
+
accepted,
|
|
2413
|
+
onAcceptedChange: setAccepted,
|
|
2414
|
+
testId: "signup-consent"
|
|
2415
|
+
}
|
|
2416
|
+
),
|
|
2417
|
+
/* @__PURE__ */ jsx23(FormError, { children: error }),
|
|
2418
|
+
/* @__PURE__ */ jsx23(
|
|
3249
2419
|
"button",
|
|
3250
2420
|
{
|
|
3251
2421
|
className: "ba-button",
|
|
3252
2422
|
type: "submit",
|
|
3253
2423
|
disabled: submitting || consentBlocked || authChallenge.configPending,
|
|
3254
2424
|
"aria-busy": submitting || void 0,
|
|
3255
|
-
children: /* @__PURE__ */
|
|
2425
|
+
children: /* @__PURE__ */ jsx23(Busy, { busy: submitting, label: t("signUp.submitPending"), children: t("signUp.submit") })
|
|
3256
2426
|
}
|
|
3257
2427
|
)
|
|
3258
2428
|
] }),
|
|
3259
|
-
showPasswordless && (showPassword || social.length > 0) && /* @__PURE__ */
|
|
3260
|
-
showPasswordless && /* @__PURE__ */
|
|
2429
|
+
showPasswordless && (showPassword || social.length > 0) && /* @__PURE__ */ jsx23("div", { className: "ba-divider", children: t("common.orDivider") }),
|
|
2430
|
+
showPasswordless && /* @__PURE__ */ jsx23(
|
|
3261
2431
|
PasswordlessSignUp,
|
|
3262
2432
|
{
|
|
3263
2433
|
onAuthenticated: () => {
|
|
@@ -3266,25 +2436,25 @@ function SignUp({
|
|
|
3266
2436
|
}
|
|
3267
2437
|
}
|
|
3268
2438
|
),
|
|
3269
|
-
!renderable && /* @__PURE__ */
|
|
3270
|
-
/* @__PURE__ */
|
|
2439
|
+
!renderable && /* @__PURE__ */ jsx23("p", { className: "ba-muted", children: publicSignupAllowed && methods.length > 0 ? t("signUp.empty.unsupported") : t("signUp.empty.none") }),
|
|
2440
|
+
/* @__PURE__ */ jsx23(AuthOwlBadge, { force: showBadge })
|
|
3271
2441
|
] });
|
|
3272
2442
|
}
|
|
3273
2443
|
|
|
3274
2444
|
// src/components/ConsentGate.tsx
|
|
3275
|
-
import { Fragment as Fragment7, jsx as
|
|
2445
|
+
import { Fragment as Fragment7, jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
3276
2446
|
function ConsentGate({ children, title }) {
|
|
3277
2447
|
const t = useT();
|
|
3278
2448
|
const { needsConsent, status, accept } = useConsent();
|
|
3279
2449
|
const { pending, error, run } = useSubmitAction();
|
|
3280
|
-
if (!needsConsent) return /* @__PURE__ */
|
|
3281
|
-
return /* @__PURE__ */
|
|
3282
|
-
/* @__PURE__ */
|
|
3283
|
-
/* @__PURE__ */
|
|
3284
|
-
links: /* @__PURE__ */
|
|
2450
|
+
if (!needsConsent) return /* @__PURE__ */ jsx24(Fragment7, { children });
|
|
2451
|
+
return /* @__PURE__ */ jsxs20("div", { className: "ba-form", "data-testid": "consent-gate", children: [
|
|
2452
|
+
/* @__PURE__ */ jsx24("h2", { className: "ba-title", children: title ?? t("consent.gateTitle") }),
|
|
2453
|
+
/* @__PURE__ */ jsx24("p", { className: "ba-muted", children: richMessage(t("consent.gateBody"), {
|
|
2454
|
+
links: /* @__PURE__ */ jsx24(ConsentDocLinks, { termsUrl: status?.termsUrl, privacyUrl: status?.privacyUrl })
|
|
3285
2455
|
}) }),
|
|
3286
|
-
/* @__PURE__ */
|
|
3287
|
-
/* @__PURE__ */
|
|
2456
|
+
/* @__PURE__ */ jsx24(FormError, { children: error }),
|
|
2457
|
+
/* @__PURE__ */ jsx24(
|
|
3288
2458
|
"button",
|
|
3289
2459
|
{
|
|
3290
2460
|
className: "ba-button",
|
|
@@ -3298,18 +2468,18 @@ function ConsentGate({ children, title }) {
|
|
|
3298
2468
|
},
|
|
3299
2469
|
{ failure: t("consent.error.acceptFailed") }
|
|
3300
2470
|
),
|
|
3301
|
-
children: /* @__PURE__ */
|
|
2471
|
+
children: /* @__PURE__ */ jsx24(Busy, { busy: pending, label: t("consent.acceptPending"), children: t("consent.acceptSubmit") })
|
|
3302
2472
|
}
|
|
3303
2473
|
),
|
|
3304
|
-
/* @__PURE__ */
|
|
2474
|
+
/* @__PURE__ */ jsx24(AuthOwlBadge, {})
|
|
3305
2475
|
] });
|
|
3306
2476
|
}
|
|
3307
2477
|
|
|
3308
2478
|
// src/components/MFARequiredGate.tsx
|
|
3309
|
-
import * as
|
|
2479
|
+
import * as React20 from "react";
|
|
3310
2480
|
|
|
3311
2481
|
// src/components/MFAEnrollment.tsx
|
|
3312
|
-
import * as
|
|
2482
|
+
import * as React19 from "react";
|
|
3313
2483
|
|
|
3314
2484
|
// src/components/mfa-enrollment.ts
|
|
3315
2485
|
function shouldDiscardSetup(args) {
|
|
@@ -3318,7 +2488,7 @@ function shouldDiscardSetup(args) {
|
|
|
3318
2488
|
}
|
|
3319
2489
|
|
|
3320
2490
|
// src/components/QrCode.tsx
|
|
3321
|
-
import * as
|
|
2491
|
+
import * as React18 from "react";
|
|
3322
2492
|
|
|
3323
2493
|
// ../../node_modules/.pnpm/qrcode-generator@2.0.4/node_modules/qrcode-generator/dist/qrcode.mjs
|
|
3324
2494
|
var qrcode = function(typeNumber, errorCorrectionLevel) {
|
|
@@ -4975,14 +4145,14 @@ function qrPath(value) {
|
|
|
4975
4145
|
}
|
|
4976
4146
|
|
|
4977
4147
|
// src/components/QrCode.tsx
|
|
4978
|
-
import { jsx as
|
|
4148
|
+
import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4979
4149
|
function QrCode({ value, size = 200 }) {
|
|
4980
4150
|
const t = useT();
|
|
4981
|
-
const path =
|
|
4151
|
+
const path = React18.useMemo(() => qrPath(value), [value]);
|
|
4982
4152
|
if (!path) return null;
|
|
4983
4153
|
const margin = 4;
|
|
4984
4154
|
const dim = path.count + margin * 2;
|
|
4985
|
-
return /* @__PURE__ */
|
|
4155
|
+
return /* @__PURE__ */ jsxs21(
|
|
4986
4156
|
"svg",
|
|
4987
4157
|
{
|
|
4988
4158
|
width: size,
|
|
@@ -4993,15 +4163,15 @@ function QrCode({ value, size = 200 }) {
|
|
|
4993
4163
|
shapeRendering: "crispEdges",
|
|
4994
4164
|
className: "ba-qr",
|
|
4995
4165
|
children: [
|
|
4996
|
-
/* @__PURE__ */
|
|
4997
|
-
/* @__PURE__ */
|
|
4166
|
+
/* @__PURE__ */ jsx25("rect", { width: dim, height: dim, fill: "#ffffff" }),
|
|
4167
|
+
/* @__PURE__ */ jsx25("g", { transform: `translate(${margin} ${margin})`, children: /* @__PURE__ */ jsx25("path", { d: path.d, fill: "#000000" }) })
|
|
4998
4168
|
]
|
|
4999
4169
|
}
|
|
5000
4170
|
);
|
|
5001
4171
|
}
|
|
5002
4172
|
|
|
5003
4173
|
// src/components/MFAEnrollment.tsx
|
|
5004
|
-
import { jsx as
|
|
4174
|
+
import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
5005
4175
|
function secretFromUri(uri) {
|
|
5006
4176
|
try {
|
|
5007
4177
|
return new URL(uri).searchParams.get("secret");
|
|
@@ -5014,11 +4184,11 @@ function MFAEnrollment({ onEnrolled, title }) {
|
|
|
5014
4184
|
const { enable, verifyTotp } = useMFA();
|
|
5015
4185
|
const { user, isLoaded } = useUser();
|
|
5016
4186
|
const { pending, error, run } = useSubmitAction();
|
|
5017
|
-
const [password, setPassword] =
|
|
5018
|
-
const [setup, setSetup] =
|
|
5019
|
-
const [code, setCode] =
|
|
5020
|
-
const [done, setDone] =
|
|
5021
|
-
const setupOwnerId =
|
|
4187
|
+
const [password, setPassword] = React19.useState("");
|
|
4188
|
+
const [setup, setSetup] = React19.useState(null);
|
|
4189
|
+
const [code, setCode] = React19.useState("");
|
|
4190
|
+
const [done, setDone] = React19.useState(false);
|
|
4191
|
+
const setupOwnerId = React19.useRef(null);
|
|
5022
4192
|
const userId = user?.id ?? null;
|
|
5023
4193
|
const stale = shouldDiscardSetup({
|
|
5024
4194
|
isLoaded,
|
|
@@ -5027,7 +4197,7 @@ function MFAEnrollment({ onEnrolled, title }) {
|
|
|
5027
4197
|
currentUserId: userId
|
|
5028
4198
|
});
|
|
5029
4199
|
const activeSetup = stale ? null : setup;
|
|
5030
|
-
|
|
4200
|
+
React19.useEffect(() => {
|
|
5031
4201
|
if (stale) {
|
|
5032
4202
|
setSetup(null);
|
|
5033
4203
|
setPassword("");
|
|
@@ -5035,22 +4205,22 @@ function MFAEnrollment({ onEnrolled, title }) {
|
|
|
5035
4205
|
}
|
|
5036
4206
|
}, [stale]);
|
|
5037
4207
|
if (done) {
|
|
5038
|
-
return /* @__PURE__ */
|
|
5039
|
-
/* @__PURE__ */
|
|
5040
|
-
/* @__PURE__ */
|
|
4208
|
+
return /* @__PURE__ */ jsxs22("div", { className: "ba-fields", "data-testid": "mfa-enroll-done", children: [
|
|
4209
|
+
/* @__PURE__ */ jsx26("h2", { className: "ba-title", children: t("mfa.enroll.doneTitle") }),
|
|
4210
|
+
/* @__PURE__ */ jsx26("p", { className: "ba-muted", children: t("mfa.enroll.doneBody") })
|
|
5041
4211
|
] });
|
|
5042
4212
|
}
|
|
5043
4213
|
if (!activeSetup) {
|
|
5044
4214
|
if (!isLoaded) {
|
|
5045
|
-
return /* @__PURE__ */
|
|
4215
|
+
return /* @__PURE__ */ jsx26("div", { className: "ba-fields", "data-testid": "mfa-enroll-loading", "aria-busy": "true", children: /* @__PURE__ */ jsx26("div", { className: "ba-skeleton" }) });
|
|
5046
4216
|
}
|
|
5047
4217
|
if (user?.twoFactorEnabled) {
|
|
5048
|
-
return /* @__PURE__ */
|
|
5049
|
-
/* @__PURE__ */
|
|
5050
|
-
/* @__PURE__ */
|
|
4218
|
+
return /* @__PURE__ */ jsxs22("div", { className: "ba-fields", "data-testid": "mfa-enroll-active", children: [
|
|
4219
|
+
/* @__PURE__ */ jsx26("h2", { className: "ba-title", children: t("mfa.enroll.activeTitle") }),
|
|
4220
|
+
/* @__PURE__ */ jsx26("p", { className: "ba-muted", children: t("mfa.enroll.activeBody") })
|
|
5051
4221
|
] });
|
|
5052
4222
|
}
|
|
5053
|
-
return /* @__PURE__ */
|
|
4223
|
+
return /* @__PURE__ */ jsxs22(
|
|
5054
4224
|
"form",
|
|
5055
4225
|
{
|
|
5056
4226
|
method: "post",
|
|
@@ -5067,11 +4237,11 @@ function MFAEnrollment({ onEnrolled, title }) {
|
|
|
5067
4237
|
});
|
|
5068
4238
|
},
|
|
5069
4239
|
children: [
|
|
5070
|
-
title !== null && /* @__PURE__ */
|
|
5071
|
-
/* @__PURE__ */
|
|
5072
|
-
/* @__PURE__ */
|
|
4240
|
+
title !== null && /* @__PURE__ */ jsx26("h2", { className: "ba-title", children: title ?? t("mfa.enroll.title") }),
|
|
4241
|
+
/* @__PURE__ */ jsx26("p", { className: "ba-muted", children: t("mfa.enroll.passwordHint") }),
|
|
4242
|
+
/* @__PURE__ */ jsxs22("label", { className: "ba-label", children: [
|
|
5073
4243
|
t("common.passwordLabel"),
|
|
5074
|
-
/* @__PURE__ */
|
|
4244
|
+
/* @__PURE__ */ jsx26(
|
|
5075
4245
|
"input",
|
|
5076
4246
|
{
|
|
5077
4247
|
className: "ba-input",
|
|
@@ -5083,29 +4253,29 @@ function MFAEnrollment({ onEnrolled, title }) {
|
|
|
5083
4253
|
}
|
|
5084
4254
|
)
|
|
5085
4255
|
] }),
|
|
5086
|
-
/* @__PURE__ */
|
|
5087
|
-
/* @__PURE__ */
|
|
4256
|
+
/* @__PURE__ */ jsx26(FormError, { children: error }),
|
|
4257
|
+
/* @__PURE__ */ jsx26("button", { className: "ba-button", type: "submit", disabled: pending || !password, "aria-busy": pending || void 0, children: /* @__PURE__ */ jsx26(Busy, { busy: pending, label: t("mfa.enroll.startPending"), children: t("common.continue") }) })
|
|
5088
4258
|
]
|
|
5089
4259
|
}
|
|
5090
4260
|
);
|
|
5091
4261
|
}
|
|
5092
4262
|
const secret = secretFromUri(activeSetup.totpURI);
|
|
5093
|
-
return /* @__PURE__ */
|
|
5094
|
-
/* @__PURE__ */
|
|
5095
|
-
/* @__PURE__ */
|
|
5096
|
-
/* @__PURE__ */
|
|
5097
|
-
secret && /* @__PURE__ */
|
|
5098
|
-
secret: /* @__PURE__ */
|
|
4263
|
+
return /* @__PURE__ */ jsxs22("div", { className: "ba-fields", "data-testid": "mfa-enroll-verify", children: [
|
|
4264
|
+
/* @__PURE__ */ jsx26("h2", { className: "ba-title", children: t("mfa.enroll.scanQrTitle") }),
|
|
4265
|
+
/* @__PURE__ */ jsx26("p", { className: "ba-muted", children: t("mfa.enroll.scanQrHint") }),
|
|
4266
|
+
/* @__PURE__ */ jsx26(QrCode, { value: activeSetup.totpURI }),
|
|
4267
|
+
secret && /* @__PURE__ */ jsx26("p", { className: "ba-muted", children: richMessage(t("mfa.enroll.manualKey"), {
|
|
4268
|
+
secret: /* @__PURE__ */ jsx26("code", { className: "ba-code", children: /* @__PURE__ */ jsx26(Bidi, { children: secret }) })
|
|
5099
4269
|
}) }),
|
|
5100
|
-
/* @__PURE__ */
|
|
5101
|
-
/* @__PURE__ */
|
|
5102
|
-
/* @__PURE__ */
|
|
4270
|
+
/* @__PURE__ */ jsxs22("div", { children: [
|
|
4271
|
+
/* @__PURE__ */ jsxs22("p", { className: "ba-muted", children: [
|
|
4272
|
+
/* @__PURE__ */ jsx26("strong", { children: t("mfa.enroll.backupCodesWarningStrong") }),
|
|
5103
4273
|
" ",
|
|
5104
4274
|
t("mfa.enroll.backupCodesWarningRest")
|
|
5105
4275
|
] }),
|
|
5106
|
-
/* @__PURE__ */
|
|
4276
|
+
/* @__PURE__ */ jsx26("ul", { className: "ba-backup-codes", "data-testid": "mfa-backup-codes", children: activeSetup.backupCodes.map((c) => /* @__PURE__ */ jsx26("li", { children: /* @__PURE__ */ jsx26("code", { className: "ba-code", children: c }) }, c)) })
|
|
5107
4277
|
] }),
|
|
5108
|
-
/* @__PURE__ */
|
|
4278
|
+
/* @__PURE__ */ jsxs22(
|
|
5109
4279
|
"form",
|
|
5110
4280
|
{
|
|
5111
4281
|
method: "post",
|
|
@@ -5123,9 +4293,9 @@ function MFAEnrollment({ onEnrolled, title }) {
|
|
|
5123
4293
|
});
|
|
5124
4294
|
},
|
|
5125
4295
|
children: [
|
|
5126
|
-
/* @__PURE__ */
|
|
4296
|
+
/* @__PURE__ */ jsxs22("label", { className: "ba-label", children: [
|
|
5127
4297
|
t("mfa.enroll.codeLabel"),
|
|
5128
|
-
/* @__PURE__ */
|
|
4298
|
+
/* @__PURE__ */ jsx26(
|
|
5129
4299
|
"input",
|
|
5130
4300
|
{
|
|
5131
4301
|
className: "ba-input",
|
|
@@ -5137,8 +4307,8 @@ function MFAEnrollment({ onEnrolled, title }) {
|
|
|
5137
4307
|
}
|
|
5138
4308
|
)
|
|
5139
4309
|
] }),
|
|
5140
|
-
/* @__PURE__ */
|
|
5141
|
-
/* @__PURE__ */
|
|
4310
|
+
/* @__PURE__ */ jsx26(FormError, { children: error }),
|
|
4311
|
+
/* @__PURE__ */ jsx26("button", { className: "ba-button", type: "submit", disabled: pending || !code, "aria-busy": pending || void 0, children: /* @__PURE__ */ jsx26(Busy, { busy: pending, label: t("common.verifying"), children: t("mfa.enroll.activateSubmit") }) })
|
|
5142
4312
|
]
|
|
5143
4313
|
}
|
|
5144
4314
|
)
|
|
@@ -5146,14 +4316,14 @@ function MFAEnrollment({ onEnrolled, title }) {
|
|
|
5146
4316
|
}
|
|
5147
4317
|
|
|
5148
4318
|
// src/components/MFARequiredGate.tsx
|
|
5149
|
-
import { Fragment as Fragment8, jsx as
|
|
4319
|
+
import { Fragment as Fragment8, jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
5150
4320
|
function MFARequiredGate({ children, title }) {
|
|
5151
4321
|
const t = useT();
|
|
5152
4322
|
const client = useAuthClient();
|
|
5153
4323
|
const { needsMfaEnrollment } = useUser();
|
|
5154
4324
|
const { refetch } = useSession();
|
|
5155
|
-
const [confirmedPending, setConfirmedPending] =
|
|
5156
|
-
|
|
4325
|
+
const [confirmedPending, setConfirmedPending] = React20.useState(null);
|
|
4326
|
+
React20.useEffect(() => {
|
|
5157
4327
|
if (!needsMfaEnrollment) {
|
|
5158
4328
|
setConfirmedPending(null);
|
|
5159
4329
|
return;
|
|
@@ -5171,26 +4341,26 @@ function MFARequiredGate({ children, title }) {
|
|
|
5171
4341
|
active = false;
|
|
5172
4342
|
};
|
|
5173
4343
|
}, [client, needsMfaEnrollment, refetch]);
|
|
5174
|
-
if (!needsMfaEnrollment) return /* @__PURE__ */
|
|
4344
|
+
if (!needsMfaEnrollment) return /* @__PURE__ */ jsx27(Fragment8, { children });
|
|
5175
4345
|
if (confirmedPending !== true) return null;
|
|
5176
|
-
return /* @__PURE__ */
|
|
5177
|
-
/* @__PURE__ */
|
|
5178
|
-
/* @__PURE__ */
|
|
5179
|
-
/* @__PURE__ */
|
|
5180
|
-
/* @__PURE__ */
|
|
4346
|
+
return /* @__PURE__ */ jsxs23("div", { className: "ba-form", "data-testid": "mfa-required-gate", children: [
|
|
4347
|
+
/* @__PURE__ */ jsx27("h2", { className: "ba-title", children: title ?? t("mfaGate.title") }),
|
|
4348
|
+
/* @__PURE__ */ jsx27("p", { className: "ba-muted", children: t("mfaGate.body") }),
|
|
4349
|
+
/* @__PURE__ */ jsx27(MFAEnrollment, { onEnrolled: () => refetch({ query: { disableCookieCache: true } }) }),
|
|
4350
|
+
/* @__PURE__ */ jsx27(AuthOwlBadge, {})
|
|
5181
4351
|
] });
|
|
5182
4352
|
}
|
|
5183
4353
|
|
|
5184
4354
|
// src/components/BackupCodesManager.tsx
|
|
5185
|
-
import * as
|
|
5186
|
-
import { Fragment as Fragment9, jsx as
|
|
4355
|
+
import * as React21 from "react";
|
|
4356
|
+
import { Fragment as Fragment9, jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5187
4357
|
function BackupCodesManager({ title }) {
|
|
5188
4358
|
const t = useT();
|
|
5189
4359
|
const { user } = useUser();
|
|
5190
4360
|
const { regenerateBackupCodes } = useMFA();
|
|
5191
4361
|
const { pending, error, run } = useSubmitAction();
|
|
5192
|
-
const [password, setPassword] =
|
|
5193
|
-
const [codes, setCodes] =
|
|
4362
|
+
const [password, setPassword] = React21.useState("");
|
|
4363
|
+
const [codes, setCodes] = React21.useState(null);
|
|
5194
4364
|
if (!user?.twoFactorEnabled) return null;
|
|
5195
4365
|
const submit = (e) => {
|
|
5196
4366
|
e.preventDefault();
|
|
@@ -5202,20 +4372,20 @@ function BackupCodesManager({ title }) {
|
|
|
5202
4372
|
}
|
|
5203
4373
|
});
|
|
5204
4374
|
};
|
|
5205
|
-
return /* @__PURE__ */
|
|
5206
|
-
title !== null && /* @__PURE__ */
|
|
5207
|
-
/* @__PURE__ */
|
|
5208
|
-
codes ? /* @__PURE__ */
|
|
5209
|
-
/* @__PURE__ */
|
|
5210
|
-
/* @__PURE__ */
|
|
4375
|
+
return /* @__PURE__ */ jsxs24("div", { className: "ba-form", "data-testid": "backup-codes-manager", children: [
|
|
4376
|
+
title !== null && /* @__PURE__ */ jsx28("h2", { className: "ba-title", children: title ?? t("backupCodes.title") }),
|
|
4377
|
+
/* @__PURE__ */ jsx28("p", { className: "ba-muted", children: t("backupCodes.hint") }),
|
|
4378
|
+
codes ? /* @__PURE__ */ jsxs24(Fragment9, { children: [
|
|
4379
|
+
/* @__PURE__ */ jsxs24("p", { className: "ba-muted", children: [
|
|
4380
|
+
/* @__PURE__ */ jsx28("strong", { children: t("mfa.enroll.backupCodesWarningStrong") }),
|
|
5211
4381
|
" ",
|
|
5212
4382
|
t("mfa.enroll.backupCodesWarningRest")
|
|
5213
4383
|
] }),
|
|
5214
|
-
/* @__PURE__ */
|
|
5215
|
-
] }) : /* @__PURE__ */
|
|
5216
|
-
/* @__PURE__ */
|
|
4384
|
+
/* @__PURE__ */ jsx28("ul", { className: "ba-passkey-list", "data-testid": "backup-codes-list", children: codes.map((c) => /* @__PURE__ */ jsx28("li", { className: "ba-passkey-item", children: /* @__PURE__ */ jsx28("code", { children: /* @__PURE__ */ jsx28("bdi", { children: c }) }) }, c)) })
|
|
4385
|
+
] }) : /* @__PURE__ */ jsxs24("form", { method: "post", className: "ba-fields", onSubmit: submit, children: [
|
|
4386
|
+
/* @__PURE__ */ jsxs24("label", { className: "ba-label", children: [
|
|
5217
4387
|
t("common.passwordLabel"),
|
|
5218
|
-
/* @__PURE__ */
|
|
4388
|
+
/* @__PURE__ */ jsx28(
|
|
5219
4389
|
"input",
|
|
5220
4390
|
{
|
|
5221
4391
|
className: "ba-input",
|
|
@@ -5227,26 +4397,26 @@ function BackupCodesManager({ title }) {
|
|
|
5227
4397
|
}
|
|
5228
4398
|
)
|
|
5229
4399
|
] }),
|
|
5230
|
-
/* @__PURE__ */
|
|
5231
|
-
/* @__PURE__ */
|
|
4400
|
+
/* @__PURE__ */ jsx28(FormError, { children: error }),
|
|
4401
|
+
/* @__PURE__ */ jsx28("button", { className: "ba-button", type: "submit", disabled: pending || !password, "aria-busy": pending || void 0, children: /* @__PURE__ */ jsx28(Busy, { busy: pending, label: t("backupCodes.pending"), children: t("backupCodes.submit") }) })
|
|
5232
4402
|
] })
|
|
5233
4403
|
] });
|
|
5234
4404
|
}
|
|
5235
4405
|
|
|
5236
4406
|
// src/components/MagicLinkForm.tsx
|
|
5237
|
-
import * as
|
|
5238
|
-
import { jsx as
|
|
4407
|
+
import * as React22 from "react";
|
|
4408
|
+
import { jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
5239
4409
|
function MagicLinkForm({ callbackURL, webauthnAutofill }) {
|
|
5240
4410
|
const t = useT();
|
|
5241
4411
|
const { signInMagicLink } = useSignIn();
|
|
5242
4412
|
const { pending, error, run } = useSubmitAction();
|
|
5243
4413
|
const authChallenge = useAuthChallenge();
|
|
5244
|
-
const [email, setEmail] =
|
|
5245
|
-
const [sent, setSent] =
|
|
4414
|
+
const [email, setEmail] = React22.useState("");
|
|
4415
|
+
const [sent, setSent] = React22.useState(false);
|
|
5246
4416
|
if (sent) {
|
|
5247
|
-
return /* @__PURE__ */
|
|
4417
|
+
return /* @__PURE__ */ jsx29("p", { className: "ba-muted", "data-testid": "magiclink-sent", children: t("magicLink.sent") });
|
|
5248
4418
|
}
|
|
5249
|
-
return /* @__PURE__ */
|
|
4419
|
+
return /* @__PURE__ */ jsxs25(
|
|
5250
4420
|
"form",
|
|
5251
4421
|
{
|
|
5252
4422
|
method: "post",
|
|
@@ -5260,9 +4430,9 @@ function MagicLinkForm({ callbackURL, webauthnAutofill }) {
|
|
|
5260
4430
|
className: "ba-fields",
|
|
5261
4431
|
"data-testid": "magiclink-form",
|
|
5262
4432
|
children: [
|
|
5263
|
-
/* @__PURE__ */
|
|
4433
|
+
/* @__PURE__ */ jsxs25("label", { className: "ba-label", children: [
|
|
5264
4434
|
t("common.emailLabel"),
|
|
5265
|
-
/* @__PURE__ */
|
|
4435
|
+
/* @__PURE__ */ jsx29(
|
|
5266
4436
|
"input",
|
|
5267
4437
|
{
|
|
5268
4438
|
className: "ba-input",
|
|
@@ -5275,15 +4445,15 @@ function MagicLinkForm({ callbackURL, webauthnAutofill }) {
|
|
|
5275
4445
|
)
|
|
5276
4446
|
] }),
|
|
5277
4447
|
authChallenge.control,
|
|
5278
|
-
/* @__PURE__ */
|
|
5279
|
-
/* @__PURE__ */
|
|
4448
|
+
/* @__PURE__ */ jsx29(FormError, { children: error }),
|
|
4449
|
+
/* @__PURE__ */ jsx29(
|
|
5280
4450
|
"button",
|
|
5281
4451
|
{
|
|
5282
4452
|
className: "ba-button",
|
|
5283
4453
|
type: "submit",
|
|
5284
4454
|
disabled: pending || authChallenge.configPending,
|
|
5285
4455
|
"aria-busy": pending || void 0,
|
|
5286
|
-
children: /* @__PURE__ */
|
|
4456
|
+
children: /* @__PURE__ */ jsx29(Busy, { busy: pending, label: t("common.sending"), children: t("magicLink.submit") })
|
|
5287
4457
|
}
|
|
5288
4458
|
)
|
|
5289
4459
|
]
|
|
@@ -5292,19 +4462,19 @@ function MagicLinkForm({ callbackURL, webauthnAutofill }) {
|
|
|
5292
4462
|
}
|
|
5293
4463
|
|
|
5294
4464
|
// src/components/EmailOtpForm.tsx
|
|
5295
|
-
import * as
|
|
5296
|
-
import { jsx as
|
|
4465
|
+
import * as React23 from "react";
|
|
4466
|
+
import { jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
5297
4467
|
function EmailOtpForm({ redirectTo, onSignedIn, webauthnAutofill }) {
|
|
5298
4468
|
const t = useT();
|
|
5299
4469
|
const { sessionStore } = useAuthClient();
|
|
5300
4470
|
const { sendEmailOtp, signInEmailOtp } = useSignIn();
|
|
5301
4471
|
const { pending, error, setError, run } = useSubmitAction();
|
|
5302
4472
|
const authChallenge = useAuthChallenge();
|
|
5303
|
-
const [email, setEmail] =
|
|
5304
|
-
const [otp, setOtp] =
|
|
5305
|
-
const [stage, setStage] =
|
|
4473
|
+
const [email, setEmail] = React23.useState("");
|
|
4474
|
+
const [otp, setOtp] = React23.useState("");
|
|
4475
|
+
const [stage, setStage] = React23.useState("email");
|
|
5306
4476
|
if (stage === "code") {
|
|
5307
|
-
return /* @__PURE__ */
|
|
4477
|
+
return /* @__PURE__ */ jsx30(
|
|
5308
4478
|
OtpCodeForm,
|
|
5309
4479
|
{
|
|
5310
4480
|
email,
|
|
@@ -5327,7 +4497,7 @@ function EmailOtpForm({ redirectTo, onSignedIn, webauthnAutofill }) {
|
|
|
5327
4497
|
}
|
|
5328
4498
|
);
|
|
5329
4499
|
}
|
|
5330
|
-
return /* @__PURE__ */
|
|
4500
|
+
return /* @__PURE__ */ jsxs26(
|
|
5331
4501
|
"form",
|
|
5332
4502
|
{
|
|
5333
4503
|
method: "post",
|
|
@@ -5341,9 +4511,9 @@ function EmailOtpForm({ redirectTo, onSignedIn, webauthnAutofill }) {
|
|
|
5341
4511
|
className: "ba-fields",
|
|
5342
4512
|
"data-testid": "emailotp-email",
|
|
5343
4513
|
children: [
|
|
5344
|
-
/* @__PURE__ */
|
|
4514
|
+
/* @__PURE__ */ jsxs26("label", { className: "ba-label", children: [
|
|
5345
4515
|
t("common.emailLabel"),
|
|
5346
|
-
/* @__PURE__ */
|
|
4516
|
+
/* @__PURE__ */ jsx30(
|
|
5347
4517
|
"input",
|
|
5348
4518
|
{
|
|
5349
4519
|
className: "ba-input",
|
|
@@ -5359,15 +4529,15 @@ function EmailOtpForm({ redirectTo, onSignedIn, webauthnAutofill }) {
|
|
|
5359
4529
|
)
|
|
5360
4530
|
] }),
|
|
5361
4531
|
authChallenge.control,
|
|
5362
|
-
/* @__PURE__ */
|
|
5363
|
-
/* @__PURE__ */
|
|
4532
|
+
/* @__PURE__ */ jsx30(FormError, { children: error }),
|
|
4533
|
+
/* @__PURE__ */ jsx30(
|
|
5364
4534
|
"button",
|
|
5365
4535
|
{
|
|
5366
4536
|
className: "ba-button",
|
|
5367
4537
|
type: "submit",
|
|
5368
4538
|
disabled: pending || authChallenge.configPending,
|
|
5369
4539
|
"aria-busy": pending || void 0,
|
|
5370
|
-
children: /* @__PURE__ */
|
|
4540
|
+
children: /* @__PURE__ */ jsx30(Busy, { busy: pending, label: t("common.sending"), children: t("emailOtp.requestSubmit") })
|
|
5371
4541
|
}
|
|
5372
4542
|
)
|
|
5373
4543
|
]
|
|
@@ -5376,8 +4546,8 @@ function EmailOtpForm({ redirectTo, onSignedIn, webauthnAutofill }) {
|
|
|
5376
4546
|
}
|
|
5377
4547
|
|
|
5378
4548
|
// src/components/ResetPassword.tsx
|
|
5379
|
-
import * as
|
|
5380
|
-
import { jsx as
|
|
4549
|
+
import * as React24 from "react";
|
|
4550
|
+
import { jsx as jsx31, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
5381
4551
|
function ResetPassword({ token: tokenProp, redirectTo, onReset }) {
|
|
5382
4552
|
const t = useT();
|
|
5383
4553
|
const { resetPassword } = usePasswordReset();
|
|
@@ -5385,27 +4555,27 @@ function ResetPassword({ token: tokenProp, redirectTo, onReset }) {
|
|
|
5385
4555
|
const capabilities = resolveProjectCapabilities(config);
|
|
5386
4556
|
const { passwordMinLength, passwordMaxLength } = capabilities;
|
|
5387
4557
|
const { pending, error, setError, run } = useSubmitAction();
|
|
5388
|
-
const [token, setToken] =
|
|
5389
|
-
const [ready, setReady] =
|
|
5390
|
-
const [password, setPassword] =
|
|
5391
|
-
const [confirm, setConfirm] =
|
|
5392
|
-
const [done, setDone] =
|
|
5393
|
-
|
|
4558
|
+
const [token, setToken] = React24.useState(tokenProp ?? null);
|
|
4559
|
+
const [ready, setReady] = React24.useState(tokenProp != null);
|
|
4560
|
+
const [password, setPassword] = React24.useState("");
|
|
4561
|
+
const [confirm, setConfirm] = React24.useState("");
|
|
4562
|
+
const [done, setDone] = React24.useState(false);
|
|
4563
|
+
React24.useEffect(() => {
|
|
5394
4564
|
if (tokenProp != null) return;
|
|
5395
4565
|
const params = new URLSearchParams(window.location.search);
|
|
5396
4566
|
setToken(params.get("token"));
|
|
5397
4567
|
setReady(true);
|
|
5398
4568
|
}, [tokenProp]);
|
|
5399
4569
|
if (!ready) {
|
|
5400
|
-
return /* @__PURE__ */
|
|
4570
|
+
return /* @__PURE__ */ jsx31("div", { className: "ba-form", "aria-busy": "true", children: /* @__PURE__ */ jsx31("div", { className: "ba-skeleton" }) });
|
|
5401
4571
|
}
|
|
5402
4572
|
if (!token) {
|
|
5403
|
-
return /* @__PURE__ */
|
|
4573
|
+
return /* @__PURE__ */ jsx31(FormError, { "data-testid": "reset-invalid", children: t("resetPassword.invalidLink") });
|
|
5404
4574
|
}
|
|
5405
4575
|
if (done) {
|
|
5406
|
-
return /* @__PURE__ */
|
|
4576
|
+
return /* @__PURE__ */ jsx31("p", { className: "ba-muted", "data-testid": "reset-done", children: t("resetPassword.done") });
|
|
5407
4577
|
}
|
|
5408
|
-
return /* @__PURE__ */
|
|
4578
|
+
return /* @__PURE__ */ jsxs27(
|
|
5409
4579
|
"form",
|
|
5410
4580
|
{
|
|
5411
4581
|
method: "post",
|
|
@@ -5431,9 +4601,9 @@ function ResetPassword({ token: tokenProp, redirectTo, onReset }) {
|
|
|
5431
4601
|
});
|
|
5432
4602
|
},
|
|
5433
4603
|
children: [
|
|
5434
|
-
/* @__PURE__ */
|
|
4604
|
+
/* @__PURE__ */ jsxs27("label", { className: "ba-label", children: [
|
|
5435
4605
|
t("resetPassword.newPasswordLabel"),
|
|
5436
|
-
/* @__PURE__ */
|
|
4606
|
+
/* @__PURE__ */ jsx31(
|
|
5437
4607
|
"input",
|
|
5438
4608
|
{
|
|
5439
4609
|
className: "ba-input",
|
|
@@ -5450,9 +4620,9 @@ function ResetPassword({ token: tokenProp, redirectTo, onReset }) {
|
|
|
5450
4620
|
}
|
|
5451
4621
|
)
|
|
5452
4622
|
] }),
|
|
5453
|
-
/* @__PURE__ */
|
|
4623
|
+
/* @__PURE__ */ jsxs27("label", { className: "ba-label", children: [
|
|
5454
4624
|
t("resetPassword.confirmPasswordLabel"),
|
|
5455
|
-
/* @__PURE__ */
|
|
4625
|
+
/* @__PURE__ */ jsx31(
|
|
5456
4626
|
"input",
|
|
5457
4627
|
{
|
|
5458
4628
|
className: "ba-input",
|
|
@@ -5469,26 +4639,26 @@ function ResetPassword({ token: tokenProp, redirectTo, onReset }) {
|
|
|
5469
4639
|
}
|
|
5470
4640
|
)
|
|
5471
4641
|
] }),
|
|
5472
|
-
/* @__PURE__ */
|
|
5473
|
-
/* @__PURE__ */
|
|
4642
|
+
/* @__PURE__ */ jsx31(FormError, { children: error }),
|
|
4643
|
+
/* @__PURE__ */ jsx31("button", { className: "ba-button", type: "submit", disabled: pending, "aria-busy": pending || void 0, children: /* @__PURE__ */ jsx31(Busy, { busy: pending, label: t("resetPassword.submitPending"), children: t("resetPassword.submit") }) })
|
|
5474
4644
|
]
|
|
5475
4645
|
}
|
|
5476
4646
|
);
|
|
5477
4647
|
}
|
|
5478
4648
|
|
|
5479
4649
|
// src/components/VerifyEmail.tsx
|
|
5480
|
-
import * as
|
|
5481
|
-
import { Fragment as Fragment10, jsx as
|
|
4650
|
+
import * as React25 from "react";
|
|
4651
|
+
import { Fragment as Fragment10, jsx as jsx32, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
5482
4652
|
function VerifyEmail({ redirectTo, onVerified, callbackURL }) {
|
|
5483
4653
|
const t = useT();
|
|
5484
4654
|
const { sendVerificationEmail } = useEmailVerification();
|
|
5485
4655
|
const { pending, error, run } = useSubmitAction();
|
|
5486
4656
|
const authChallenge = useAuthChallenge();
|
|
5487
|
-
const [ready, setReady] =
|
|
5488
|
-
const [failed, setFailed] =
|
|
5489
|
-
const [email, setEmail] =
|
|
5490
|
-
const [resent, setResent] =
|
|
5491
|
-
|
|
4657
|
+
const [ready, setReady] = React25.useState(false);
|
|
4658
|
+
const [failed, setFailed] = React25.useState(false);
|
|
4659
|
+
const [email, setEmail] = React25.useState("");
|
|
4660
|
+
const [resent, setResent] = React25.useState(false);
|
|
4661
|
+
React25.useEffect(() => {
|
|
5492
4662
|
const didFail = new URLSearchParams(window.location.search).has("error");
|
|
5493
4663
|
setFailed(didFail);
|
|
5494
4664
|
setReady(true);
|
|
@@ -5498,12 +4668,12 @@ function VerifyEmail({ redirectTo, onVerified, callbackURL }) {
|
|
|
5498
4668
|
}
|
|
5499
4669
|
}, [onVerified, redirectTo]);
|
|
5500
4670
|
if (!ready) {
|
|
5501
|
-
return /* @__PURE__ */
|
|
4671
|
+
return /* @__PURE__ */ jsx32("div", { className: "ba-form", "aria-busy": "true", children: /* @__PURE__ */ jsx32("div", { className: "ba-skeleton" }) });
|
|
5502
4672
|
}
|
|
5503
4673
|
if (!failed) {
|
|
5504
|
-
return /* @__PURE__ */
|
|
4674
|
+
return /* @__PURE__ */ jsx32("p", { className: "ba-muted", "data-testid": "verify-success", children: t("verifyEmail.success") });
|
|
5505
4675
|
}
|
|
5506
|
-
return /* @__PURE__ */
|
|
4676
|
+
return /* @__PURE__ */ jsxs28(
|
|
5507
4677
|
"form",
|
|
5508
4678
|
{
|
|
5509
4679
|
method: "post",
|
|
@@ -5518,11 +4688,11 @@ function VerifyEmail({ redirectTo, onVerified, callbackURL }) {
|
|
|
5518
4688
|
});
|
|
5519
4689
|
},
|
|
5520
4690
|
children: [
|
|
5521
|
-
/* @__PURE__ */
|
|
5522
|
-
resent ? /* @__PURE__ */
|
|
5523
|
-
/* @__PURE__ */
|
|
4691
|
+
/* @__PURE__ */ jsx32(FormError, { children: t("verifyEmail.invalidLink") }),
|
|
4692
|
+
resent ? /* @__PURE__ */ jsx32("p", { className: "ba-muted", children: richMessage(t("verifyEmail.resent"), { email: /* @__PURE__ */ jsx32(Bidi, { children: email }) }) }) : /* @__PURE__ */ jsxs28(Fragment10, { children: [
|
|
4693
|
+
/* @__PURE__ */ jsxs28("label", { className: "ba-label", children: [
|
|
5524
4694
|
t("common.emailLabel"),
|
|
5525
|
-
/* @__PURE__ */
|
|
4695
|
+
/* @__PURE__ */ jsx32(
|
|
5526
4696
|
"input",
|
|
5527
4697
|
{
|
|
5528
4698
|
className: "ba-input",
|
|
@@ -5535,15 +4705,15 @@ function VerifyEmail({ redirectTo, onVerified, callbackURL }) {
|
|
|
5535
4705
|
)
|
|
5536
4706
|
] }),
|
|
5537
4707
|
authChallenge.control,
|
|
5538
|
-
/* @__PURE__ */
|
|
5539
|
-
/* @__PURE__ */
|
|
4708
|
+
/* @__PURE__ */ jsx32(FormError, { children: error }),
|
|
4709
|
+
/* @__PURE__ */ jsx32(
|
|
5540
4710
|
"button",
|
|
5541
4711
|
{
|
|
5542
4712
|
className: "ba-button",
|
|
5543
4713
|
type: "submit",
|
|
5544
4714
|
disabled: pending || authChallenge.configPending,
|
|
5545
4715
|
"aria-busy": pending || void 0,
|
|
5546
|
-
children: /* @__PURE__ */
|
|
4716
|
+
children: /* @__PURE__ */ jsx32(Busy, { busy: pending, label: t("common.sending"), children: t("verifyEmail.resendSubmit") })
|
|
5547
4717
|
}
|
|
5548
4718
|
)
|
|
5549
4719
|
] })
|
|
@@ -5553,18 +4723,18 @@ function VerifyEmail({ redirectTo, onVerified, callbackURL }) {
|
|
|
5553
4723
|
}
|
|
5554
4724
|
|
|
5555
4725
|
// src/components/PasskeyManager.tsx
|
|
5556
|
-
import * as
|
|
5557
|
-
import { jsx as
|
|
4726
|
+
import * as React26 from "react";
|
|
4727
|
+
import { jsx as jsx33, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
5558
4728
|
function PasskeyManager({ title, allowAdd = true } = {}) {
|
|
5559
4729
|
const t = useT();
|
|
5560
4730
|
const { user, isLoaded, isSignedIn } = useUser();
|
|
5561
4731
|
if (!isLoaded) {
|
|
5562
|
-
return /* @__PURE__ */
|
|
4732
|
+
return /* @__PURE__ */ jsx33("div", { className: "ba-form", "data-testid": "passkey-manager-loading", "aria-busy": "true", children: /* @__PURE__ */ jsx33("div", { className: "ba-skeleton" }) });
|
|
5563
4733
|
}
|
|
5564
4734
|
if (!isSignedIn || !user) {
|
|
5565
|
-
return /* @__PURE__ */
|
|
4735
|
+
return /* @__PURE__ */ jsx33("p", { className: "ba-muted", children: t("passkeys.signedOut") });
|
|
5566
4736
|
}
|
|
5567
|
-
return /* @__PURE__ */
|
|
4737
|
+
return /* @__PURE__ */ jsx33(PasskeyManagerBody, { title, allowAdd }, user.id);
|
|
5568
4738
|
}
|
|
5569
4739
|
function PasskeyManagerBody({
|
|
5570
4740
|
title,
|
|
@@ -5573,12 +4743,12 @@ function PasskeyManagerBody({
|
|
|
5573
4743
|
const t = useT();
|
|
5574
4744
|
const toServerError = useServerError();
|
|
5575
4745
|
const api = usePasskeys();
|
|
5576
|
-
const apiRef =
|
|
4746
|
+
const apiRef = React26.useRef(api);
|
|
5577
4747
|
apiRef.current = api;
|
|
5578
4748
|
const { pending, error, setError, run } = useSubmitAction();
|
|
5579
|
-
const [passkeys, setPasskeys] =
|
|
5580
|
-
const loadTokenRef =
|
|
5581
|
-
const load =
|
|
4749
|
+
const [passkeys, setPasskeys] = React26.useState(null);
|
|
4750
|
+
const loadTokenRef = React26.useRef(0);
|
|
4751
|
+
const load = React26.useCallback(async () => {
|
|
5582
4752
|
const token = ++loadTokenRef.current;
|
|
5583
4753
|
try {
|
|
5584
4754
|
const res = await apiRef.current.listPasskeys();
|
|
@@ -5594,7 +4764,7 @@ function PasskeyManagerBody({
|
|
|
5594
4764
|
setError(t("passkeys.error.loadFailed"));
|
|
5595
4765
|
}
|
|
5596
4766
|
}, [setError, toServerError, t]);
|
|
5597
|
-
|
|
4767
|
+
React26.useEffect(() => {
|
|
5598
4768
|
void load();
|
|
5599
4769
|
}, [load]);
|
|
5600
4770
|
function onRename(id, current) {
|
|
@@ -5613,13 +4783,13 @@ function PasskeyManagerBody({
|
|
|
5613
4783
|
onSuccess: load
|
|
5614
4784
|
});
|
|
5615
4785
|
}
|
|
5616
|
-
return /* @__PURE__ */
|
|
5617
|
-
title !== null && /* @__PURE__ */
|
|
5618
|
-
passkeys === null ? error ? null : /* @__PURE__ */
|
|
5619
|
-
(passkeys ?? []).map((pk) => /* @__PURE__ */
|
|
5620
|
-
/* @__PURE__ */
|
|
5621
|
-
/* @__PURE__ */
|
|
5622
|
-
/* @__PURE__ */
|
|
4786
|
+
return /* @__PURE__ */ jsxs29("div", { className: "ba-form", "data-testid": "passkey-manager", children: [
|
|
4787
|
+
title !== null && /* @__PURE__ */ jsx33("h2", { className: "ba-title", children: title ?? t("passkeys.title") }),
|
|
4788
|
+
passkeys === null ? error ? null : /* @__PURE__ */ jsx33("div", { className: "ba-skeleton" }) : /* @__PURE__ */ jsxs29("ul", { className: "ba-passkey-list", children: [
|
|
4789
|
+
(passkeys ?? []).map((pk) => /* @__PURE__ */ jsxs29("li", { className: "ba-passkey-item", children: [
|
|
4790
|
+
/* @__PURE__ */ jsx33("span", { className: "ba-passkey-name", children: pk.name?.trim() || t("passkeys.unnamed") }),
|
|
4791
|
+
/* @__PURE__ */ jsxs29("span", { className: "ba-passkey-actions", children: [
|
|
4792
|
+
/* @__PURE__ */ jsx33(
|
|
5623
4793
|
"button",
|
|
5624
4794
|
{
|
|
5625
4795
|
type: "button",
|
|
@@ -5629,7 +4799,7 @@ function PasskeyManagerBody({
|
|
|
5629
4799
|
children: t("passkeys.rename")
|
|
5630
4800
|
}
|
|
5631
4801
|
),
|
|
5632
|
-
/* @__PURE__ */
|
|
4802
|
+
/* @__PURE__ */ jsx33(
|
|
5633
4803
|
"button",
|
|
5634
4804
|
{
|
|
5635
4805
|
type: "button",
|
|
@@ -5641,13 +4811,13 @@ function PasskeyManagerBody({
|
|
|
5641
4811
|
)
|
|
5642
4812
|
] })
|
|
5643
4813
|
] }, pk.id)),
|
|
5644
|
-
passkeys !== null && passkeys.length === 0 && /* @__PURE__ */
|
|
4814
|
+
passkeys !== null && passkeys.length === 0 && /* @__PURE__ */ jsx33("li", { className: "ba-muted", children: t("passkeys.empty") })
|
|
5645
4815
|
] }),
|
|
5646
|
-
error && /* @__PURE__ */
|
|
5647
|
-
/* @__PURE__ */
|
|
5648
|
-
passkeys === null && /* @__PURE__ */
|
|
4816
|
+
error && /* @__PURE__ */ jsxs29("div", { className: "ba-inline-error", children: [
|
|
4817
|
+
/* @__PURE__ */ jsx33(FormError, { children: error }),
|
|
4818
|
+
passkeys === null && /* @__PURE__ */ jsx33("button", { className: "ba-link-button", type: "button", onClick: () => void load(), children: t("userProfile.retry") })
|
|
5649
4819
|
] }),
|
|
5650
|
-
passkeys !== null && allowAdd && /* @__PURE__ */
|
|
4820
|
+
passkeys !== null && allowAdd && /* @__PURE__ */ jsx33(
|
|
5651
4821
|
"button",
|
|
5652
4822
|
{
|
|
5653
4823
|
className: "ba-button",
|
|
@@ -5658,7 +4828,7 @@ function PasskeyManagerBody({
|
|
|
5658
4828
|
failure: t("passkeys.error.addFailed"),
|
|
5659
4829
|
onSuccess: load
|
|
5660
4830
|
}),
|
|
5661
|
-
children: /* @__PURE__ */
|
|
4831
|
+
children: /* @__PURE__ */ jsx33(Busy, { busy: pending, label: t("common.working"), children: t("passkeys.add") })
|
|
5662
4832
|
}
|
|
5663
4833
|
)
|
|
5664
4834
|
] });
|
|
@@ -5666,14 +4836,14 @@ function PasskeyManagerBody({
|
|
|
5666
4836
|
|
|
5667
4837
|
// src/components/control.tsx
|
|
5668
4838
|
import { membershipHas } from "@authowl/core";
|
|
5669
|
-
import { Fragment as Fragment11, jsx as
|
|
4839
|
+
import { Fragment as Fragment11, jsx as jsx34, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
5670
4840
|
function SignedIn({ children }) {
|
|
5671
4841
|
const { isLoaded, isSignedIn } = useUser();
|
|
5672
|
-
return isLoaded && isSignedIn ? /* @__PURE__ */
|
|
4842
|
+
return isLoaded && isSignedIn ? /* @__PURE__ */ jsx34(Fragment11, { children }) : null;
|
|
5673
4843
|
}
|
|
5674
4844
|
function SignedOut({ children }) {
|
|
5675
4845
|
const { isLoaded, isSignedIn } = useUser();
|
|
5676
|
-
return isLoaded && !isSignedIn ? /* @__PURE__ */
|
|
4846
|
+
return isLoaded && !isSignedIn ? /* @__PURE__ */ jsx34(Fragment11, { children }) : null;
|
|
5677
4847
|
}
|
|
5678
4848
|
function Protect({
|
|
5679
4849
|
children,
|
|
@@ -5686,36 +4856,36 @@ function Protect({
|
|
|
5686
4856
|
const { user, isLoaded, isSignedIn } = useUser();
|
|
5687
4857
|
const membership = useSession().data?.session?.membership ?? null;
|
|
5688
4858
|
if (!isLoaded) return null;
|
|
5689
|
-
if (!isSignedIn || !user) return /* @__PURE__ */
|
|
4859
|
+
if (!isSignedIn || !user) return /* @__PURE__ */ jsx34(Fragment11, { children: fallback });
|
|
5690
4860
|
if ((role !== void 0 || permission !== void 0 || teamId !== void 0) && !membershipHas(membership, { role, permission, teamId })) {
|
|
5691
|
-
return /* @__PURE__ */
|
|
4861
|
+
return /* @__PURE__ */ jsx34(Fragment11, { children: fallback });
|
|
5692
4862
|
}
|
|
5693
|
-
if (condition && !condition(user)) return /* @__PURE__ */
|
|
5694
|
-
return /* @__PURE__ */
|
|
4863
|
+
if (condition && !condition(user)) return /* @__PURE__ */ jsx34(Fragment11, { children: fallback });
|
|
4864
|
+
return /* @__PURE__ */ jsx34(Fragment11, { children });
|
|
5695
4865
|
}
|
|
5696
4866
|
function AuthLoading({ children }) {
|
|
5697
4867
|
const t = useT();
|
|
5698
4868
|
const { isLoaded } = useUser();
|
|
5699
4869
|
if (isLoaded) return null;
|
|
5700
|
-
if (children !== void 0) return /* @__PURE__ */
|
|
5701
|
-
return /* @__PURE__ */
|
|
5702
|
-
/* @__PURE__ */
|
|
5703
|
-
/* @__PURE__ */
|
|
4870
|
+
if (children !== void 0) return /* @__PURE__ */ jsx34(Fragment11, { children });
|
|
4871
|
+
return /* @__PURE__ */ jsxs30("div", { className: "ba-auth-loading", role: "status", "aria-busy": "true", "data-testid": "auth-loading", children: [
|
|
4872
|
+
/* @__PURE__ */ jsx34(Spinner, {}),
|
|
4873
|
+
/* @__PURE__ */ jsx34("span", { className: "ba-sr-only", children: t("common.loading") })
|
|
5704
4874
|
] });
|
|
5705
4875
|
}
|
|
5706
4876
|
function AuthLoaded({ children }) {
|
|
5707
|
-
return useUser().isLoaded ? /* @__PURE__ */
|
|
4877
|
+
return useUser().isLoaded ? /* @__PURE__ */ jsx34(Fragment11, { children }) : null;
|
|
5708
4878
|
}
|
|
5709
4879
|
|
|
5710
4880
|
// src/components/SignOutButton.tsx
|
|
5711
|
-
import * as
|
|
5712
|
-
import { jsx as
|
|
4881
|
+
import * as React27 from "react";
|
|
4882
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
5713
4883
|
function SignOutButton({ children, redirectTo, onSignedOut, className }) {
|
|
5714
4884
|
const t = useT();
|
|
5715
4885
|
const { signOut } = useSignOut();
|
|
5716
|
-
const [pending, setPending] =
|
|
4886
|
+
const [pending, setPending] = React27.useState(false);
|
|
5717
4887
|
const content = children ?? t("signOut.button");
|
|
5718
|
-
return /* @__PURE__ */
|
|
4888
|
+
return /* @__PURE__ */ jsx35(
|
|
5719
4889
|
"button",
|
|
5720
4890
|
{
|
|
5721
4891
|
type: "button",
|
|
@@ -5733,32 +4903,32 @@ function SignOutButton({ children, redirectTo, onSignedOut, className }) {
|
|
|
5733
4903
|
setPending(false);
|
|
5734
4904
|
}
|
|
5735
4905
|
},
|
|
5736
|
-
children: /* @__PURE__ */
|
|
4906
|
+
children: /* @__PURE__ */ jsx35(Busy, { busy: pending, label: content, children: content })
|
|
5737
4907
|
}
|
|
5738
4908
|
);
|
|
5739
4909
|
}
|
|
5740
4910
|
|
|
5741
4911
|
// src/components/UserButton.tsx
|
|
5742
|
-
import * as
|
|
4912
|
+
import * as React41 from "react";
|
|
5743
4913
|
|
|
5744
4914
|
// src/components/UserProfile.tsx
|
|
5745
|
-
import * as
|
|
4915
|
+
import * as React40 from "react";
|
|
5746
4916
|
|
|
5747
4917
|
// src/components/user-profile/EmailSection.tsx
|
|
5748
|
-
import * as
|
|
5749
|
-
import { jsx as
|
|
4918
|
+
import * as React28 from "react";
|
|
4919
|
+
import { jsx as jsx36, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
5750
4920
|
function EmailSection({ allowChange }) {
|
|
5751
4921
|
const t = useT();
|
|
5752
4922
|
const account = useAccount();
|
|
5753
4923
|
const { user } = useUser();
|
|
5754
4924
|
const { pending, error, run } = useSubmitAction();
|
|
5755
|
-
const [newEmail, setNewEmail] =
|
|
5756
|
-
const [sent, setSent] =
|
|
5757
|
-
const titleId =
|
|
4925
|
+
const [newEmail, setNewEmail] = React28.useState("");
|
|
4926
|
+
const [sent, setSent] = React28.useState(false);
|
|
4927
|
+
const titleId = React28.useId();
|
|
5758
4928
|
if (!user?.email) {
|
|
5759
|
-
return /* @__PURE__ */
|
|
5760
|
-
/* @__PURE__ */
|
|
5761
|
-
/* @__PURE__ */
|
|
4929
|
+
return /* @__PURE__ */ jsxs31("section", { className: "ba-profile-section", "aria-labelledby": titleId, children: [
|
|
4930
|
+
/* @__PURE__ */ jsx36("h2", { id: titleId, className: "ba-title", children: t("userProfile.email.title") }),
|
|
4931
|
+
/* @__PURE__ */ jsx36("p", { className: "ba-muted", children: t("userProfile.email.unavailable") })
|
|
5762
4932
|
] });
|
|
5763
4933
|
}
|
|
5764
4934
|
const submit = (event) => {
|
|
@@ -5778,19 +4948,19 @@ function EmailSection({ allowChange }) {
|
|
|
5778
4948
|
}
|
|
5779
4949
|
);
|
|
5780
4950
|
};
|
|
5781
|
-
return /* @__PURE__ */
|
|
5782
|
-
/* @__PURE__ */
|
|
5783
|
-
/* @__PURE__ */
|
|
5784
|
-
/* @__PURE__ */
|
|
4951
|
+
return /* @__PURE__ */ jsxs31("section", { className: "ba-profile-section", "aria-labelledby": titleId, children: [
|
|
4952
|
+
/* @__PURE__ */ jsxs31("header", { className: "ba-profile-section-header", children: [
|
|
4953
|
+
/* @__PURE__ */ jsx36("h2", { id: titleId, className: "ba-title", children: t("userProfile.email.title") }),
|
|
4954
|
+
/* @__PURE__ */ jsx36("p", { className: "ba-muted", children: t("userProfile.email.description") })
|
|
5785
4955
|
] }),
|
|
5786
|
-
/* @__PURE__ */
|
|
5787
|
-
/* @__PURE__ */
|
|
5788
|
-
/* @__PURE__ */
|
|
4956
|
+
/* @__PURE__ */ jsxs31("p", { className: "ba-profile-current", children: [
|
|
4957
|
+
/* @__PURE__ */ jsx36("span", { children: t("userProfile.email.current") }),
|
|
4958
|
+
/* @__PURE__ */ jsx36("strong", { children: /* @__PURE__ */ jsx36(Bidi, { children: user.email }) })
|
|
5789
4959
|
] }),
|
|
5790
|
-
!allowChange ? /* @__PURE__ */
|
|
5791
|
-
/* @__PURE__ */
|
|
4960
|
+
!allowChange ? /* @__PURE__ */ jsx36("p", { className: "ba-muted", "data-testid": "email-change-disabled", children: t("userProfile.email.changeDisabled") }) : /* @__PURE__ */ jsxs31("form", { method: "post", className: "ba-fields", onSubmit: submit, children: [
|
|
4961
|
+
/* @__PURE__ */ jsxs31("label", { className: "ba-label", children: [
|
|
5792
4962
|
t("userProfile.email.newLabel"),
|
|
5793
|
-
/* @__PURE__ */
|
|
4963
|
+
/* @__PURE__ */ jsx36(
|
|
5794
4964
|
"input",
|
|
5795
4965
|
{
|
|
5796
4966
|
className: "ba-input",
|
|
@@ -5802,16 +4972,16 @@ function EmailSection({ allowChange }) {
|
|
|
5802
4972
|
}
|
|
5803
4973
|
)
|
|
5804
4974
|
] }),
|
|
5805
|
-
/* @__PURE__ */
|
|
5806
|
-
sent && /* @__PURE__ */
|
|
5807
|
-
/* @__PURE__ */
|
|
4975
|
+
/* @__PURE__ */ jsx36(FormError, { children: error }),
|
|
4976
|
+
sent && /* @__PURE__ */ jsx36("p", { className: "ba-success", role: "status", children: t("userProfile.email.sent") }),
|
|
4977
|
+
/* @__PURE__ */ jsx36(
|
|
5808
4978
|
"button",
|
|
5809
4979
|
{
|
|
5810
4980
|
className: "ba-button ba-profile-submit",
|
|
5811
4981
|
type: "submit",
|
|
5812
4982
|
disabled: pending || !newEmail.trim(),
|
|
5813
4983
|
"aria-busy": pending || void 0,
|
|
5814
|
-
children: /* @__PURE__ */
|
|
4984
|
+
children: /* @__PURE__ */ jsx36(Busy, { busy: pending, label: t("common.sending"), children: t("userProfile.email.submit") })
|
|
5815
4985
|
}
|
|
5816
4986
|
)
|
|
5817
4987
|
] })
|
|
@@ -5819,16 +4989,16 @@ function EmailSection({ allowChange }) {
|
|
|
5819
4989
|
}
|
|
5820
4990
|
|
|
5821
4991
|
// src/components/user-profile/DeleteAccountSection.tsx
|
|
5822
|
-
import * as
|
|
5823
|
-
import { jsx as
|
|
4992
|
+
import * as React29 from "react";
|
|
4993
|
+
import { jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
5824
4994
|
function DeleteAccountSection({ onDeleted }) {
|
|
5825
4995
|
const t = useT();
|
|
5826
4996
|
const account = useAccount();
|
|
5827
4997
|
const session = useSession();
|
|
5828
4998
|
const { user } = useUser();
|
|
5829
4999
|
const { pending, error, run } = useSubmitAction();
|
|
5830
|
-
const [confirmation, setConfirmation] =
|
|
5831
|
-
const titleId =
|
|
5000
|
+
const [confirmation, setConfirmation] = React29.useState("");
|
|
5001
|
+
const titleId = React29.useId();
|
|
5832
5002
|
const identifier = user?.email ?? user?.phoneNumber ?? user?.id ?? "";
|
|
5833
5003
|
const confirmed = identifier.length > 0 && confirmation.trim().toLowerCase() === identifier.toLowerCase();
|
|
5834
5004
|
const submit = (event) => {
|
|
@@ -5845,18 +5015,18 @@ function DeleteAccountSection({ onDeleted }) {
|
|
|
5845
5015
|
}
|
|
5846
5016
|
);
|
|
5847
5017
|
};
|
|
5848
|
-
return /* @__PURE__ */
|
|
5849
|
-
/* @__PURE__ */
|
|
5850
|
-
/* @__PURE__ */
|
|
5851
|
-
/* @__PURE__ */
|
|
5018
|
+
return /* @__PURE__ */ jsxs32("section", { className: "ba-profile-section ba-profile-danger-zone", "aria-labelledby": titleId, children: [
|
|
5019
|
+
/* @__PURE__ */ jsxs32("header", { className: "ba-profile-section-header", children: [
|
|
5020
|
+
/* @__PURE__ */ jsx37("h2", { id: titleId, className: "ba-title", children: t("userProfile.delete.title") }),
|
|
5021
|
+
/* @__PURE__ */ jsx37("p", { className: "ba-muted", children: t("userProfile.delete.description") })
|
|
5852
5022
|
] }),
|
|
5853
|
-
/* @__PURE__ */
|
|
5854
|
-
/* @__PURE__ */
|
|
5855
|
-
/* @__PURE__ */
|
|
5023
|
+
/* @__PURE__ */ jsxs32("form", { method: "post", className: "ba-fields", onSubmit: submit, children: [
|
|
5024
|
+
/* @__PURE__ */ jsx37("p", { className: "ba-profile-delete-warning", children: t("userProfile.delete.warning", { identifier }) }),
|
|
5025
|
+
/* @__PURE__ */ jsxs32("label", { className: "ba-label", children: [
|
|
5856
5026
|
t("userProfile.delete.confirmLabel"),
|
|
5857
5027
|
" ",
|
|
5858
|
-
/* @__PURE__ */
|
|
5859
|
-
/* @__PURE__ */
|
|
5028
|
+
/* @__PURE__ */ jsx37(Bidi, { children: identifier }),
|
|
5029
|
+
/* @__PURE__ */ jsx37(
|
|
5860
5030
|
"input",
|
|
5861
5031
|
{
|
|
5862
5032
|
className: "ba-input",
|
|
@@ -5870,15 +5040,15 @@ function DeleteAccountSection({ onDeleted }) {
|
|
|
5870
5040
|
}
|
|
5871
5041
|
)
|
|
5872
5042
|
] }),
|
|
5873
|
-
/* @__PURE__ */
|
|
5874
|
-
/* @__PURE__ */
|
|
5043
|
+
/* @__PURE__ */ jsx37(FormError, { children: error }),
|
|
5044
|
+
/* @__PURE__ */ jsx37(
|
|
5875
5045
|
"button",
|
|
5876
5046
|
{
|
|
5877
5047
|
className: "ba-button ba-danger-button ba-profile-submit",
|
|
5878
5048
|
type: "submit",
|
|
5879
5049
|
disabled: pending || !confirmed,
|
|
5880
5050
|
"aria-busy": pending || void 0,
|
|
5881
|
-
children: /* @__PURE__ */
|
|
5051
|
+
children: /* @__PURE__ */ jsx37(Busy, { busy: pending, label: t("common.working"), children: t("userProfile.delete.submit") })
|
|
5882
5052
|
}
|
|
5883
5053
|
)
|
|
5884
5054
|
] })
|
|
@@ -5886,8 +5056,8 @@ function DeleteAccountSection({ onDeleted }) {
|
|
|
5886
5056
|
}
|
|
5887
5057
|
|
|
5888
5058
|
// src/components/user-profile/MfaSection.tsx
|
|
5889
|
-
import * as
|
|
5890
|
-
import { jsx as
|
|
5059
|
+
import * as React30 from "react";
|
|
5060
|
+
import { jsx as jsx38, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
5891
5061
|
function MfaSection() {
|
|
5892
5062
|
const t = useT();
|
|
5893
5063
|
const { user } = useUser();
|
|
@@ -5895,17 +5065,17 @@ function MfaSection() {
|
|
|
5895
5065
|
const { config } = usePublicConfig();
|
|
5896
5066
|
const { disable } = useMFA();
|
|
5897
5067
|
const { pending, error, run } = useSubmitAction();
|
|
5898
|
-
const [password, setPassword] =
|
|
5899
|
-
const [showDisable, setShowDisable] =
|
|
5900
|
-
const titleId =
|
|
5068
|
+
const [password, setPassword] = React30.useState("");
|
|
5069
|
+
const [showDisable, setShowDisable] = React30.useState(false);
|
|
5070
|
+
const titleId = React30.useId();
|
|
5901
5071
|
const required = resolveProjectCapabilities(config).mfaRequired;
|
|
5902
5072
|
if (!user?.twoFactorEnabled) {
|
|
5903
|
-
return /* @__PURE__ */
|
|
5904
|
-
/* @__PURE__ */
|
|
5905
|
-
/* @__PURE__ */
|
|
5906
|
-
/* @__PURE__ */
|
|
5073
|
+
return /* @__PURE__ */ jsxs33("section", { className: "ba-profile-section", "aria-labelledby": titleId, children: [
|
|
5074
|
+
/* @__PURE__ */ jsxs33("header", { className: "ba-profile-section-header", children: [
|
|
5075
|
+
/* @__PURE__ */ jsx38("h2", { id: titleId, className: "ba-title", children: t("userProfile.mfa.title") }),
|
|
5076
|
+
/* @__PURE__ */ jsx38("p", { className: "ba-muted", children: required ? t("userProfile.mfa.requiredDescription") : t("userProfile.mfa.description") })
|
|
5907
5077
|
] }),
|
|
5908
|
-
/* @__PURE__ */
|
|
5078
|
+
/* @__PURE__ */ jsx38(
|
|
5909
5079
|
MFAEnrollment,
|
|
5910
5080
|
{
|
|
5911
5081
|
title: null,
|
|
@@ -5928,16 +5098,16 @@ function MfaSection() {
|
|
|
5928
5098
|
}
|
|
5929
5099
|
);
|
|
5930
5100
|
};
|
|
5931
|
-
return /* @__PURE__ */
|
|
5932
|
-
/* @__PURE__ */
|
|
5933
|
-
/* @__PURE__ */
|
|
5934
|
-
/* @__PURE__ */
|
|
5101
|
+
return /* @__PURE__ */ jsxs33("section", { className: "ba-profile-section", "aria-labelledby": titleId, children: [
|
|
5102
|
+
/* @__PURE__ */ jsxs33("header", { className: "ba-profile-section-header", children: [
|
|
5103
|
+
/* @__PURE__ */ jsx38("h2", { id: titleId, className: "ba-title", children: t("userProfile.mfa.title") }),
|
|
5104
|
+
/* @__PURE__ */ jsx38("p", { className: "ba-muted", children: required ? t("userProfile.mfa.requiredActive") : t("userProfile.mfa.active") })
|
|
5935
5105
|
] }),
|
|
5936
|
-
/* @__PURE__ */
|
|
5937
|
-
/* @__PURE__ */
|
|
5938
|
-
/* @__PURE__ */
|
|
5106
|
+
/* @__PURE__ */ jsxs33("div", { className: "ba-profile-status", role: "status", children: [
|
|
5107
|
+
/* @__PURE__ */ jsx38("strong", { children: t("userProfile.mfa.enabled") }),
|
|
5108
|
+
/* @__PURE__ */ jsx38("span", { children: t("userProfile.mfa.authenticator") })
|
|
5939
5109
|
] }),
|
|
5940
|
-
!showDisable ? /* @__PURE__ */
|
|
5110
|
+
!showDisable ? /* @__PURE__ */ jsx38(
|
|
5941
5111
|
"button",
|
|
5942
5112
|
{
|
|
5943
5113
|
className: "ba-button ba-button-secondary ba-profile-submit",
|
|
@@ -5945,11 +5115,11 @@ function MfaSection() {
|
|
|
5945
5115
|
onClick: () => setShowDisable(true),
|
|
5946
5116
|
children: required ? t("userProfile.mfa.replace") : t("userProfile.mfa.disable")
|
|
5947
5117
|
}
|
|
5948
|
-
) : /* @__PURE__ */
|
|
5949
|
-
/* @__PURE__ */
|
|
5950
|
-
/* @__PURE__ */
|
|
5118
|
+
) : /* @__PURE__ */ jsxs33("form", { method: "post", className: "ba-fields ba-profile-security-form", onSubmit: submitDisable, children: [
|
|
5119
|
+
/* @__PURE__ */ jsx38("p", { className: "ba-muted", children: required ? t("userProfile.mfa.replaceWarning") : t("userProfile.mfa.disableWarning") }),
|
|
5120
|
+
/* @__PURE__ */ jsxs33("label", { className: "ba-label", children: [
|
|
5951
5121
|
t("common.passwordLabel"),
|
|
5952
|
-
/* @__PURE__ */
|
|
5122
|
+
/* @__PURE__ */ jsx38(
|
|
5953
5123
|
"input",
|
|
5954
5124
|
{
|
|
5955
5125
|
className: "ba-input",
|
|
@@ -5961,19 +5131,19 @@ function MfaSection() {
|
|
|
5961
5131
|
}
|
|
5962
5132
|
)
|
|
5963
5133
|
] }),
|
|
5964
|
-
/* @__PURE__ */
|
|
5965
|
-
/* @__PURE__ */
|
|
5966
|
-
/* @__PURE__ */
|
|
5134
|
+
/* @__PURE__ */ jsx38(FormError, { children: error }),
|
|
5135
|
+
/* @__PURE__ */ jsxs33("span", { className: "ba-profile-action-row", children: [
|
|
5136
|
+
/* @__PURE__ */ jsx38(
|
|
5967
5137
|
"button",
|
|
5968
5138
|
{
|
|
5969
5139
|
className: "ba-button ba-danger-button",
|
|
5970
5140
|
type: "submit",
|
|
5971
5141
|
disabled: pending || !password,
|
|
5972
5142
|
"aria-busy": pending || void 0,
|
|
5973
|
-
children: /* @__PURE__ */
|
|
5143
|
+
children: /* @__PURE__ */ jsx38(Busy, { busy: pending, label: t("common.working"), children: required ? t("userProfile.mfa.replaceConfirm") : t("userProfile.mfa.disableConfirm") })
|
|
5974
5144
|
}
|
|
5975
5145
|
),
|
|
5976
|
-
/* @__PURE__ */
|
|
5146
|
+
/* @__PURE__ */ jsx38(
|
|
5977
5147
|
"button",
|
|
5978
5148
|
{
|
|
5979
5149
|
className: "ba-button ba-button-secondary",
|
|
@@ -5992,19 +5162,19 @@ function MfaSection() {
|
|
|
5992
5162
|
}
|
|
5993
5163
|
|
|
5994
5164
|
// src/components/user-profile/PasswordSection.tsx
|
|
5995
|
-
import * as
|
|
5996
|
-
import { jsx as
|
|
5165
|
+
import * as React31 from "react";
|
|
5166
|
+
import { jsx as jsx39, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
5997
5167
|
function PasswordSection() {
|
|
5998
5168
|
const t = useT();
|
|
5999
5169
|
const account = useAccount();
|
|
6000
5170
|
const { config } = usePublicConfig();
|
|
6001
5171
|
const { passwordMinLength, passwordMaxLength } = resolveProjectCapabilities(config);
|
|
6002
5172
|
const { pending, error, setError, run } = useSubmitAction();
|
|
6003
|
-
const [currentPassword, setCurrentPassword] =
|
|
6004
|
-
const [newPassword, setNewPassword] =
|
|
6005
|
-
const [confirmPassword, setConfirmPassword] =
|
|
6006
|
-
const [saved, setSaved] =
|
|
6007
|
-
const titleId =
|
|
5173
|
+
const [currentPassword, setCurrentPassword] = React31.useState("");
|
|
5174
|
+
const [newPassword, setNewPassword] = React31.useState("");
|
|
5175
|
+
const [confirmPassword, setConfirmPassword] = React31.useState("");
|
|
5176
|
+
const [saved, setSaved] = React31.useState(false);
|
|
5177
|
+
const titleId = React31.useId();
|
|
6008
5178
|
const submit = (event) => {
|
|
6009
5179
|
event.preventDefault();
|
|
6010
5180
|
setSaved(false);
|
|
@@ -6029,43 +5199,43 @@ function PasswordSection() {
|
|
|
6029
5199
|
}
|
|
6030
5200
|
);
|
|
6031
5201
|
};
|
|
6032
|
-
return /* @__PURE__ */
|
|
6033
|
-
/* @__PURE__ */
|
|
6034
|
-
/* @__PURE__ */
|
|
6035
|
-
/* @__PURE__ */
|
|
5202
|
+
return /* @__PURE__ */ jsxs34("section", { className: "ba-profile-section", "aria-labelledby": titleId, children: [
|
|
5203
|
+
/* @__PURE__ */ jsxs34("header", { className: "ba-profile-section-header", children: [
|
|
5204
|
+
/* @__PURE__ */ jsx39("h2", { id: titleId, className: "ba-title", children: t("userProfile.password.title") }),
|
|
5205
|
+
/* @__PURE__ */ jsx39("p", { className: "ba-muted", children: t("userProfile.password.description") })
|
|
6036
5206
|
] }),
|
|
6037
|
-
/* @__PURE__ */
|
|
6038
|
-
/* @__PURE__ */
|
|
5207
|
+
/* @__PURE__ */ jsxs34("form", { method: "post", className: "ba-fields", onSubmit: submit, children: [
|
|
5208
|
+
/* @__PURE__ */ jsxs34("label", { className: "ba-label", children: [
|
|
6039
5209
|
t("userProfile.password.currentLabel"),
|
|
6040
|
-
/* @__PURE__ */
|
|
5210
|
+
/* @__PURE__ */ jsx39("input", { className: "ba-input", type: "password", autoComplete: "current-password", value: currentPassword, onChange: (event) => {
|
|
6041
5211
|
setCurrentPassword(event.target.value);
|
|
6042
5212
|
setError(null);
|
|
6043
5213
|
}, required: true })
|
|
6044
5214
|
] }),
|
|
6045
|
-
/* @__PURE__ */
|
|
5215
|
+
/* @__PURE__ */ jsxs34("label", { className: "ba-label", children: [
|
|
6046
5216
|
t("resetPassword.newPasswordLabel"),
|
|
6047
|
-
/* @__PURE__ */
|
|
5217
|
+
/* @__PURE__ */ jsx39("input", { className: "ba-input", type: "password", autoComplete: "new-password", value: newPassword, onChange: (event) => {
|
|
6048
5218
|
setNewPassword(event.target.value);
|
|
6049
5219
|
setError(null);
|
|
6050
5220
|
}, minLength: passwordMinLength, maxLength: passwordMaxLength, required: true })
|
|
6051
5221
|
] }),
|
|
6052
|
-
/* @__PURE__ */
|
|
5222
|
+
/* @__PURE__ */ jsxs34("label", { className: "ba-label", children: [
|
|
6053
5223
|
t("resetPassword.confirmPasswordLabel"),
|
|
6054
|
-
/* @__PURE__ */
|
|
5224
|
+
/* @__PURE__ */ jsx39("input", { className: "ba-input", type: "password", autoComplete: "new-password", value: confirmPassword, onChange: (event) => {
|
|
6055
5225
|
setConfirmPassword(event.target.value);
|
|
6056
5226
|
setError(null);
|
|
6057
5227
|
}, minLength: passwordMinLength, maxLength: passwordMaxLength, required: true })
|
|
6058
5228
|
] }),
|
|
6059
|
-
/* @__PURE__ */
|
|
6060
|
-
saved && /* @__PURE__ */
|
|
6061
|
-
/* @__PURE__ */
|
|
5229
|
+
/* @__PURE__ */ jsx39(FormError, { children: error }),
|
|
5230
|
+
saved && /* @__PURE__ */ jsx39("p", { className: "ba-success", role: "status", children: t("userProfile.password.saved") }),
|
|
5231
|
+
/* @__PURE__ */ jsx39(
|
|
6062
5232
|
"button",
|
|
6063
5233
|
{
|
|
6064
5234
|
className: "ba-button ba-profile-submit",
|
|
6065
5235
|
type: "submit",
|
|
6066
5236
|
disabled: pending || !currentPassword || !newPassword || !confirmPassword,
|
|
6067
5237
|
"aria-busy": pending || void 0,
|
|
6068
|
-
children: /* @__PURE__ */
|
|
5238
|
+
children: /* @__PURE__ */ jsx39(Busy, { busy: pending, label: t("common.working"), children: t("userProfile.password.submit") })
|
|
6069
5239
|
}
|
|
6070
5240
|
)
|
|
6071
5241
|
] })
|
|
@@ -6073,23 +5243,23 @@ function PasswordSection() {
|
|
|
6073
5243
|
}
|
|
6074
5244
|
|
|
6075
5245
|
// src/components/user-profile/PasskeysSection.tsx
|
|
6076
|
-
import * as
|
|
6077
|
-
import { jsx as
|
|
5246
|
+
import * as React32 from "react";
|
|
5247
|
+
import { jsx as jsx40, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
6078
5248
|
function PasskeysSection({ allowAdd }) {
|
|
6079
5249
|
const t = useT();
|
|
6080
|
-
const titleId =
|
|
6081
|
-
return /* @__PURE__ */
|
|
6082
|
-
/* @__PURE__ */
|
|
6083
|
-
/* @__PURE__ */
|
|
6084
|
-
/* @__PURE__ */
|
|
5250
|
+
const titleId = React32.useId();
|
|
5251
|
+
return /* @__PURE__ */ jsxs35("section", { className: "ba-profile-section", "aria-labelledby": titleId, children: [
|
|
5252
|
+
/* @__PURE__ */ jsxs35("header", { className: "ba-profile-section-header", children: [
|
|
5253
|
+
/* @__PURE__ */ jsx40("h2", { id: titleId, className: "ba-title", children: t("userProfile.passkeys.title") }),
|
|
5254
|
+
/* @__PURE__ */ jsx40("p", { className: "ba-muted", children: t("userProfile.passkeys.description") })
|
|
6085
5255
|
] }),
|
|
6086
|
-
/* @__PURE__ */
|
|
5256
|
+
/* @__PURE__ */ jsx40(PasskeyManager, { title: null, allowAdd })
|
|
6087
5257
|
] });
|
|
6088
5258
|
}
|
|
6089
5259
|
|
|
6090
5260
|
// src/components/user-profile/ProfileSection.tsx
|
|
6091
|
-
import * as
|
|
6092
|
-
import { Fragment as Fragment12, jsx as
|
|
5261
|
+
import * as React33 from "react";
|
|
5262
|
+
import { Fragment as Fragment12, jsx as jsx41, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
6093
5263
|
function ProfileSection({
|
|
6094
5264
|
firstLastName,
|
|
6095
5265
|
usernameEnabled,
|
|
@@ -6100,15 +5270,15 @@ function ProfileSection({
|
|
|
6100
5270
|
const { user } = useUser();
|
|
6101
5271
|
const session = useSession();
|
|
6102
5272
|
const { pending, error, run } = useSubmitAction();
|
|
6103
|
-
const [name, setName] =
|
|
6104
|
-
const [firstName, setFirstName] =
|
|
6105
|
-
const [lastName, setLastName] =
|
|
6106
|
-
const [username, setUsername] =
|
|
5273
|
+
const [name, setName] = React33.useState(user?.name ?? "");
|
|
5274
|
+
const [firstName, setFirstName] = React33.useState(user?.firstName ?? "");
|
|
5275
|
+
const [lastName, setLastName] = React33.useState(user?.lastName ?? "");
|
|
5276
|
+
const [username, setUsername] = React33.useState(
|
|
6107
5277
|
user?.displayUsername ?? user?.username ?? ""
|
|
6108
5278
|
);
|
|
6109
|
-
const [image, setImage] =
|
|
6110
|
-
const [saved, setSaved] =
|
|
6111
|
-
const titleId =
|
|
5279
|
+
const [image, setImage] = React33.useState(user?.image ?? "");
|
|
5280
|
+
const [saved, setSaved] = React33.useState(false);
|
|
5281
|
+
const titleId = React33.useId();
|
|
6112
5282
|
const submit = (event) => {
|
|
6113
5283
|
event.preventDefault();
|
|
6114
5284
|
setSaved(false);
|
|
@@ -6131,15 +5301,15 @@ function ProfileSection({
|
|
|
6131
5301
|
}
|
|
6132
5302
|
);
|
|
6133
5303
|
};
|
|
6134
|
-
return /* @__PURE__ */
|
|
6135
|
-
/* @__PURE__ */
|
|
6136
|
-
/* @__PURE__ */
|
|
6137
|
-
/* @__PURE__ */
|
|
5304
|
+
return /* @__PURE__ */ jsxs36("section", { className: "ba-profile-section", "aria-labelledby": titleId, children: [
|
|
5305
|
+
/* @__PURE__ */ jsxs36("header", { className: "ba-profile-section-header", children: [
|
|
5306
|
+
/* @__PURE__ */ jsx41("h2", { id: titleId, className: "ba-title", children: t("userProfile.profile.title") }),
|
|
5307
|
+
/* @__PURE__ */ jsx41("p", { className: "ba-muted", children: t("userProfile.profile.description") })
|
|
6138
5308
|
] }),
|
|
6139
|
-
/* @__PURE__ */
|
|
6140
|
-
legacyNameField && /* @__PURE__ */
|
|
5309
|
+
/* @__PURE__ */ jsxs36("form", { method: "post", className: "ba-fields", onSubmit: submit, children: [
|
|
5310
|
+
legacyNameField && /* @__PURE__ */ jsxs36("label", { className: "ba-label", children: [
|
|
6141
5311
|
t("signUp.nameLabel"),
|
|
6142
|
-
/* @__PURE__ */
|
|
5312
|
+
/* @__PURE__ */ jsx41(
|
|
6143
5313
|
"input",
|
|
6144
5314
|
{
|
|
6145
5315
|
className: "ba-input",
|
|
@@ -6150,10 +5320,10 @@ function ProfileSection({
|
|
|
6150
5320
|
}
|
|
6151
5321
|
)
|
|
6152
5322
|
] }),
|
|
6153
|
-
firstLastName && /* @__PURE__ */
|
|
6154
|
-
/* @__PURE__ */
|
|
5323
|
+
firstLastName && /* @__PURE__ */ jsxs36(Fragment12, { children: [
|
|
5324
|
+
/* @__PURE__ */ jsxs36("label", { className: "ba-label", children: [
|
|
6155
5325
|
t("signUp.firstNameLabel"),
|
|
6156
|
-
/* @__PURE__ */
|
|
5326
|
+
/* @__PURE__ */ jsx41(
|
|
6157
5327
|
"input",
|
|
6158
5328
|
{
|
|
6159
5329
|
className: "ba-input",
|
|
@@ -6163,9 +5333,9 @@ function ProfileSection({
|
|
|
6163
5333
|
}
|
|
6164
5334
|
)
|
|
6165
5335
|
] }),
|
|
6166
|
-
/* @__PURE__ */
|
|
5336
|
+
/* @__PURE__ */ jsxs36("label", { className: "ba-label", children: [
|
|
6167
5337
|
t("signUp.lastNameLabel"),
|
|
6168
|
-
/* @__PURE__ */
|
|
5338
|
+
/* @__PURE__ */ jsx41(
|
|
6169
5339
|
"input",
|
|
6170
5340
|
{
|
|
6171
5341
|
className: "ba-input",
|
|
@@ -6176,9 +5346,9 @@ function ProfileSection({
|
|
|
6176
5346
|
)
|
|
6177
5347
|
] })
|
|
6178
5348
|
] }),
|
|
6179
|
-
usernameEnabled && /* @__PURE__ */
|
|
5349
|
+
usernameEnabled && /* @__PURE__ */ jsxs36("label", { className: "ba-label", children: [
|
|
6180
5350
|
t("common.usernameLabel"),
|
|
6181
|
-
/* @__PURE__ */
|
|
5351
|
+
/* @__PURE__ */ jsx41(
|
|
6182
5352
|
"input",
|
|
6183
5353
|
{
|
|
6184
5354
|
className: "ba-input",
|
|
@@ -6188,9 +5358,9 @@ function ProfileSection({
|
|
|
6188
5358
|
}
|
|
6189
5359
|
)
|
|
6190
5360
|
] }),
|
|
6191
|
-
/* @__PURE__ */
|
|
5361
|
+
/* @__PURE__ */ jsxs36("label", { className: "ba-label", children: [
|
|
6192
5362
|
t("userProfile.profile.imageLabel"),
|
|
6193
|
-
/* @__PURE__ */
|
|
5363
|
+
/* @__PURE__ */ jsx41(
|
|
6194
5364
|
"input",
|
|
6195
5365
|
{
|
|
6196
5366
|
className: "ba-input",
|
|
@@ -6201,16 +5371,16 @@ function ProfileSection({
|
|
|
6201
5371
|
}
|
|
6202
5372
|
)
|
|
6203
5373
|
] }),
|
|
6204
|
-
/* @__PURE__ */
|
|
6205
|
-
saved && /* @__PURE__ */
|
|
6206
|
-
/* @__PURE__ */
|
|
5374
|
+
/* @__PURE__ */ jsx41(FormError, { children: error }),
|
|
5375
|
+
saved && /* @__PURE__ */ jsx41("p", { className: "ba-success", role: "status", children: t("userProfile.profile.saved") }),
|
|
5376
|
+
/* @__PURE__ */ jsx41(
|
|
6207
5377
|
"button",
|
|
6208
5378
|
{
|
|
6209
5379
|
className: "ba-button ba-profile-submit",
|
|
6210
5380
|
type: "submit",
|
|
6211
5381
|
disabled: pending || legacyNameField && !name.trim(),
|
|
6212
5382
|
"aria-busy": pending || void 0,
|
|
6213
|
-
children: /* @__PURE__ */
|
|
5383
|
+
children: /* @__PURE__ */ jsx41(Busy, { busy: pending, label: t("common.working"), children: t("userProfile.save") })
|
|
6214
5384
|
}
|
|
6215
5385
|
)
|
|
6216
5386
|
] })
|
|
@@ -6218,30 +5388,30 @@ function ProfileSection({
|
|
|
6218
5388
|
}
|
|
6219
5389
|
|
|
6220
5390
|
// src/components/user-profile/RecoverySection.tsx
|
|
6221
|
-
import * as
|
|
6222
|
-
import { Fragment as Fragment13, jsx as
|
|
5391
|
+
import * as React34 from "react";
|
|
5392
|
+
import { Fragment as Fragment13, jsx as jsx42, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
6223
5393
|
function RecoverySection() {
|
|
6224
5394
|
const t = useT();
|
|
6225
5395
|
const { user } = useUser();
|
|
6226
|
-
const titleId =
|
|
6227
|
-
return /* @__PURE__ */
|
|
6228
|
-
/* @__PURE__ */
|
|
6229
|
-
/* @__PURE__ */
|
|
6230
|
-
/* @__PURE__ */
|
|
5396
|
+
const titleId = React34.useId();
|
|
5397
|
+
return /* @__PURE__ */ jsxs37("section", { className: "ba-profile-section", "aria-labelledby": titleId, children: [
|
|
5398
|
+
/* @__PURE__ */ jsxs37("header", { className: "ba-profile-section-header", children: [
|
|
5399
|
+
/* @__PURE__ */ jsx42("h2", { id: titleId, className: "ba-title", children: t("userProfile.recovery.title") }),
|
|
5400
|
+
/* @__PURE__ */ jsx42("p", { className: "ba-muted", children: t("userProfile.recovery.description") })
|
|
6231
5401
|
] }),
|
|
6232
|
-
/* @__PURE__ */
|
|
6233
|
-
/* @__PURE__ */
|
|
6234
|
-
user?.email && user.emailVerified ? /* @__PURE__ */
|
|
6235
|
-
/* @__PURE__ */
|
|
6236
|
-
/* @__PURE__ */
|
|
6237
|
-
] }) : /* @__PURE__ */
|
|
5402
|
+
/* @__PURE__ */ jsxs37("div", { className: "ba-profile-recovery-card", children: [
|
|
5403
|
+
/* @__PURE__ */ jsx42("strong", { children: t("userProfile.recovery.emailTitle") }),
|
|
5404
|
+
user?.email && user.emailVerified ? /* @__PURE__ */ jsxs37(Fragment13, { children: [
|
|
5405
|
+
/* @__PURE__ */ jsx42("p", { children: t("userProfile.recovery.emailDescription") }),
|
|
5406
|
+
/* @__PURE__ */ jsx42(Bidi, { children: user.email })
|
|
5407
|
+
] }) : /* @__PURE__ */ jsx42("p", { children: t("userProfile.recovery.emailUnavailable") })
|
|
6238
5408
|
] }),
|
|
6239
|
-
/* @__PURE__ */
|
|
5409
|
+
/* @__PURE__ */ jsx42(BackupCodesManager, { title: null })
|
|
6240
5410
|
] });
|
|
6241
5411
|
}
|
|
6242
5412
|
|
|
6243
5413
|
// src/components/user-profile/SessionsSection.tsx
|
|
6244
|
-
import * as
|
|
5414
|
+
import * as React36 from "react";
|
|
6245
5415
|
|
|
6246
5416
|
// src/components/user-profile/model.ts
|
|
6247
5417
|
var USER_PROFILE_SECTIONS = [
|
|
@@ -6288,18 +5458,18 @@ function formatSessionTime(date, locale) {
|
|
|
6288
5458
|
}
|
|
6289
5459
|
|
|
6290
5460
|
// src/components/user-profile/use-account-resource.ts
|
|
6291
|
-
import * as
|
|
5461
|
+
import * as React35 from "react";
|
|
6292
5462
|
function useAccountResource(loader2, failure) {
|
|
6293
|
-
const loaderRef =
|
|
5463
|
+
const loaderRef = React35.useRef(loader2);
|
|
6294
5464
|
loaderRef.current = loader2;
|
|
6295
|
-
const failureRef =
|
|
5465
|
+
const failureRef = React35.useRef(failure);
|
|
6296
5466
|
failureRef.current = failure;
|
|
6297
5467
|
const toServerError = useServerError();
|
|
6298
|
-
const [data, setData] =
|
|
6299
|
-
const [error, setError] =
|
|
6300
|
-
const [loading, setLoading] =
|
|
6301
|
-
const requestRef =
|
|
6302
|
-
const load =
|
|
5468
|
+
const [data, setData] = React35.useState(null);
|
|
5469
|
+
const [error, setError] = React35.useState(null);
|
|
5470
|
+
const [loading, setLoading] = React35.useState(true);
|
|
5471
|
+
const requestRef = React35.useRef(0);
|
|
5472
|
+
const load = React35.useCallback(async () => {
|
|
6303
5473
|
const request = ++requestRef.current;
|
|
6304
5474
|
setLoading(true);
|
|
6305
5475
|
try {
|
|
@@ -6318,7 +5488,7 @@ function useAccountResource(loader2, failure) {
|
|
|
6318
5488
|
if (request === requestRef.current) setLoading(false);
|
|
6319
5489
|
}
|
|
6320
5490
|
}, [toServerError]);
|
|
6321
|
-
|
|
5491
|
+
React35.useEffect(() => {
|
|
6322
5492
|
void load();
|
|
6323
5493
|
return () => {
|
|
6324
5494
|
requestRef.current += 1;
|
|
@@ -6328,14 +5498,14 @@ function useAccountResource(loader2, failure) {
|
|
|
6328
5498
|
}
|
|
6329
5499
|
|
|
6330
5500
|
// src/components/user-profile/SessionsSection.tsx
|
|
6331
|
-
import { jsx as
|
|
5501
|
+
import { jsx as jsx43, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
6332
5502
|
function SessionsSection() {
|
|
6333
5503
|
const t = useT();
|
|
6334
5504
|
const locale = useLocale();
|
|
6335
5505
|
const account = useAccount();
|
|
6336
5506
|
const sessionState = useSession();
|
|
6337
5507
|
const mutation = useSubmitAction();
|
|
6338
|
-
const titleId =
|
|
5508
|
+
const titleId = React36.useId();
|
|
6339
5509
|
const resource = useAccountResource(
|
|
6340
5510
|
() => account.listSessions(),
|
|
6341
5511
|
t("userProfile.sessions.loadError")
|
|
@@ -6357,31 +5527,31 @@ function SessionsSection() {
|
|
|
6357
5527
|
}
|
|
6358
5528
|
);
|
|
6359
5529
|
};
|
|
6360
|
-
return /* @__PURE__ */
|
|
6361
|
-
/* @__PURE__ */
|
|
6362
|
-
/* @__PURE__ */
|
|
6363
|
-
/* @__PURE__ */
|
|
5530
|
+
return /* @__PURE__ */ jsxs38("section", { className: "ba-profile-section", "aria-labelledby": titleId, children: [
|
|
5531
|
+
/* @__PURE__ */ jsxs38("header", { className: "ba-profile-section-header", children: [
|
|
5532
|
+
/* @__PURE__ */ jsx43("h2", { id: titleId, className: "ba-title", children: t("userProfile.sessions.title") }),
|
|
5533
|
+
/* @__PURE__ */ jsx43("p", { className: "ba-muted", children: t("userProfile.sessions.description") })
|
|
6364
5534
|
] }),
|
|
6365
|
-
resource.data === null ? resource.loading ? /* @__PURE__ */
|
|
6366
|
-
/* @__PURE__ */
|
|
6367
|
-
/* @__PURE__ */
|
|
6368
|
-
] }) : null : /* @__PURE__ */
|
|
5535
|
+
resource.data === null ? resource.loading ? /* @__PURE__ */ jsxs38("div", { className: "ba-profile-list-skeleton", "aria-busy": "true", children: [
|
|
5536
|
+
/* @__PURE__ */ jsx43("div", { className: "ba-skeleton" }),
|
|
5537
|
+
/* @__PURE__ */ jsx43("div", { className: "ba-skeleton" })
|
|
5538
|
+
] }) : null : /* @__PURE__ */ jsxs38("ul", { className: "ba-profile-list", children: [
|
|
6369
5539
|
sessions.map((session) => {
|
|
6370
5540
|
const label2 = session.userAgent?.trim() || t("userProfile.sessions.unknownDevice");
|
|
6371
|
-
return /* @__PURE__ */
|
|
6372
|
-
/* @__PURE__ */
|
|
6373
|
-
/* @__PURE__ */
|
|
6374
|
-
/* @__PURE__ */
|
|
6375
|
-
session.id === currentId && /* @__PURE__ */
|
|
5541
|
+
return /* @__PURE__ */ jsxs38("li", { className: "ba-profile-list-item", children: [
|
|
5542
|
+
/* @__PURE__ */ jsxs38("span", { children: [
|
|
5543
|
+
/* @__PURE__ */ jsx43("strong", { children: label2 }),
|
|
5544
|
+
/* @__PURE__ */ jsxs38("small", { children: [
|
|
5545
|
+
session.id === currentId && /* @__PURE__ */ jsx43("em", { children: t("userProfile.sessions.current") }),
|
|
6376
5546
|
formatSessionTime(session.updatedAt, locale)
|
|
6377
5547
|
] })
|
|
6378
5548
|
] }),
|
|
6379
|
-
/* @__PURE__ */
|
|
5549
|
+
/* @__PURE__ */ jsx43("button", { className: "ba-link-button ba-danger", type: "button", disabled: mutation.pending, onClick: () => revoke(session.id, label2), children: t("userProfile.sessions.revoke") })
|
|
6380
5550
|
] }, session.id);
|
|
6381
5551
|
}),
|
|
6382
|
-
sessions.length === 0 && /* @__PURE__ */
|
|
5552
|
+
sessions.length === 0 && /* @__PURE__ */ jsx43("li", { className: "ba-muted", children: t("userProfile.sessions.empty") })
|
|
6383
5553
|
] }),
|
|
6384
|
-
sessions.some((session) => session.id !== currentId) && /* @__PURE__ */
|
|
5554
|
+
sessions.some((session) => session.id !== currentId) && /* @__PURE__ */ jsx43(
|
|
6385
5555
|
"button",
|
|
6386
5556
|
{
|
|
6387
5557
|
className: "ba-button ba-button-secondary ba-profile-submit",
|
|
@@ -6397,17 +5567,17 @@ function SessionsSection() {
|
|
|
6397
5567
|
children: t("userProfile.sessions.revokeOthers")
|
|
6398
5568
|
}
|
|
6399
5569
|
),
|
|
6400
|
-
resource.error && /* @__PURE__ */
|
|
6401
|
-
/* @__PURE__ */
|
|
6402
|
-
/* @__PURE__ */
|
|
5570
|
+
resource.error && /* @__PURE__ */ jsxs38("div", { className: "ba-profile-inline-error", children: [
|
|
5571
|
+
/* @__PURE__ */ jsx43(FormError, { children: resource.error }),
|
|
5572
|
+
/* @__PURE__ */ jsx43("button", { className: "ba-link-button", type: "button", onClick: () => void resource.load(), children: t("userProfile.retry") })
|
|
6403
5573
|
] }),
|
|
6404
|
-
/* @__PURE__ */
|
|
5574
|
+
/* @__PURE__ */ jsx43(FormError, { children: mutation.error })
|
|
6405
5575
|
] });
|
|
6406
5576
|
}
|
|
6407
5577
|
|
|
6408
5578
|
// src/components/user-profile/SocialSection.tsx
|
|
6409
|
-
import * as
|
|
6410
|
-
import { jsx as
|
|
5579
|
+
import * as React37 from "react";
|
|
5580
|
+
import { jsx as jsx44, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
6411
5581
|
function providerLabel(provider) {
|
|
6412
5582
|
return provider.charAt(0).toUpperCase() + provider.slice(1);
|
|
6413
5583
|
}
|
|
@@ -6416,7 +5586,7 @@ function SocialSection() {
|
|
|
6416
5586
|
const account = useAccount();
|
|
6417
5587
|
const { config } = usePublicConfig();
|
|
6418
5588
|
const mutation = useSubmitAction();
|
|
6419
|
-
const titleId =
|
|
5589
|
+
const titleId = React37.useId();
|
|
6420
5590
|
const resource = useAccountResource(
|
|
6421
5591
|
() => account.listSocialAccounts(),
|
|
6422
5592
|
t("userProfile.social.loadError")
|
|
@@ -6447,18 +5617,18 @@ function SocialSection() {
|
|
|
6447
5617
|
{ failure: t("userProfile.social.unlinkError"), onSuccess: resource.load }
|
|
6448
5618
|
);
|
|
6449
5619
|
};
|
|
6450
|
-
return /* @__PURE__ */
|
|
6451
|
-
/* @__PURE__ */
|
|
6452
|
-
/* @__PURE__ */
|
|
6453
|
-
/* @__PURE__ */
|
|
5620
|
+
return /* @__PURE__ */ jsxs39("section", { className: "ba-profile-section", "aria-labelledby": titleId, children: [
|
|
5621
|
+
/* @__PURE__ */ jsxs39("header", { className: "ba-profile-section-header", children: [
|
|
5622
|
+
/* @__PURE__ */ jsx44("h2", { id: titleId, className: "ba-title", children: t("userProfile.social.title") }),
|
|
5623
|
+
/* @__PURE__ */ jsx44("p", { className: "ba-muted", children: t("userProfile.social.description") })
|
|
6454
5624
|
] }),
|
|
6455
|
-
resource.data === null ? resource.loading ? /* @__PURE__ */
|
|
6456
|
-
linked.map((item) => /* @__PURE__ */
|
|
6457
|
-
/* @__PURE__ */
|
|
6458
|
-
/* @__PURE__ */
|
|
6459
|
-
/* @__PURE__ */
|
|
5625
|
+
resource.data === null ? resource.loading ? /* @__PURE__ */ jsx44("div", { className: "ba-profile-list-skeleton", "aria-busy": "true", children: /* @__PURE__ */ jsx44("div", { className: "ba-skeleton" }) }) : null : /* @__PURE__ */ jsxs39("ul", { className: "ba-profile-list", children: [
|
|
5626
|
+
linked.map((item) => /* @__PURE__ */ jsxs39("li", { className: "ba-profile-list-item", children: [
|
|
5627
|
+
/* @__PURE__ */ jsxs39("span", { children: [
|
|
5628
|
+
/* @__PURE__ */ jsx44("strong", { children: providerLabel(item.providerId) }),
|
|
5629
|
+
/* @__PURE__ */ jsx44("small", { children: item.canUnlink ? t("userProfile.social.connected") : t("userProfile.social.lastMethod") })
|
|
6460
5630
|
] }),
|
|
6461
|
-
/* @__PURE__ */
|
|
5631
|
+
/* @__PURE__ */ jsx44(
|
|
6462
5632
|
"button",
|
|
6463
5633
|
{
|
|
6464
5634
|
className: "ba-link-button ba-danger",
|
|
@@ -6473,26 +5643,26 @@ function SocialSection() {
|
|
|
6473
5643
|
}
|
|
6474
5644
|
)
|
|
6475
5645
|
] }, item.id)),
|
|
6476
|
-
linked.length === 0 && /* @__PURE__ */
|
|
5646
|
+
linked.length === 0 && /* @__PURE__ */ jsx44("li", { className: "ba-muted", children: t("userProfile.social.empty") })
|
|
6477
5647
|
] }),
|
|
6478
|
-
available.length > 0 && /* @__PURE__ */
|
|
6479
|
-
/* @__PURE__ */
|
|
6480
|
-
available.map((provider) => /* @__PURE__ */
|
|
5648
|
+
available.length > 0 && /* @__PURE__ */ jsxs39("div", { className: "ba-profile-provider-actions", children: [
|
|
5649
|
+
/* @__PURE__ */ jsx44("p", { className: "ba-profile-subtitle", children: t("userProfile.social.add") }),
|
|
5650
|
+
available.map((provider) => /* @__PURE__ */ jsx44("button", { type: "button", className: "ba-button ba-button-secondary", disabled: mutation.pending, onClick: () => link(provider), children: t("userProfile.social.connectProvider", { provider: providerLabel(provider) }) }, provider))
|
|
6481
5651
|
] }),
|
|
6482
|
-
resource.error && /* @__PURE__ */
|
|
6483
|
-
/* @__PURE__ */
|
|
6484
|
-
/* @__PURE__ */
|
|
5652
|
+
resource.error && /* @__PURE__ */ jsxs39("div", { className: "ba-profile-inline-error", children: [
|
|
5653
|
+
/* @__PURE__ */ jsx44(FormError, { children: resource.error }),
|
|
5654
|
+
/* @__PURE__ */ jsx44("button", { className: "ba-link-button", type: "button", onClick: () => void resource.load(), children: t("userProfile.retry") })
|
|
6485
5655
|
] }),
|
|
6486
|
-
/* @__PURE__ */
|
|
5656
|
+
/* @__PURE__ */ jsx44(FormError, { children: mutation.error })
|
|
6487
5657
|
] });
|
|
6488
5658
|
}
|
|
6489
5659
|
|
|
6490
5660
|
// src/components/user-profile/UserProfileModal.tsx
|
|
6491
|
-
import * as
|
|
5661
|
+
import * as React39 from "react";
|
|
6492
5662
|
|
|
6493
5663
|
// src/components/ModalSurface.tsx
|
|
6494
|
-
import * as
|
|
6495
|
-
import { jsx as
|
|
5664
|
+
import * as React38 from "react";
|
|
5665
|
+
import { jsx as jsx45 } from "react/jsx-runtime";
|
|
6496
5666
|
function ModalSurface({
|
|
6497
5667
|
overlayClassName,
|
|
6498
5668
|
panelClassName,
|
|
@@ -6502,12 +5672,12 @@ function ModalSurface({
|
|
|
6502
5672
|
onClose,
|
|
6503
5673
|
children
|
|
6504
5674
|
}) {
|
|
6505
|
-
const panelRef =
|
|
6506
|
-
const onCloseRef =
|
|
6507
|
-
const returnFocusRefRef =
|
|
5675
|
+
const panelRef = React38.useRef(null);
|
|
5676
|
+
const onCloseRef = React38.useRef(onClose);
|
|
5677
|
+
const returnFocusRefRef = React38.useRef(returnFocusRef);
|
|
6508
5678
|
onCloseRef.current = onClose;
|
|
6509
5679
|
returnFocusRefRef.current = returnFocusRef;
|
|
6510
|
-
|
|
5680
|
+
React38.useEffect(() => {
|
|
6511
5681
|
const previousFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
6512
5682
|
const previousOverflow = document.body.style.overflow;
|
|
6513
5683
|
document.body.style.overflow = "hidden";
|
|
@@ -6540,9 +5710,9 @@ function ModalSurface({
|
|
|
6540
5710
|
window.setTimeout(() => returnTarget?.focus(), 0);
|
|
6541
5711
|
};
|
|
6542
5712
|
}, []);
|
|
6543
|
-
return /* @__PURE__ */
|
|
5713
|
+
return /* @__PURE__ */ jsx45("div", { className: overlayClassName, role: "presentation", onMouseDown: (event) => {
|
|
6544
5714
|
if (event.target === event.currentTarget) onClose();
|
|
6545
|
-
}, children: /* @__PURE__ */
|
|
5715
|
+
}, children: /* @__PURE__ */ jsx45(
|
|
6546
5716
|
"div",
|
|
6547
5717
|
{
|
|
6548
5718
|
ref: panelRef,
|
|
@@ -6557,14 +5727,15 @@ function ModalSurface({
|
|
|
6557
5727
|
}
|
|
6558
5728
|
|
|
6559
5729
|
// src/components/user-profile/UserProfileModal.tsx
|
|
6560
|
-
import { jsx as
|
|
5730
|
+
import { jsx as jsx46, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
6561
5731
|
function UserProfileModal({
|
|
6562
5732
|
children,
|
|
6563
|
-
onClose
|
|
5733
|
+
onClose,
|
|
5734
|
+
branding
|
|
6564
5735
|
}) {
|
|
6565
5736
|
const t = useT();
|
|
6566
|
-
const titleId =
|
|
6567
|
-
return /* @__PURE__ */
|
|
5737
|
+
const titleId = React39.useId();
|
|
5738
|
+
return /* @__PURE__ */ jsxs40(
|
|
6568
5739
|
ModalSurface,
|
|
6569
5740
|
{
|
|
6570
5741
|
overlayClassName: "ba-profile-overlay",
|
|
@@ -6573,12 +5744,13 @@ function UserProfileModal({
|
|
|
6573
5744
|
testId: "user-profile-modal",
|
|
6574
5745
|
onClose,
|
|
6575
5746
|
children: [
|
|
6576
|
-
/* @__PURE__ */
|
|
6577
|
-
/* @__PURE__ */
|
|
6578
|
-
|
|
6579
|
-
/* @__PURE__ */
|
|
5747
|
+
/* @__PURE__ */ jsxs40("header", { className: "ba-profile-modal-header", children: [
|
|
5748
|
+
/* @__PURE__ */ jsxs40("span", { children: [
|
|
5749
|
+
branding,
|
|
5750
|
+
/* @__PURE__ */ jsx46("h1", { id: titleId, children: t("userProfile.title") }),
|
|
5751
|
+
/* @__PURE__ */ jsx46("p", { children: t("userProfile.description") })
|
|
6580
5752
|
] }),
|
|
6581
|
-
/* @__PURE__ */
|
|
5753
|
+
/* @__PURE__ */ jsx46(
|
|
6582
5754
|
"button",
|
|
6583
5755
|
{
|
|
6584
5756
|
type: "button",
|
|
@@ -6586,7 +5758,7 @@ function UserProfileModal({
|
|
|
6586
5758
|
"aria-label": t("userProfile.close"),
|
|
6587
5759
|
onClick: onClose,
|
|
6588
5760
|
autoFocus: true,
|
|
6589
|
-
children: /* @__PURE__ */
|
|
5761
|
+
children: /* @__PURE__ */ jsx46("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", focusable: "false", children: /* @__PURE__ */ jsx46(
|
|
6590
5762
|
"path",
|
|
6591
5763
|
{
|
|
6592
5764
|
d: "M6 6l12 12M18 6L6 18",
|
|
@@ -6599,14 +5771,14 @@ function UserProfileModal({
|
|
|
6599
5771
|
)
|
|
6600
5772
|
] }),
|
|
6601
5773
|
children,
|
|
6602
|
-
/* @__PURE__ */
|
|
5774
|
+
/* @__PURE__ */ jsx46("footer", { className: "ba-profile-modal-footer", children: /* @__PURE__ */ jsx46(AuthOwlBadge, {}) })
|
|
6603
5775
|
]
|
|
6604
5776
|
}
|
|
6605
5777
|
);
|
|
6606
5778
|
}
|
|
6607
5779
|
|
|
6608
5780
|
// src/components/UserProfile.tsx
|
|
6609
|
-
import { jsx as
|
|
5781
|
+
import { jsx as jsx47, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
6610
5782
|
var SECTION_KEYS = {
|
|
6611
5783
|
profile: "userProfile.nav.profile",
|
|
6612
5784
|
email: "userProfile.nav.email",
|
|
@@ -6628,13 +5800,14 @@ function UserProfile(props = {}) {
|
|
|
6628
5800
|
section,
|
|
6629
5801
|
defaultSection,
|
|
6630
5802
|
onSectionChange,
|
|
6631
|
-
onDeleted
|
|
5803
|
+
onDeleted,
|
|
5804
|
+
showBranding = true
|
|
6632
5805
|
} = props;
|
|
6633
5806
|
const mode = props.mode ?? "page";
|
|
6634
5807
|
const t = useT();
|
|
6635
5808
|
const { user, isLoaded, isSignedIn } = useUser();
|
|
6636
5809
|
const { config } = usePublicConfig();
|
|
6637
|
-
const [internalSection, setInternalSection] =
|
|
5810
|
+
const [internalSection, setInternalSection] = React40.useState(() => initialSection(defaultSection));
|
|
6638
5811
|
const active = section ?? internalSection;
|
|
6639
5812
|
const capabilities = resolveProjectCapabilities(config);
|
|
6640
5813
|
const passwordEnabled = config !== null && capabilities.passwordSignIn;
|
|
@@ -6643,7 +5816,7 @@ function UserProfile(props = {}) {
|
|
|
6643
5816
|
const recoveryEnabled = capabilities.backupCodes && user?.twoFactorEnabled === true;
|
|
6644
5817
|
const deletionEnabled = capabilities.accountDeletion;
|
|
6645
5818
|
const socialEnabled = (config?.socialProviders?.length ?? 0) > 0;
|
|
6646
|
-
const sections =
|
|
5819
|
+
const sections = React40.useMemo(
|
|
6647
5820
|
() => userProfileSectionsFor({
|
|
6648
5821
|
password: passwordEnabled,
|
|
6649
5822
|
passkeys: passkeysEnabled,
|
|
@@ -6654,7 +5827,7 @@ function UserProfile(props = {}) {
|
|
|
6654
5827
|
}),
|
|
6655
5828
|
[deletionEnabled, mfaEnabled, passkeysEnabled, passwordEnabled, recoveryEnabled, socialEnabled]
|
|
6656
5829
|
);
|
|
6657
|
-
|
|
5830
|
+
React40.useEffect(() => {
|
|
6658
5831
|
if (section || mode !== "page") return;
|
|
6659
5832
|
const onHashChange = () => {
|
|
6660
5833
|
const next = userProfileSectionFromHash(window.location.hash);
|
|
@@ -6671,11 +5844,11 @@ function UserProfile(props = {}) {
|
|
|
6671
5844
|
window.history.replaceState(null, "", userProfileSectionHash(next));
|
|
6672
5845
|
}
|
|
6673
5846
|
};
|
|
6674
|
-
const content = !isLoaded ? /* @__PURE__ */
|
|
6675
|
-
/* @__PURE__ */
|
|
6676
|
-
/* @__PURE__ */
|
|
6677
|
-
/* @__PURE__ */
|
|
6678
|
-
] }) : !isSignedIn || !user ? /* @__PURE__ */
|
|
5847
|
+
const content = !isLoaded ? /* @__PURE__ */ jsxs41("div", { className: "ba-profile-loading", "aria-busy": "true", children: [
|
|
5848
|
+
/* @__PURE__ */ jsx47("div", { className: "ba-skeleton" }),
|
|
5849
|
+
/* @__PURE__ */ jsx47("div", { className: "ba-skeleton" }),
|
|
5850
|
+
/* @__PURE__ */ jsx47("div", { className: "ba-skeleton" })
|
|
5851
|
+
] }) : !isSignedIn || !user ? /* @__PURE__ */ jsx47("p", { className: "ba-muted", children: t("userProfile.signedOut") }) : /* @__PURE__ */ jsx47(
|
|
6679
5852
|
UserProfileBody,
|
|
6680
5853
|
{
|
|
6681
5854
|
active: visibleActive,
|
|
@@ -6687,15 +5860,23 @@ function UserProfile(props = {}) {
|
|
|
6687
5860
|
user.id
|
|
6688
5861
|
);
|
|
6689
5862
|
if (props.mode === "modal") {
|
|
6690
|
-
return /* @__PURE__ */
|
|
5863
|
+
return /* @__PURE__ */ jsx47(
|
|
5864
|
+
UserProfileModal,
|
|
5865
|
+
{
|
|
5866
|
+
onClose: props.onClose,
|
|
5867
|
+
branding: showBranding ? /* @__PURE__ */ jsx47(AuthOwlBranding, {}) : null,
|
|
5868
|
+
children: content
|
|
5869
|
+
}
|
|
5870
|
+
);
|
|
6691
5871
|
}
|
|
6692
|
-
return /* @__PURE__ */
|
|
6693
|
-
/* @__PURE__ */
|
|
6694
|
-
/* @__PURE__ */
|
|
6695
|
-
/* @__PURE__ */
|
|
5872
|
+
return /* @__PURE__ */ jsxs41("article", { className: "ba-profile ba-profile-page", "data-testid": "user-profile", children: [
|
|
5873
|
+
/* @__PURE__ */ jsxs41("header", { className: "ba-profile-heading", children: [
|
|
5874
|
+
showBranding ? /* @__PURE__ */ jsx47(AuthOwlBranding, {}) : null,
|
|
5875
|
+
/* @__PURE__ */ jsx47("h1", { children: t("userProfile.title") }),
|
|
5876
|
+
/* @__PURE__ */ jsx47("p", { children: t("userProfile.description") })
|
|
6696
5877
|
] }),
|
|
6697
5878
|
content,
|
|
6698
|
-
/* @__PURE__ */
|
|
5879
|
+
/* @__PURE__ */ jsx47("footer", { className: "ba-profile-modal-footer", children: /* @__PURE__ */ jsx47(AuthOwlBadge, {}) })
|
|
6699
5880
|
] });
|
|
6700
5881
|
}
|
|
6701
5882
|
function UserProfileBody({
|
|
@@ -6706,8 +5887,8 @@ function UserProfileBody({
|
|
|
6706
5887
|
capabilities
|
|
6707
5888
|
}) {
|
|
6708
5889
|
const t = useT();
|
|
6709
|
-
return /* @__PURE__ */
|
|
6710
|
-
/* @__PURE__ */
|
|
5890
|
+
return /* @__PURE__ */ jsxs41("div", { className: "ba-profile-layout", children: [
|
|
5891
|
+
/* @__PURE__ */ jsx47("nav", { className: "ba-profile-nav", "aria-label": t("userProfile.nav.aria"), children: sections.map((item) => /* @__PURE__ */ jsx47(
|
|
6711
5892
|
"button",
|
|
6712
5893
|
{
|
|
6713
5894
|
type: "button",
|
|
@@ -6718,8 +5899,8 @@ function UserProfileBody({
|
|
|
6718
5899
|
},
|
|
6719
5900
|
item
|
|
6720
5901
|
)) }),
|
|
6721
|
-
/* @__PURE__ */
|
|
6722
|
-
active === "profile" && /* @__PURE__ */
|
|
5902
|
+
/* @__PURE__ */ jsxs41("div", { className: "ba-profile-content", "data-section": active, children: [
|
|
5903
|
+
active === "profile" && /* @__PURE__ */ jsx47(
|
|
6723
5904
|
ProfileSection,
|
|
6724
5905
|
{
|
|
6725
5906
|
firstLastName: capabilities.firstLastName,
|
|
@@ -6727,43 +5908,43 @@ function UserProfileBody({
|
|
|
6727
5908
|
legacyNameField: capabilities.legacyNameField
|
|
6728
5909
|
}
|
|
6729
5910
|
),
|
|
6730
|
-
active === "email" && /* @__PURE__ */
|
|
6731
|
-
active === "password" && /* @__PURE__ */
|
|
6732
|
-
active === "social" && /* @__PURE__ */
|
|
6733
|
-
active === "sessions" && /* @__PURE__ */
|
|
6734
|
-
active === "passkeys" && /* @__PURE__ */
|
|
6735
|
-
active === "mfa" && /* @__PURE__ */
|
|
6736
|
-
active === "recovery" && /* @__PURE__ */
|
|
6737
|
-
active === "danger" && /* @__PURE__ */
|
|
5911
|
+
active === "email" && /* @__PURE__ */ jsx47(EmailSection, { allowChange: capabilities.emailChange }),
|
|
5912
|
+
active === "password" && /* @__PURE__ */ jsx47(PasswordSection, {}),
|
|
5913
|
+
active === "social" && /* @__PURE__ */ jsx47(SocialSection, {}),
|
|
5914
|
+
active === "sessions" && /* @__PURE__ */ jsx47(SessionsSection, {}),
|
|
5915
|
+
active === "passkeys" && /* @__PURE__ */ jsx47(PasskeysSection, { allowAdd: capabilities.passkeyAdd }),
|
|
5916
|
+
active === "mfa" && /* @__PURE__ */ jsx47(MfaSection, {}),
|
|
5917
|
+
active === "recovery" && /* @__PURE__ */ jsx47(RecoverySection, {}),
|
|
5918
|
+
active === "danger" && /* @__PURE__ */ jsx47(DeleteAccountSection, { onDeleted })
|
|
6738
5919
|
] })
|
|
6739
5920
|
] });
|
|
6740
5921
|
}
|
|
6741
5922
|
|
|
6742
5923
|
// src/components/UserButton.tsx
|
|
6743
|
-
import { jsx as
|
|
5924
|
+
import { jsx as jsx48, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
6744
5925
|
function UserButton() {
|
|
6745
5926
|
const t = useT();
|
|
6746
5927
|
const { user, isLoaded } = useUser();
|
|
6747
5928
|
const { signOut } = useSignOut();
|
|
6748
|
-
const [open, setOpen] =
|
|
6749
|
-
const [profileOpen, setProfileOpen] =
|
|
6750
|
-
const triggerRef =
|
|
5929
|
+
const [open, setOpen] = React41.useState(false);
|
|
5930
|
+
const [profileOpen, setProfileOpen] = React41.useState(false);
|
|
5931
|
+
const triggerRef = React41.useRef(null);
|
|
6751
5932
|
if (!isLoaded || !user) return null;
|
|
6752
5933
|
const identity = user.email ?? user.phoneNumber ?? user.name ?? "?";
|
|
6753
|
-
return /* @__PURE__ */
|
|
6754
|
-
/* @__PURE__ */
|
|
5934
|
+
return /* @__PURE__ */ jsxs42("div", { className: "ba-user-button", "data-testid": "user-button", children: [
|
|
5935
|
+
/* @__PURE__ */ jsx48(
|
|
6755
5936
|
"button",
|
|
6756
5937
|
{
|
|
6757
5938
|
ref: triggerRef,
|
|
6758
5939
|
className: "ba-user-button-trigger",
|
|
6759
5940
|
"aria-label": t("userButton.openMenuAria"),
|
|
6760
5941
|
onClick: () => setOpen((v) => !v),
|
|
6761
|
-
children: user.image ? /* @__PURE__ */
|
|
5942
|
+
children: user.image ? /* @__PURE__ */ jsx48("img", { className: "ba-avatar", src: user.image, alt: "" }) : /* @__PURE__ */ jsx48("span", { className: "ba-avatar ba-avatar-fallback", children: identity[0]?.toUpperCase() })
|
|
6762
5943
|
}
|
|
6763
5944
|
),
|
|
6764
|
-
open && /* @__PURE__ */
|
|
6765
|
-
/* @__PURE__ */
|
|
6766
|
-
/* @__PURE__ */
|
|
5945
|
+
open && /* @__PURE__ */ jsxs42("div", { className: "ba-menu", children: [
|
|
5946
|
+
/* @__PURE__ */ jsx48("p", { className: "ba-menu-label", children: identity }),
|
|
5947
|
+
/* @__PURE__ */ jsx48(
|
|
6767
5948
|
"button",
|
|
6768
5949
|
{
|
|
6769
5950
|
className: "ba-menu-item",
|
|
@@ -6774,10 +5955,10 @@ function UserButton() {
|
|
|
6774
5955
|
children: t("userButton.manageAccount")
|
|
6775
5956
|
}
|
|
6776
5957
|
),
|
|
6777
|
-
/* @__PURE__ */
|
|
6778
|
-
/* @__PURE__ */
|
|
5958
|
+
/* @__PURE__ */ jsx48("button", { className: "ba-menu-item", onClick: () => signOut(), children: t("userButton.signOut") }),
|
|
5959
|
+
/* @__PURE__ */ jsx48("div", { className: "ba-menu-badge", children: /* @__PURE__ */ jsx48(AuthOwlBadge, {}) })
|
|
6779
5960
|
] }),
|
|
6780
|
-
profileOpen && /* @__PURE__ */
|
|
5961
|
+
profileOpen && /* @__PURE__ */ jsx48(
|
|
6781
5962
|
UserProfile,
|
|
6782
5963
|
{
|
|
6783
5964
|
mode: "modal",
|
|
@@ -6793,10 +5974,10 @@ function UserButton() {
|
|
|
6793
5974
|
}
|
|
6794
5975
|
|
|
6795
5976
|
// src/components/OrganizationSwitcher.tsx
|
|
6796
|
-
import * as
|
|
5977
|
+
import * as React50 from "react";
|
|
6797
5978
|
|
|
6798
5979
|
// src/components/CreateOrganization.tsx
|
|
6799
|
-
import * as
|
|
5980
|
+
import * as React42 from "react";
|
|
6800
5981
|
|
|
6801
5982
|
// src/components/organization/model.ts
|
|
6802
5983
|
function organizationSlugFromName(name) {
|
|
@@ -6813,22 +5994,22 @@ function canManageOrganization(member) {
|
|
|
6813
5994
|
}
|
|
6814
5995
|
|
|
6815
5996
|
// src/components/CreateOrganization.tsx
|
|
6816
|
-
import { jsx as
|
|
5997
|
+
import { jsx as jsx49, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
6817
5998
|
function CreateOrganization({ onCreated, title } = {}) {
|
|
6818
5999
|
const t = useT();
|
|
6819
6000
|
const { config, isLoading: configLoading } = usePublicConfig();
|
|
6820
6001
|
const { isLoaded, isSignedIn } = useUser();
|
|
6821
6002
|
const api = useAuthClient().organization;
|
|
6822
6003
|
const { pending, error, run } = useSubmitAction();
|
|
6823
|
-
const [name, setName] =
|
|
6824
|
-
const [slug, setSlug] =
|
|
6825
|
-
const [logo, setLogo] =
|
|
6826
|
-
const [slugTouched, setSlugTouched] =
|
|
6004
|
+
const [name, setName] = React42.useState("");
|
|
6005
|
+
const [slug, setSlug] = React42.useState("");
|
|
6006
|
+
const [logo, setLogo] = React42.useState("");
|
|
6007
|
+
const [slugTouched, setSlugTouched] = React42.useState(false);
|
|
6827
6008
|
if (configLoading || !isLoaded) {
|
|
6828
|
-
return /* @__PURE__ */
|
|
6009
|
+
return /* @__PURE__ */ jsx49("div", { className: "ba-skeleton", "aria-label": t("organization.loading") });
|
|
6829
6010
|
}
|
|
6830
6011
|
if (config?.organizations !== true) return null;
|
|
6831
|
-
if (!isSignedIn) return /* @__PURE__ */
|
|
6012
|
+
if (!isSignedIn) return /* @__PURE__ */ jsx49("p", { className: "ba-muted", children: t("organization.signedOut") });
|
|
6832
6013
|
const submit = (event) => {
|
|
6833
6014
|
event.preventDefault();
|
|
6834
6015
|
const normalizedName = name.trim();
|
|
@@ -6853,15 +6034,15 @@ function CreateOrganization({ onCreated, title } = {}) {
|
|
|
6853
6034
|
}
|
|
6854
6035
|
);
|
|
6855
6036
|
};
|
|
6856
|
-
return /* @__PURE__ */
|
|
6857
|
-
title !== null && /* @__PURE__ */
|
|
6858
|
-
/* @__PURE__ */
|
|
6859
|
-
/* @__PURE__ */
|
|
6037
|
+
return /* @__PURE__ */ jsxs43("section", { className: "ba-organization-create", children: [
|
|
6038
|
+
title !== null && /* @__PURE__ */ jsxs43("header", { className: "ba-organization-section-header", children: [
|
|
6039
|
+
/* @__PURE__ */ jsx49("h2", { className: "ba-title", children: title ?? t("organization.create.title") }),
|
|
6040
|
+
/* @__PURE__ */ jsx49("p", { className: "ba-muted", children: t("organization.create.description") })
|
|
6860
6041
|
] }),
|
|
6861
|
-
/* @__PURE__ */
|
|
6862
|
-
/* @__PURE__ */
|
|
6042
|
+
/* @__PURE__ */ jsxs43("form", { method: "post", className: "ba-fields", onSubmit: submit, children: [
|
|
6043
|
+
/* @__PURE__ */ jsxs43("label", { className: "ba-label", children: [
|
|
6863
6044
|
t("organization.create.name"),
|
|
6864
|
-
/* @__PURE__ */
|
|
6045
|
+
/* @__PURE__ */ jsx49(
|
|
6865
6046
|
"input",
|
|
6866
6047
|
{
|
|
6867
6048
|
className: "ba-input",
|
|
@@ -6876,9 +6057,9 @@ function CreateOrganization({ onCreated, title } = {}) {
|
|
|
6876
6057
|
}
|
|
6877
6058
|
)
|
|
6878
6059
|
] }),
|
|
6879
|
-
/* @__PURE__ */
|
|
6060
|
+
/* @__PURE__ */ jsxs43("label", { className: "ba-label", children: [
|
|
6880
6061
|
t("organization.create.slug"),
|
|
6881
|
-
/* @__PURE__ */
|
|
6062
|
+
/* @__PURE__ */ jsx49(
|
|
6882
6063
|
"input",
|
|
6883
6064
|
{
|
|
6884
6065
|
className: "ba-input",
|
|
@@ -6893,9 +6074,9 @@ function CreateOrganization({ onCreated, title } = {}) {
|
|
|
6893
6074
|
}
|
|
6894
6075
|
)
|
|
6895
6076
|
] }),
|
|
6896
|
-
/* @__PURE__ */
|
|
6077
|
+
/* @__PURE__ */ jsxs43("label", { className: "ba-label", children: [
|
|
6897
6078
|
t("organization.create.logo"),
|
|
6898
|
-
/* @__PURE__ */
|
|
6079
|
+
/* @__PURE__ */ jsx49(
|
|
6899
6080
|
"input",
|
|
6900
6081
|
{
|
|
6901
6082
|
className: "ba-input",
|
|
@@ -6907,15 +6088,15 @@ function CreateOrganization({ onCreated, title } = {}) {
|
|
|
6907
6088
|
}
|
|
6908
6089
|
)
|
|
6909
6090
|
] }),
|
|
6910
|
-
/* @__PURE__ */
|
|
6911
|
-
/* @__PURE__ */
|
|
6091
|
+
/* @__PURE__ */ jsx49(FormError, { children: error }),
|
|
6092
|
+
/* @__PURE__ */ jsx49(
|
|
6912
6093
|
"button",
|
|
6913
6094
|
{
|
|
6914
6095
|
className: "ba-button ba-profile-submit",
|
|
6915
6096
|
type: "submit",
|
|
6916
6097
|
disabled: pending || !name.trim() || !slug.trim(),
|
|
6917
6098
|
"aria-busy": pending || void 0,
|
|
6918
|
-
children: /* @__PURE__ */
|
|
6099
|
+
children: /* @__PURE__ */ jsx49(Busy, { busy: pending, label: t("common.working"), children: t("organization.create.submit") })
|
|
6919
6100
|
}
|
|
6920
6101
|
)
|
|
6921
6102
|
] })
|
|
@@ -6923,8 +6104,8 @@ function CreateOrganization({ onCreated, title } = {}) {
|
|
|
6923
6104
|
}
|
|
6924
6105
|
|
|
6925
6106
|
// src/components/organization/OrganizationModal.tsx
|
|
6926
|
-
import * as
|
|
6927
|
-
import { jsx as
|
|
6107
|
+
import * as React43 from "react";
|
|
6108
|
+
import { jsx as jsx50, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
6928
6109
|
function OrganizationModal({
|
|
6929
6110
|
title,
|
|
6930
6111
|
onClose,
|
|
@@ -6932,8 +6113,8 @@ function OrganizationModal({
|
|
|
6932
6113
|
children
|
|
6933
6114
|
}) {
|
|
6934
6115
|
const t = useT();
|
|
6935
|
-
const titleId =
|
|
6936
|
-
return /* @__PURE__ */
|
|
6116
|
+
const titleId = React43.useId();
|
|
6117
|
+
return /* @__PURE__ */ jsxs44(
|
|
6937
6118
|
ModalSurface,
|
|
6938
6119
|
{
|
|
6939
6120
|
overlayClassName: "ba-organization-overlay",
|
|
@@ -6942,9 +6123,9 @@ function OrganizationModal({
|
|
|
6942
6123
|
returnFocusRef,
|
|
6943
6124
|
onClose,
|
|
6944
6125
|
children: [
|
|
6945
|
-
/* @__PURE__ */
|
|
6946
|
-
/* @__PURE__ */
|
|
6947
|
-
/* @__PURE__ */
|
|
6126
|
+
/* @__PURE__ */ jsxs44("header", { className: "ba-organization-modal-header", children: [
|
|
6127
|
+
/* @__PURE__ */ jsx50("h2", { id: titleId, className: "ba-title", children: title }),
|
|
6128
|
+
/* @__PURE__ */ jsx50(
|
|
6948
6129
|
"button",
|
|
6949
6130
|
{
|
|
6950
6131
|
className: "ba-profile-close",
|
|
@@ -6956,26 +6137,26 @@ function OrganizationModal({
|
|
|
6956
6137
|
}
|
|
6957
6138
|
)
|
|
6958
6139
|
] }),
|
|
6959
|
-
/* @__PURE__ */
|
|
6140
|
+
/* @__PURE__ */ jsx50("div", { className: "ba-organization-modal-body", children })
|
|
6960
6141
|
]
|
|
6961
6142
|
}
|
|
6962
6143
|
);
|
|
6963
6144
|
}
|
|
6964
6145
|
|
|
6965
6146
|
// src/components/organization/use-organizations-resource.ts
|
|
6966
|
-
import * as
|
|
6147
|
+
import * as React44 from "react";
|
|
6967
6148
|
function useOrganizationsResource(enabled = true) {
|
|
6968
6149
|
const api = useAuthClient().organization;
|
|
6969
|
-
const apiRef =
|
|
6150
|
+
const apiRef = React44.useRef(api);
|
|
6970
6151
|
apiRef.current = api;
|
|
6971
6152
|
const { user, isLoaded, isSignedIn } = useUser();
|
|
6972
6153
|
const t = useT();
|
|
6973
6154
|
const toServerError = useServerError();
|
|
6974
|
-
const [organizations, setOrganizations] =
|
|
6975
|
-
const [error, setError] =
|
|
6976
|
-
const requestRef =
|
|
6155
|
+
const [organizations, setOrganizations] = React44.useState(null);
|
|
6156
|
+
const [error, setError] = React44.useState(null);
|
|
6157
|
+
const requestRef = React44.useRef(0);
|
|
6977
6158
|
const identity = user?.id ?? null;
|
|
6978
|
-
const refresh =
|
|
6159
|
+
const refresh = React44.useCallback(async () => {
|
|
6979
6160
|
const token = ++requestRef.current;
|
|
6980
6161
|
if (!enabled || !identity || !isSignedIn) {
|
|
6981
6162
|
setOrganizations([]);
|
|
@@ -6995,7 +6176,7 @@ function useOrganizationsResource(enabled = true) {
|
|
|
6995
6176
|
if (token === requestRef.current) setError(t("organization.error.load"));
|
|
6996
6177
|
}
|
|
6997
6178
|
}, [enabled, identity, isSignedIn, t, toServerError]);
|
|
6998
|
-
|
|
6179
|
+
React44.useEffect(() => {
|
|
6999
6180
|
setOrganizations(null);
|
|
7000
6181
|
setError(null);
|
|
7001
6182
|
if (!isLoaded) return;
|
|
@@ -7013,11 +6194,11 @@ function useOrganizationsResource(enabled = true) {
|
|
|
7013
6194
|
}
|
|
7014
6195
|
|
|
7015
6196
|
// src/components/OrganizationProfile.tsx
|
|
7016
|
-
import * as
|
|
6197
|
+
import * as React49 from "react";
|
|
7017
6198
|
|
|
7018
6199
|
// src/components/organization/DangerSection.tsx
|
|
7019
|
-
import * as
|
|
7020
|
-
import { jsx as
|
|
6200
|
+
import * as React45 from "react";
|
|
6201
|
+
import { jsx as jsx51, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
7021
6202
|
function DangerSection({
|
|
7022
6203
|
organization,
|
|
7023
6204
|
membership,
|
|
@@ -7028,7 +6209,7 @@ function DangerSection({
|
|
|
7028
6209
|
const api = useAuthClient().organization;
|
|
7029
6210
|
const session = useSession();
|
|
7030
6211
|
const { pending, error, run } = useSubmitAction();
|
|
7031
|
-
const [confirmation, setConfirmation] =
|
|
6212
|
+
const [confirmation, setConfirmation] = React45.useState("");
|
|
7032
6213
|
const isOwner = hasOrganizationRole(membership, "owner");
|
|
7033
6214
|
const confirmed = confirmation.trim().toLowerCase() === organization.slug.toLowerCase();
|
|
7034
6215
|
const leave = () => {
|
|
@@ -7058,43 +6239,43 @@ function DangerSection({
|
|
|
7058
6239
|
}
|
|
7059
6240
|
);
|
|
7060
6241
|
};
|
|
7061
|
-
return /* @__PURE__ */
|
|
7062
|
-
/* @__PURE__ */
|
|
7063
|
-
/* @__PURE__ */
|
|
7064
|
-
/* @__PURE__ */
|
|
6242
|
+
return /* @__PURE__ */ jsxs45("section", { className: "ba-organization-section ba-organization-danger", children: [
|
|
6243
|
+
/* @__PURE__ */ jsxs45("header", { className: "ba-organization-section-header", children: [
|
|
6244
|
+
/* @__PURE__ */ jsx51("h3", { className: "ba-title", children: t("organization.profile.danger.title") }),
|
|
6245
|
+
/* @__PURE__ */ jsx51("p", { className: "ba-muted", children: t("organization.profile.danger.description") })
|
|
7065
6246
|
] }),
|
|
7066
|
-
/* @__PURE__ */
|
|
7067
|
-
/* @__PURE__ */
|
|
7068
|
-
/* @__PURE__ */
|
|
7069
|
-
/* @__PURE__ */
|
|
6247
|
+
/* @__PURE__ */ jsxs45("div", { className: "ba-organization-danger-action", children: [
|
|
6248
|
+
/* @__PURE__ */ jsx51("strong", { children: t("organization.profile.danger.leaveTitle") }),
|
|
6249
|
+
/* @__PURE__ */ jsx51("p", { className: "ba-muted", children: isOwner ? t("organization.profile.danger.ownerLeaveHint") : t("organization.profile.danger.leaveHint") }),
|
|
6250
|
+
/* @__PURE__ */ jsx51("button", { className: "ba-button ba-button-secondary", type: "button", disabled: pending, onClick: leave, children: t("organization.profile.danger.leave") })
|
|
7070
6251
|
] }),
|
|
7071
|
-
isOwner && /* @__PURE__ */
|
|
7072
|
-
/* @__PURE__ */
|
|
7073
|
-
/* @__PURE__ */
|
|
7074
|
-
/* @__PURE__ */
|
|
6252
|
+
isOwner && /* @__PURE__ */ jsxs45("form", { method: "post", className: "ba-organization-danger-action ba-organization-delete", onSubmit: remove, children: [
|
|
6253
|
+
/* @__PURE__ */ jsx51("strong", { children: t("organization.profile.danger.deleteTitle") }),
|
|
6254
|
+
/* @__PURE__ */ jsx51("p", { className: "ba-muted", children: t("organization.profile.danger.deleteHint") }),
|
|
6255
|
+
/* @__PURE__ */ jsxs45("label", { className: "ba-label", children: [
|
|
7075
6256
|
t("organization.profile.danger.deleteConfirm"),
|
|
7076
6257
|
" ",
|
|
7077
|
-
/* @__PURE__ */
|
|
7078
|
-
/* @__PURE__ */
|
|
6258
|
+
/* @__PURE__ */ jsx51(Bidi, { children: organization.slug }),
|
|
6259
|
+
/* @__PURE__ */ jsx51("input", { className: "ba-input", dir: "ltr", value: confirmation, onChange: (event) => setConfirmation(event.target.value), autoComplete: "off", required: true })
|
|
7079
6260
|
] }),
|
|
7080
|
-
/* @__PURE__ */
|
|
6261
|
+
/* @__PURE__ */ jsx51(
|
|
7081
6262
|
"button",
|
|
7082
6263
|
{
|
|
7083
6264
|
className: "ba-button ba-danger-button",
|
|
7084
6265
|
type: "submit",
|
|
7085
6266
|
disabled: pending || !confirmed,
|
|
7086
6267
|
"aria-busy": pending || void 0,
|
|
7087
|
-
children: /* @__PURE__ */
|
|
6268
|
+
children: /* @__PURE__ */ jsx51(Busy, { busy: pending, label: t("common.working"), children: t("organization.profile.danger.delete") })
|
|
7088
6269
|
}
|
|
7089
6270
|
)
|
|
7090
6271
|
] }),
|
|
7091
|
-
/* @__PURE__ */
|
|
6272
|
+
/* @__PURE__ */ jsx51(FormError, { children: error })
|
|
7092
6273
|
] });
|
|
7093
6274
|
}
|
|
7094
6275
|
|
|
7095
6276
|
// src/components/organization/GeneralSection.tsx
|
|
7096
|
-
import * as
|
|
7097
|
-
import { jsx as
|
|
6277
|
+
import * as React46 from "react";
|
|
6278
|
+
import { jsx as jsx52, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
7098
6279
|
function GeneralSection({
|
|
7099
6280
|
organization,
|
|
7100
6281
|
canManage,
|
|
@@ -7103,25 +6284,25 @@ function GeneralSection({
|
|
|
7103
6284
|
const t = useT();
|
|
7104
6285
|
const api = useAuthClient().organization;
|
|
7105
6286
|
const { pending, error, run } = useSubmitAction();
|
|
7106
|
-
const [name, setName] =
|
|
7107
|
-
const [slug, setSlug] =
|
|
7108
|
-
const [logo, setLogo] =
|
|
7109
|
-
|
|
6287
|
+
const [name, setName] = React46.useState(organization.name);
|
|
6288
|
+
const [slug, setSlug] = React46.useState(organization.slug);
|
|
6289
|
+
const [logo, setLogo] = React46.useState(organization.logo ?? "");
|
|
6290
|
+
React46.useEffect(() => {
|
|
7110
6291
|
setName(organization.name);
|
|
7111
6292
|
setSlug(organization.slug);
|
|
7112
6293
|
setLogo(organization.logo ?? "");
|
|
7113
6294
|
}, [organization.id, organization.logo, organization.name, organization.slug]);
|
|
7114
6295
|
if (!canManage) {
|
|
7115
|
-
return /* @__PURE__ */
|
|
7116
|
-
/* @__PURE__ */
|
|
7117
|
-
/* @__PURE__ */
|
|
7118
|
-
/* @__PURE__ */
|
|
7119
|
-
/* @__PURE__ */
|
|
7120
|
-
/* @__PURE__ */
|
|
6296
|
+
return /* @__PURE__ */ jsxs46("section", { className: "ba-organization-section", children: [
|
|
6297
|
+
/* @__PURE__ */ jsx52("p", { className: "ba-muted", children: t("organization.profile.general.readOnly") }),
|
|
6298
|
+
/* @__PURE__ */ jsxs46("dl", { className: "ba-organization-facts", children: [
|
|
6299
|
+
/* @__PURE__ */ jsxs46("div", { children: [
|
|
6300
|
+
/* @__PURE__ */ jsx52("dt", { children: t("organization.create.name") }),
|
|
6301
|
+
/* @__PURE__ */ jsx52("dd", { children: organization.name })
|
|
7121
6302
|
] }),
|
|
7122
|
-
/* @__PURE__ */
|
|
7123
|
-
/* @__PURE__ */
|
|
7124
|
-
/* @__PURE__ */
|
|
6303
|
+
/* @__PURE__ */ jsxs46("div", { children: [
|
|
6304
|
+
/* @__PURE__ */ jsx52("dt", { children: t("organization.create.slug") }),
|
|
6305
|
+
/* @__PURE__ */ jsx52("dd", { children: /* @__PURE__ */ jsx52(Bidi, { children: organization.slug }) })
|
|
7125
6306
|
] })
|
|
7126
6307
|
] })
|
|
7127
6308
|
] });
|
|
@@ -7139,19 +6320,19 @@ function GeneralSection({
|
|
|
7139
6320
|
}
|
|
7140
6321
|
);
|
|
7141
6322
|
};
|
|
7142
|
-
return /* @__PURE__ */
|
|
7143
|
-
/* @__PURE__ */
|
|
7144
|
-
/* @__PURE__ */
|
|
7145
|
-
/* @__PURE__ */
|
|
6323
|
+
return /* @__PURE__ */ jsxs46("section", { className: "ba-organization-section", children: [
|
|
6324
|
+
/* @__PURE__ */ jsxs46("header", { className: "ba-organization-section-header", children: [
|
|
6325
|
+
/* @__PURE__ */ jsx52("h3", { className: "ba-title", children: t("organization.profile.general.title") }),
|
|
6326
|
+
/* @__PURE__ */ jsx52("p", { className: "ba-muted", children: t("organization.profile.general.description") })
|
|
7146
6327
|
] }),
|
|
7147
|
-
/* @__PURE__ */
|
|
7148
|
-
/* @__PURE__ */
|
|
6328
|
+
/* @__PURE__ */ jsxs46("form", { method: "post", className: "ba-fields", onSubmit: submit, children: [
|
|
6329
|
+
/* @__PURE__ */ jsxs46("label", { className: "ba-label", children: [
|
|
7149
6330
|
t("organization.create.name"),
|
|
7150
|
-
/* @__PURE__ */
|
|
6331
|
+
/* @__PURE__ */ jsx52("input", { className: "ba-input", value: name, onChange: (event) => setName(event.target.value), required: true })
|
|
7151
6332
|
] }),
|
|
7152
|
-
/* @__PURE__ */
|
|
6333
|
+
/* @__PURE__ */ jsxs46("label", { className: "ba-label", children: [
|
|
7153
6334
|
t("organization.create.slug"),
|
|
7154
|
-
/* @__PURE__ */
|
|
6335
|
+
/* @__PURE__ */ jsx52(
|
|
7155
6336
|
"input",
|
|
7156
6337
|
{
|
|
7157
6338
|
className: "ba-input",
|
|
@@ -7163,19 +6344,19 @@ function GeneralSection({
|
|
|
7163
6344
|
}
|
|
7164
6345
|
)
|
|
7165
6346
|
] }),
|
|
7166
|
-
/* @__PURE__ */
|
|
6347
|
+
/* @__PURE__ */ jsxs46("label", { className: "ba-label", children: [
|
|
7167
6348
|
t("organization.create.logo"),
|
|
7168
|
-
/* @__PURE__ */
|
|
6349
|
+
/* @__PURE__ */ jsx52("input", { className: "ba-input", type: "url", dir: "ltr", value: logo, onChange: (event) => setLogo(event.target.value), placeholder: "https://" })
|
|
7169
6350
|
] }),
|
|
7170
|
-
/* @__PURE__ */
|
|
7171
|
-
/* @__PURE__ */
|
|
6351
|
+
/* @__PURE__ */ jsx52(FormError, { children: error }),
|
|
6352
|
+
/* @__PURE__ */ jsx52(
|
|
7172
6353
|
"button",
|
|
7173
6354
|
{
|
|
7174
6355
|
className: "ba-button ba-profile-submit",
|
|
7175
6356
|
type: "submit",
|
|
7176
6357
|
disabled: pending || !name.trim() || !slug.trim(),
|
|
7177
6358
|
"aria-busy": pending || void 0,
|
|
7178
|
-
children: /* @__PURE__ */
|
|
6359
|
+
children: /* @__PURE__ */ jsx52(Busy, { busy: pending, label: t("common.working"), children: t("organization.profile.general.save") })
|
|
7179
6360
|
}
|
|
7180
6361
|
)
|
|
7181
6362
|
] })
|
|
@@ -7183,7 +6364,7 @@ function GeneralSection({
|
|
|
7183
6364
|
}
|
|
7184
6365
|
|
|
7185
6366
|
// src/components/organization/InvitationsSection.tsx
|
|
7186
|
-
import * as
|
|
6367
|
+
import * as React48 from "react";
|
|
7187
6368
|
|
|
7188
6369
|
// src/components/organization/role-label.ts
|
|
7189
6370
|
function organizationRoleLabel(role, t) {
|
|
@@ -7195,15 +6376,15 @@ function organizationRoleLabel(role, t) {
|
|
|
7195
6376
|
}
|
|
7196
6377
|
|
|
7197
6378
|
// src/components/organization/use-organization-roles.ts
|
|
7198
|
-
import * as
|
|
6379
|
+
import * as React47 from "react";
|
|
7199
6380
|
var BUILTIN_ROLES = ["owner", "admin", "member"];
|
|
7200
6381
|
function useOrganizationRoles(organizationId) {
|
|
7201
6382
|
const api = useAuthClient().organization;
|
|
7202
|
-
const apiRef =
|
|
6383
|
+
const apiRef = React47.useRef(api);
|
|
7203
6384
|
apiRef.current = api;
|
|
7204
|
-
const [dynamic, setDynamic] =
|
|
7205
|
-
const requestRef =
|
|
7206
|
-
|
|
6385
|
+
const [dynamic, setDynamic] = React47.useState([]);
|
|
6386
|
+
const requestRef = React47.useRef(0);
|
|
6387
|
+
React47.useEffect(() => {
|
|
7207
6388
|
const token = ++requestRef.current;
|
|
7208
6389
|
setDynamic([]);
|
|
7209
6390
|
if (!organizationId) return;
|
|
@@ -7219,7 +6400,7 @@ function useOrganizationRoles(organizationId) {
|
|
|
7219
6400
|
requestRef.current += 1;
|
|
7220
6401
|
};
|
|
7221
6402
|
}, [organizationId]);
|
|
7222
|
-
const roles =
|
|
6403
|
+
const roles = React47.useMemo(() => {
|
|
7223
6404
|
const seen = /* @__PURE__ */ new Set();
|
|
7224
6405
|
const out = [];
|
|
7225
6406
|
for (const candidate of [...BUILTIN_ROLES, ...dynamic]) {
|
|
@@ -7234,7 +6415,7 @@ function useOrganizationRoles(organizationId) {
|
|
|
7234
6415
|
}
|
|
7235
6416
|
|
|
7236
6417
|
// src/components/organization/InvitationsSection.tsx
|
|
7237
|
-
import { jsx as
|
|
6418
|
+
import { jsx as jsx53, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
7238
6419
|
function InvitationsSection({
|
|
7239
6420
|
organization,
|
|
7240
6421
|
onChanged
|
|
@@ -7243,8 +6424,8 @@ function InvitationsSection({
|
|
|
7243
6424
|
const api = useAuthClient().organization;
|
|
7244
6425
|
const { pending, error, run } = useSubmitAction();
|
|
7245
6426
|
const { roles } = useOrganizationRoles(organization.id);
|
|
7246
|
-
const [email, setEmail] =
|
|
7247
|
-
const [role, setRole] =
|
|
6427
|
+
const [email, setEmail] = React48.useState("");
|
|
6428
|
+
const [role, setRole] = React48.useState("member");
|
|
7248
6429
|
const invitations = organization.invitations.filter((invitation) => invitation.status === "pending");
|
|
7249
6430
|
const invite = (event) => {
|
|
7250
6431
|
event.preventDefault();
|
|
@@ -7266,44 +6447,44 @@ function InvitationsSection({
|
|
|
7266
6447
|
{ failure: t("organization.profile.invitations.cancelError"), onSuccess: onChanged }
|
|
7267
6448
|
);
|
|
7268
6449
|
};
|
|
7269
|
-
return /* @__PURE__ */
|
|
7270
|
-
/* @__PURE__ */
|
|
7271
|
-
/* @__PURE__ */
|
|
7272
|
-
/* @__PURE__ */
|
|
6450
|
+
return /* @__PURE__ */ jsxs47("section", { className: "ba-organization-section", children: [
|
|
6451
|
+
/* @__PURE__ */ jsxs47("header", { className: "ba-organization-section-header", children: [
|
|
6452
|
+
/* @__PURE__ */ jsx53("h3", { className: "ba-title", children: t("organization.profile.invitations.title") }),
|
|
6453
|
+
/* @__PURE__ */ jsx53("p", { className: "ba-muted", children: t("organization.profile.invitations.description") })
|
|
7273
6454
|
] }),
|
|
7274
|
-
/* @__PURE__ */
|
|
7275
|
-
/* @__PURE__ */
|
|
6455
|
+
/* @__PURE__ */ jsxs47("form", { method: "post", className: "ba-organization-invite-form", onSubmit: invite, children: [
|
|
6456
|
+
/* @__PURE__ */ jsxs47("label", { className: "ba-label", children: [
|
|
7276
6457
|
t("organization.profile.invitations.email"),
|
|
7277
|
-
/* @__PURE__ */
|
|
6458
|
+
/* @__PURE__ */ jsx53("input", { className: "ba-input", type: "email", dir: "ltr", value: email, onChange: (event) => setEmail(event.target.value), required: true })
|
|
7278
6459
|
] }),
|
|
7279
|
-
/* @__PURE__ */
|
|
6460
|
+
/* @__PURE__ */ jsxs47("label", { className: "ba-label", children: [
|
|
7280
6461
|
t("organization.profile.members.role"),
|
|
7281
|
-
/* @__PURE__ */
|
|
6462
|
+
/* @__PURE__ */ jsx53("select", { className: "ba-input", value: role, onChange: (event) => setRole(event.target.value), children: roles.map((option) => /* @__PURE__ */ jsx53("option", { value: option, children: organizationRoleLabel(option, t) }, option)) })
|
|
7282
6463
|
] }),
|
|
7283
|
-
/* @__PURE__ */
|
|
6464
|
+
/* @__PURE__ */ jsx53(
|
|
7284
6465
|
"button",
|
|
7285
6466
|
{
|
|
7286
6467
|
className: "ba-button",
|
|
7287
6468
|
type: "submit",
|
|
7288
6469
|
disabled: pending || !email.trim(),
|
|
7289
6470
|
"aria-busy": pending || void 0,
|
|
7290
|
-
children: /* @__PURE__ */
|
|
6471
|
+
children: /* @__PURE__ */ jsx53(Busy, { busy: pending, label: t("common.working"), children: t("organization.profile.invitations.invite") })
|
|
7291
6472
|
}
|
|
7292
6473
|
)
|
|
7293
6474
|
] }),
|
|
7294
|
-
/* @__PURE__ */
|
|
7295
|
-
invitations.length === 0 ? /* @__PURE__ */
|
|
7296
|
-
/* @__PURE__ */
|
|
7297
|
-
/* @__PURE__ */
|
|
7298
|
-
/* @__PURE__ */
|
|
6475
|
+
/* @__PURE__ */ jsx53(FormError, { children: error }),
|
|
6476
|
+
invitations.length === 0 ? /* @__PURE__ */ jsx53("p", { className: "ba-muted", children: t("organization.profile.invitations.empty") }) : /* @__PURE__ */ jsx53("ul", { className: "ba-organization-list", children: invitations.map((invitation) => /* @__PURE__ */ jsxs47("li", { className: "ba-organization-invitation", children: [
|
|
6477
|
+
/* @__PURE__ */ jsxs47("span", { children: [
|
|
6478
|
+
/* @__PURE__ */ jsx53("strong", { children: /* @__PURE__ */ jsx53(Bidi, { children: invitation.email }) }),
|
|
6479
|
+
/* @__PURE__ */ jsx53("small", { children: organizationRoleLabel(invitation.role, t) })
|
|
7299
6480
|
] }),
|
|
7300
|
-
/* @__PURE__ */
|
|
6481
|
+
/* @__PURE__ */ jsx53("button", { className: "ba-link-button ba-danger", type: "button", disabled: pending, onClick: () => cancel(invitation), children: t("organization.profile.invitations.cancel") })
|
|
7301
6482
|
] }, invitation.id)) })
|
|
7302
6483
|
] });
|
|
7303
6484
|
}
|
|
7304
6485
|
|
|
7305
6486
|
// src/components/organization/MembersSection.tsx
|
|
7306
|
-
import { jsx as
|
|
6487
|
+
import { jsx as jsx54, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
7307
6488
|
function MembersSection({
|
|
7308
6489
|
organization,
|
|
7309
6490
|
userId,
|
|
@@ -7330,27 +6511,27 @@ function MembersSection({
|
|
|
7330
6511
|
{ failure: t("organization.profile.members.removeError"), onSuccess: onChanged }
|
|
7331
6512
|
);
|
|
7332
6513
|
};
|
|
7333
|
-
return /* @__PURE__ */
|
|
7334
|
-
/* @__PURE__ */
|
|
7335
|
-
/* @__PURE__ */
|
|
7336
|
-
/* @__PURE__ */
|
|
6514
|
+
return /* @__PURE__ */ jsxs48("section", { className: "ba-organization-section", children: [
|
|
6515
|
+
/* @__PURE__ */ jsxs48("header", { className: "ba-organization-section-header", children: [
|
|
6516
|
+
/* @__PURE__ */ jsx54("h3", { className: "ba-title", children: t("organization.profile.members.title") }),
|
|
6517
|
+
/* @__PURE__ */ jsx54("p", { className: "ba-muted", children: t("organization.profile.members.description") })
|
|
7337
6518
|
] }),
|
|
7338
|
-
/* @__PURE__ */
|
|
7339
|
-
/* @__PURE__ */
|
|
6519
|
+
/* @__PURE__ */ jsx54(FormError, { children: error }),
|
|
6520
|
+
/* @__PURE__ */ jsx54("ul", { className: "ba-organization-list", children: organization.members.map((member) => {
|
|
7340
6521
|
const primaryRole = organizationRoles(member.role)[0] ?? member.role;
|
|
7341
6522
|
const isCurrent = member.userId === userId;
|
|
7342
|
-
return /* @__PURE__ */
|
|
7343
|
-
/* @__PURE__ */
|
|
7344
|
-
/* @__PURE__ */
|
|
7345
|
-
/* @__PURE__ */
|
|
6523
|
+
return /* @__PURE__ */ jsxs48("li", { className: "ba-organization-member", children: [
|
|
6524
|
+
/* @__PURE__ */ jsx54("span", { className: "ba-organization-avatar", "aria-hidden": "true", children: member.user.name.trim().charAt(0).toUpperCase() || "?" }),
|
|
6525
|
+
/* @__PURE__ */ jsxs48("span", { className: "ba-organization-member-copy", children: [
|
|
6526
|
+
/* @__PURE__ */ jsxs48("strong", { children: [
|
|
7346
6527
|
member.user.name,
|
|
7347
6528
|
isCurrent ? ` ${t("organization.profile.members.you")}` : ""
|
|
7348
6529
|
] }),
|
|
7349
|
-
/* @__PURE__ */
|
|
6530
|
+
/* @__PURE__ */ jsx54("small", { children: /* @__PURE__ */ jsx54(Bidi, { children: member.user.email }) })
|
|
7350
6531
|
] }),
|
|
7351
|
-
canManage && !isCurrent ? /* @__PURE__ */
|
|
7352
|
-
/* @__PURE__ */
|
|
7353
|
-
/* @__PURE__ */
|
|
6532
|
+
canManage && !isCurrent ? /* @__PURE__ */ jsxs48("span", { className: "ba-organization-member-actions", children: [
|
|
6533
|
+
/* @__PURE__ */ jsx54("label", { className: "ba-sr-only", htmlFor: `organization-role-${member.id}`, children: t("organization.profile.members.role") }),
|
|
6534
|
+
/* @__PURE__ */ jsx54(
|
|
7354
6535
|
"select",
|
|
7355
6536
|
{
|
|
7356
6537
|
id: `organization-role-${member.id}`,
|
|
@@ -7358,18 +6539,18 @@ function MembersSection({
|
|
|
7358
6539
|
value: primaryRole,
|
|
7359
6540
|
disabled: pending,
|
|
7360
6541
|
onChange: (event) => updateRole(member, event.target.value),
|
|
7361
|
-
children: (roles.includes(primaryRole) ? roles : [primaryRole, ...roles]).map((role) => /* @__PURE__ */
|
|
6542
|
+
children: (roles.includes(primaryRole) ? roles : [primaryRole, ...roles]).map((role) => /* @__PURE__ */ jsx54("option", { value: role, children: organizationRoleLabel(role, t) }, role))
|
|
7362
6543
|
}
|
|
7363
6544
|
),
|
|
7364
|
-
/* @__PURE__ */
|
|
7365
|
-
] }) : /* @__PURE__ */
|
|
6545
|
+
/* @__PURE__ */ jsx54("button", { className: "ba-link-button ba-danger", type: "button", disabled: pending, onClick: () => remove(member), children: t("organization.profile.members.remove") })
|
|
6546
|
+
] }) : /* @__PURE__ */ jsx54("span", { className: "ba-organization-role-label", children: organizationRoleLabel(primaryRole, t) })
|
|
7366
6547
|
] }, member.id);
|
|
7367
6548
|
}) })
|
|
7368
6549
|
] });
|
|
7369
6550
|
}
|
|
7370
6551
|
|
|
7371
6552
|
// src/components/OrganizationProfile.tsx
|
|
7372
|
-
import { jsx as
|
|
6553
|
+
import { jsx as jsx55, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
7373
6554
|
var SECTION_KEYS2 = {
|
|
7374
6555
|
general: "organization.profile.nav.general",
|
|
7375
6556
|
members: "organization.profile.nav.members",
|
|
@@ -7383,17 +6564,17 @@ function OrganizationProfile({ organizationId, defaultSection = "general", onDel
|
|
|
7383
6564
|
const { user, isLoaded, isSignedIn } = useUser();
|
|
7384
6565
|
const session = useSession();
|
|
7385
6566
|
const api = useAuthClient().organization;
|
|
7386
|
-
const apiRef =
|
|
6567
|
+
const apiRef = React49.useRef(api);
|
|
7387
6568
|
apiRef.current = api;
|
|
7388
6569
|
const activeOrganizationId = session.data?.session.activeOrganizationId ?? null;
|
|
7389
6570
|
const requestedId = organizationId ?? activeOrganizationId;
|
|
7390
6571
|
const enabled = config?.organizations === true && isSignedIn;
|
|
7391
|
-
const [organization, setOrganization] =
|
|
7392
|
-
const [error, setError] =
|
|
7393
|
-
const [wasRemoved, setWasRemoved] =
|
|
7394
|
-
const [section, setSection] =
|
|
7395
|
-
const requestRef =
|
|
7396
|
-
const load =
|
|
6572
|
+
const [organization, setOrganization] = React49.useState(null);
|
|
6573
|
+
const [error, setError] = React49.useState(null);
|
|
6574
|
+
const [wasRemoved, setWasRemoved] = React49.useState(false);
|
|
6575
|
+
const [section, setSection] = React49.useState(defaultSection);
|
|
6576
|
+
const requestRef = React49.useRef(0);
|
|
6577
|
+
const load = React49.useCallback(async () => {
|
|
7397
6578
|
const token = ++requestRef.current;
|
|
7398
6579
|
if (!enabled || !requestedId) {
|
|
7399
6580
|
setOrganization(null);
|
|
@@ -7413,7 +6594,7 @@ function OrganizationProfile({ organizationId, defaultSection = "general", onDel
|
|
|
7413
6594
|
if (token === requestRef.current) setError(t("organization.profile.loadError"));
|
|
7414
6595
|
}
|
|
7415
6596
|
}, [enabled, requestedId, t, toServerError]);
|
|
7416
|
-
|
|
6597
|
+
React49.useEffect(() => {
|
|
7417
6598
|
setOrganization(null);
|
|
7418
6599
|
setError(null);
|
|
7419
6600
|
setWasRemoved(false);
|
|
@@ -7422,20 +6603,20 @@ function OrganizationProfile({ organizationId, defaultSection = "general", onDel
|
|
|
7422
6603
|
requestRef.current += 1;
|
|
7423
6604
|
};
|
|
7424
6605
|
}, [load]);
|
|
7425
|
-
if (configLoading || !isLoaded) return /* @__PURE__ */
|
|
6606
|
+
if (configLoading || !isLoaded) return /* @__PURE__ */ jsx55("div", { className: "ba-skeleton", "aria-label": t("organization.loading") });
|
|
7426
6607
|
if (config?.organizations !== true) return null;
|
|
7427
|
-
if (!isSignedIn || !user) return /* @__PURE__ */
|
|
7428
|
-
if (wasRemoved) return /* @__PURE__ */
|
|
7429
|
-
if (!requestedId) return /* @__PURE__ */
|
|
6608
|
+
if (!isSignedIn || !user) return /* @__PURE__ */ jsx55("p", { className: "ba-muted", children: t("organization.signedOut") });
|
|
6609
|
+
if (wasRemoved) return /* @__PURE__ */ jsx55("p", { className: "ba-muted", children: t("organization.profile.noActive") });
|
|
6610
|
+
if (!requestedId) return /* @__PURE__ */ jsx55("p", { className: "ba-muted", children: t("organization.profile.noActive") });
|
|
7430
6611
|
if (error) {
|
|
7431
|
-
return /* @__PURE__ */
|
|
7432
|
-
/* @__PURE__ */
|
|
7433
|
-
/* @__PURE__ */
|
|
6612
|
+
return /* @__PURE__ */ jsxs49("div", { className: "ba-inline-error", children: [
|
|
6613
|
+
/* @__PURE__ */ jsx55(FormError, { children: error }),
|
|
6614
|
+
/* @__PURE__ */ jsx55("button", { className: "ba-link-button", type: "button", onClick: () => void load(), children: t("organization.retry") })
|
|
7434
6615
|
] });
|
|
7435
6616
|
}
|
|
7436
|
-
if (!organization) return /* @__PURE__ */
|
|
6617
|
+
if (!organization) return /* @__PURE__ */ jsx55("div", { className: "ba-skeleton", "aria-label": t("organization.loading") });
|
|
7437
6618
|
const membership = organization.members.find((member) => member.userId === user.id);
|
|
7438
|
-
if (!membership) return /* @__PURE__ */
|
|
6619
|
+
if (!membership) return /* @__PURE__ */ jsx55("p", { className: "ba-muted", children: t("organization.profile.notMember") });
|
|
7439
6620
|
const canManage = canManageOrganization(membership);
|
|
7440
6621
|
const visibleSections = canManage ? ["general", "members", "invitations", "danger"] : ["general", "members", "danger"];
|
|
7441
6622
|
const activeSection = visibleSections.includes(section) ? section : "general";
|
|
@@ -7444,16 +6625,16 @@ function OrganizationProfile({ organizationId, defaultSection = "general", onDel
|
|
|
7444
6625
|
setOrganization(null);
|
|
7445
6626
|
callback?.(removedOrganization);
|
|
7446
6627
|
};
|
|
7447
|
-
return /* @__PURE__ */
|
|
7448
|
-
/* @__PURE__ */
|
|
7449
|
-
/* @__PURE__ */
|
|
7450
|
-
/* @__PURE__ */
|
|
7451
|
-
/* @__PURE__ */
|
|
7452
|
-
/* @__PURE__ */
|
|
6628
|
+
return /* @__PURE__ */ jsxs49("article", { className: "ba-organization-profile", children: [
|
|
6629
|
+
/* @__PURE__ */ jsxs49("header", { className: "ba-organization-profile-heading", children: [
|
|
6630
|
+
/* @__PURE__ */ jsx55("span", { className: "ba-organization-avatar ba-organization-avatar-large", "aria-hidden": "true", children: organization.name.trim().charAt(0).toUpperCase() || "?" }),
|
|
6631
|
+
/* @__PURE__ */ jsxs49("span", { children: [
|
|
6632
|
+
/* @__PURE__ */ jsx55("h2", { className: "ba-title", children: organization.name }),
|
|
6633
|
+
/* @__PURE__ */ jsx55("p", { className: "ba-muted", children: organization.slug })
|
|
7453
6634
|
] })
|
|
7454
6635
|
] }),
|
|
7455
|
-
/* @__PURE__ */
|
|
7456
|
-
/* @__PURE__ */
|
|
6636
|
+
/* @__PURE__ */ jsxs49("div", { className: "ba-organization-profile-layout", children: [
|
|
6637
|
+
/* @__PURE__ */ jsx55("nav", { className: "ba-organization-profile-nav", "aria-label": t("organization.profile.nav.label"), children: visibleSections.map((item) => /* @__PURE__ */ jsx55(
|
|
7457
6638
|
"button",
|
|
7458
6639
|
{
|
|
7459
6640
|
className: "ba-profile-nav-item",
|
|
@@ -7464,11 +6645,11 @@ function OrganizationProfile({ organizationId, defaultSection = "general", onDel
|
|
|
7464
6645
|
},
|
|
7465
6646
|
item
|
|
7466
6647
|
)) }),
|
|
7467
|
-
/* @__PURE__ */
|
|
7468
|
-
activeSection === "general" && /* @__PURE__ */
|
|
7469
|
-
activeSection === "members" && /* @__PURE__ */
|
|
7470
|
-
activeSection === "invitations" && /* @__PURE__ */
|
|
7471
|
-
activeSection === "danger" && /* @__PURE__ */
|
|
6648
|
+
/* @__PURE__ */ jsxs49("div", { className: "ba-organization-profile-content", children: [
|
|
6649
|
+
activeSection === "general" && /* @__PURE__ */ jsx55(GeneralSection, { organization, canManage, onChanged: load }),
|
|
6650
|
+
activeSection === "members" && /* @__PURE__ */ jsx55(MembersSection, { organization, userId: user.id, canManage, onChanged: load }),
|
|
6651
|
+
activeSection === "invitations" && /* @__PURE__ */ jsx55(InvitationsSection, { organization, onChanged: load }),
|
|
6652
|
+
activeSection === "danger" && /* @__PURE__ */ jsx55(
|
|
7472
6653
|
DangerSection,
|
|
7473
6654
|
{
|
|
7474
6655
|
organization,
|
|
@@ -7483,7 +6664,7 @@ function OrganizationProfile({ organizationId, defaultSection = "general", onDel
|
|
|
7483
6664
|
}
|
|
7484
6665
|
|
|
7485
6666
|
// src/components/OrganizationSwitcher.tsx
|
|
7486
|
-
import { Fragment as Fragment14, jsx as
|
|
6667
|
+
import { Fragment as Fragment14, jsx as jsx56, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
7487
6668
|
function OrganizationSwitcher({ showPersonalWorkspace = true, onOrganizationChange } = {}) {
|
|
7488
6669
|
const t = useT();
|
|
7489
6670
|
const { config, isLoading: configLoading } = usePublicConfig();
|
|
@@ -7493,15 +6674,15 @@ function OrganizationSwitcher({ showPersonalWorkspace = true, onOrganizationChan
|
|
|
7493
6674
|
const enabled = config?.organizations === true && isSignedIn;
|
|
7494
6675
|
const { organizations, isLoading, error: loadError, refresh } = useOrganizationsResource(enabled);
|
|
7495
6676
|
const { pending, error, run } = useSubmitAction();
|
|
7496
|
-
const [open, setOpen] =
|
|
7497
|
-
const [dialog, setDialog] =
|
|
7498
|
-
const rootRef =
|
|
7499
|
-
const triggerRef =
|
|
7500
|
-
const menuRef =
|
|
7501
|
-
const menuId =
|
|
6677
|
+
const [open, setOpen] = React50.useState(false);
|
|
6678
|
+
const [dialog, setDialog] = React50.useState(null);
|
|
6679
|
+
const rootRef = React50.useRef(null);
|
|
6680
|
+
const triggerRef = React50.useRef(null);
|
|
6681
|
+
const menuRef = React50.useRef(null);
|
|
6682
|
+
const menuId = React50.useId();
|
|
7502
6683
|
const activeId = session.data?.session.activeOrganizationId ?? null;
|
|
7503
6684
|
const active = organizations?.find((organization) => organization.id === activeId) ?? null;
|
|
7504
|
-
|
|
6685
|
+
React50.useEffect(() => {
|
|
7505
6686
|
if (!open) return;
|
|
7506
6687
|
const onPointerDown = (event) => {
|
|
7507
6688
|
if (!rootRef.current?.contains(event.target)) setOpen(false);
|
|
@@ -7516,9 +6697,9 @@ function OrganizationSwitcher({ showPersonalWorkspace = true, onOrganizationChan
|
|
|
7516
6697
|
document.removeEventListener("keydown", onKeyDown);
|
|
7517
6698
|
};
|
|
7518
6699
|
}, [open]);
|
|
7519
|
-
if (configLoading || !isLoaded) return /* @__PURE__ */
|
|
6700
|
+
if (configLoading || !isLoaded) return /* @__PURE__ */ jsx56("div", { className: "ba-skeleton ba-organization-switcher-skeleton", "aria-label": t("organization.loading") });
|
|
7520
6701
|
if (config?.organizations !== true) return null;
|
|
7521
|
-
if (!isSignedIn) return /* @__PURE__ */
|
|
6702
|
+
if (!isSignedIn) return /* @__PURE__ */ jsx56("p", { className: "ba-muted", children: t("organization.signedOut") });
|
|
7522
6703
|
const select = (organization) => {
|
|
7523
6704
|
void run(
|
|
7524
6705
|
() => api.setActive({ organizationId: organization?.id ?? null }),
|
|
@@ -7561,9 +6742,9 @@ function OrganizationSwitcher({ showPersonalWorkspace = true, onOrganizationChan
|
|
|
7561
6742
|
else if (event.key === "ArrowDown") items[(current + 1 + items.length) % items.length]?.focus();
|
|
7562
6743
|
else items[(current - 1 + items.length) % items.length]?.focus();
|
|
7563
6744
|
};
|
|
7564
|
-
return /* @__PURE__ */
|
|
7565
|
-
/* @__PURE__ */
|
|
7566
|
-
/* @__PURE__ */
|
|
6745
|
+
return /* @__PURE__ */ jsxs50(Fragment14, { children: [
|
|
6746
|
+
/* @__PURE__ */ jsxs50("div", { ref: rootRef, className: "ba-organization-switcher", children: [
|
|
6747
|
+
/* @__PURE__ */ jsxs50(
|
|
7567
6748
|
"button",
|
|
7568
6749
|
{
|
|
7569
6750
|
ref: triggerRef,
|
|
@@ -7580,43 +6761,43 @@ function OrganizationSwitcher({ showPersonalWorkspace = true, onOrganizationChan
|
|
|
7580
6761
|
focusMenuItem(event.key === "ArrowDown" ? "first" : "last");
|
|
7581
6762
|
},
|
|
7582
6763
|
children: [
|
|
7583
|
-
/* @__PURE__ */
|
|
7584
|
-
/* @__PURE__ */
|
|
7585
|
-
/* @__PURE__ */
|
|
6764
|
+
/* @__PURE__ */ jsx56("span", { className: "ba-organization-avatar", "aria-hidden": "true", children: active?.name.trim().charAt(0).toUpperCase() || "P" }),
|
|
6765
|
+
/* @__PURE__ */ jsx56("span", { children: active?.name ?? t("organization.personal") }),
|
|
6766
|
+
/* @__PURE__ */ jsx56("span", { "aria-hidden": "true", children: "\u2304" })
|
|
7586
6767
|
]
|
|
7587
6768
|
}
|
|
7588
6769
|
),
|
|
7589
|
-
open && /* @__PURE__ */
|
|
7590
|
-
isLoading ? /* @__PURE__ */
|
|
7591
|
-
showPersonalWorkspace && /* @__PURE__ */
|
|
7592
|
-
/* @__PURE__ */
|
|
7593
|
-
/* @__PURE__ */
|
|
6770
|
+
open && /* @__PURE__ */ jsxs50("div", { ref: menuRef, id: menuId, className: "ba-organization-menu", role: "menu", "aria-label": t("organization.switcher.label"), onKeyDown: onMenuKeyDown, children: [
|
|
6771
|
+
isLoading ? /* @__PURE__ */ jsx56("div", { className: "ba-skeleton" }) : /* @__PURE__ */ jsxs50(Fragment14, { children: [
|
|
6772
|
+
showPersonalWorkspace && /* @__PURE__ */ jsxs50("button", { className: "ba-organization-menu-item", type: "button", role: "menuitem", "aria-current": activeId === null ? "true" : void 0, disabled: pending, onClick: () => select(null), children: [
|
|
6773
|
+
/* @__PURE__ */ jsx56("span", { className: "ba-organization-avatar", "aria-hidden": "true", children: "P" }),
|
|
6774
|
+
/* @__PURE__ */ jsx56("span", { children: t("organization.personal") })
|
|
7594
6775
|
] }),
|
|
7595
|
-
organizations?.map((organization) => /* @__PURE__ */
|
|
7596
|
-
/* @__PURE__ */
|
|
7597
|
-
/* @__PURE__ */
|
|
6776
|
+
organizations?.map((organization) => /* @__PURE__ */ jsxs50("button", { className: "ba-organization-menu-item", type: "button", role: "menuitem", "aria-current": activeId === organization.id ? "true" : void 0, disabled: pending, onClick: () => select(organization), children: [
|
|
6777
|
+
/* @__PURE__ */ jsx56("span", { className: "ba-organization-avatar", "aria-hidden": "true", children: organization.name.trim().charAt(0).toUpperCase() || "?" }),
|
|
6778
|
+
/* @__PURE__ */ jsxs50("span", { children: [
|
|
7598
6779
|
organization.name,
|
|
7599
|
-
/* @__PURE__ */
|
|
6780
|
+
/* @__PURE__ */ jsx56("small", { children: organization.slug })
|
|
7600
6781
|
] })
|
|
7601
6782
|
] }, organization.id))
|
|
7602
6783
|
] }),
|
|
7603
|
-
(loadError || error) && /* @__PURE__ */
|
|
7604
|
-
/* @__PURE__ */
|
|
7605
|
-
loadError && /* @__PURE__ */
|
|
6784
|
+
(loadError || error) && /* @__PURE__ */ jsxs50("div", { className: "ba-inline-error", children: [
|
|
6785
|
+
/* @__PURE__ */ jsx56(FormError, { children: loadError ?? error }),
|
|
6786
|
+
loadError && /* @__PURE__ */ jsx56("button", { className: "ba-link-button", type: "button", onClick: () => void refresh(), children: t("organization.retry") })
|
|
7606
6787
|
] }),
|
|
7607
|
-
/* @__PURE__ */
|
|
7608
|
-
active && /* @__PURE__ */
|
|
6788
|
+
/* @__PURE__ */ jsxs50("div", { className: "ba-organization-menu-actions", children: [
|
|
6789
|
+
active && /* @__PURE__ */ jsx56("button", { className: "ba-menu-item", type: "button", role: "menuitem", onClick: () => {
|
|
7609
6790
|
setOpen(false);
|
|
7610
6791
|
setDialog("profile");
|
|
7611
6792
|
}, children: t("organization.switcher.manage") }),
|
|
7612
|
-
/* @__PURE__ */
|
|
6793
|
+
/* @__PURE__ */ jsx56("button", { className: "ba-menu-item", type: "button", role: "menuitem", onClick: () => {
|
|
7613
6794
|
setOpen(false);
|
|
7614
6795
|
setDialog("create");
|
|
7615
6796
|
}, children: t("organization.switcher.create") })
|
|
7616
6797
|
] })
|
|
7617
6798
|
] })
|
|
7618
6799
|
] }),
|
|
7619
|
-
dialog === "create" && /* @__PURE__ */
|
|
6800
|
+
dialog === "create" && /* @__PURE__ */ jsx56(OrganizationModal, { title: t("organization.create.title"), returnFocusRef: triggerRef, onClose: () => setDialog(null), children: /* @__PURE__ */ jsx56(
|
|
7620
6801
|
CreateOrganization,
|
|
7621
6802
|
{
|
|
7622
6803
|
title: null,
|
|
@@ -7630,13 +6811,13 @@ function OrganizationSwitcher({ showPersonalWorkspace = true, onOrganizationChan
|
|
|
7630
6811
|
}
|
|
7631
6812
|
}
|
|
7632
6813
|
) }),
|
|
7633
|
-
dialog === "profile" && active && /* @__PURE__ */
|
|
6814
|
+
dialog === "profile" && active && /* @__PURE__ */ jsx56(OrganizationModal, { title: t("organization.profile.title"), returnFocusRef: triggerRef, onClose: () => setDialog(null), children: /* @__PURE__ */ jsx56(OrganizationProfile, { organizationId: active.id, onDeleted: () => void afterProfileRemoval(), onLeft: () => void afterProfileRemoval() }) })
|
|
7634
6815
|
] });
|
|
7635
6816
|
}
|
|
7636
6817
|
|
|
7637
6818
|
// src/components/OrganizationList.tsx
|
|
7638
|
-
import * as
|
|
7639
|
-
import { Fragment as Fragment15, jsx as
|
|
6819
|
+
import * as React51 from "react";
|
|
6820
|
+
import { Fragment as Fragment15, jsx as jsx57, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
7640
6821
|
function OrganizationList({ onOrganizationChange } = {}) {
|
|
7641
6822
|
const t = useT();
|
|
7642
6823
|
const toServerError = useServerError();
|
|
@@ -7644,19 +6825,19 @@ function OrganizationList({ onOrganizationChange } = {}) {
|
|
|
7644
6825
|
const { user, isLoaded, isSignedIn } = useUser();
|
|
7645
6826
|
const session = useSession();
|
|
7646
6827
|
const api = useAuthClient().organization;
|
|
7647
|
-
const apiRef =
|
|
6828
|
+
const apiRef = React51.useRef(api);
|
|
7648
6829
|
apiRef.current = api;
|
|
7649
6830
|
const enabled = config?.organizations === true && isSignedIn;
|
|
7650
6831
|
const { organizations, isLoading, error: organizationError, refresh } = useOrganizationsResource(enabled);
|
|
7651
6832
|
const { pending, error, run } = useSubmitAction();
|
|
7652
|
-
const [invitations, setInvitations] =
|
|
7653
|
-
const [invitationError, setInvitationError] =
|
|
7654
|
-
const [dialog, setDialog] =
|
|
7655
|
-
const [profileId, setProfileId] =
|
|
7656
|
-
const dialogReturnFocusRef =
|
|
7657
|
-
const invitationRequestRef =
|
|
6833
|
+
const [invitations, setInvitations] = React51.useState(null);
|
|
6834
|
+
const [invitationError, setInvitationError] = React51.useState(null);
|
|
6835
|
+
const [dialog, setDialog] = React51.useState(null);
|
|
6836
|
+
const [profileId, setProfileId] = React51.useState(null);
|
|
6837
|
+
const dialogReturnFocusRef = React51.useRef(null);
|
|
6838
|
+
const invitationRequestRef = React51.useRef(0);
|
|
7658
6839
|
const activeId = session.data?.session.activeOrganizationId ?? null;
|
|
7659
|
-
const loadInvitations =
|
|
6840
|
+
const loadInvitations = React51.useCallback(async () => {
|
|
7660
6841
|
const token = ++invitationRequestRef.current;
|
|
7661
6842
|
if (!enabled) {
|
|
7662
6843
|
setInvitations([]);
|
|
@@ -7676,7 +6857,7 @@ function OrganizationList({ onOrganizationChange } = {}) {
|
|
|
7676
6857
|
if (token === invitationRequestRef.current) setInvitationError(t("organization.list.invitationsError"));
|
|
7677
6858
|
}
|
|
7678
6859
|
}, [enabled, t, toServerError]);
|
|
7679
|
-
|
|
6860
|
+
React51.useEffect(() => {
|
|
7680
6861
|
setInvitations(null);
|
|
7681
6862
|
setInvitationError(null);
|
|
7682
6863
|
if (!isLoaded) return;
|
|
@@ -7685,9 +6866,9 @@ function OrganizationList({ onOrganizationChange } = {}) {
|
|
|
7685
6866
|
invitationRequestRef.current += 1;
|
|
7686
6867
|
};
|
|
7687
6868
|
}, [isLoaded, loadInvitations, user?.id]);
|
|
7688
|
-
if (configLoading || !isLoaded) return /* @__PURE__ */
|
|
6869
|
+
if (configLoading || !isLoaded) return /* @__PURE__ */ jsx57("div", { className: "ba-skeleton", "aria-label": t("organization.loading") });
|
|
7689
6870
|
if (config?.organizations !== true) return null;
|
|
7690
|
-
if (!isSignedIn) return /* @__PURE__ */
|
|
6871
|
+
if (!isSignedIn) return /* @__PURE__ */ jsx57("p", { className: "ba-muted", children: t("organization.signedOut") });
|
|
7691
6872
|
const setActive = (organization) => {
|
|
7692
6873
|
void run(
|
|
7693
6874
|
() => api.setActive({ organizationId: organization.id }),
|
|
@@ -7728,71 +6909,71 @@ function OrganizationList({ onOrganizationChange } = {}) {
|
|
|
7728
6909
|
setDialog(null);
|
|
7729
6910
|
setProfileId(null);
|
|
7730
6911
|
};
|
|
7731
|
-
return /* @__PURE__ */
|
|
7732
|
-
/* @__PURE__ */
|
|
7733
|
-
/* @__PURE__ */
|
|
7734
|
-
/* @__PURE__ */
|
|
7735
|
-
/* @__PURE__ */
|
|
7736
|
-
/* @__PURE__ */
|
|
6912
|
+
return /* @__PURE__ */ jsxs51(Fragment15, { children: [
|
|
6913
|
+
/* @__PURE__ */ jsxs51("section", { className: "ba-organization-directory", children: [
|
|
6914
|
+
/* @__PURE__ */ jsxs51("header", { className: "ba-organization-directory-header", children: [
|
|
6915
|
+
/* @__PURE__ */ jsxs51("span", { children: [
|
|
6916
|
+
/* @__PURE__ */ jsx57("h2", { className: "ba-title", children: t("organization.list.title") }),
|
|
6917
|
+
/* @__PURE__ */ jsx57("p", { className: "ba-muted", children: t("organization.list.description") })
|
|
7737
6918
|
] }),
|
|
7738
|
-
/* @__PURE__ */
|
|
6919
|
+
/* @__PURE__ */ jsx57("button", { className: "ba-button", type: "button", onClick: (event) => {
|
|
7739
6920
|
dialogReturnFocusRef.current = event.currentTarget;
|
|
7740
6921
|
setDialog("create");
|
|
7741
6922
|
}, children: t("organization.switcher.create") })
|
|
7742
6923
|
] }),
|
|
7743
|
-
(organizationError || error) && /* @__PURE__ */
|
|
7744
|
-
/* @__PURE__ */
|
|
7745
|
-
organizationError && /* @__PURE__ */
|
|
6924
|
+
(organizationError || error) && /* @__PURE__ */ jsxs51("div", { className: "ba-inline-error", children: [
|
|
6925
|
+
/* @__PURE__ */ jsx57(FormError, { children: organizationError ?? error }),
|
|
6926
|
+
organizationError && /* @__PURE__ */ jsx57("button", { className: "ba-link-button", type: "button", onClick: () => void refresh(), children: t("organization.retry") })
|
|
7746
6927
|
] }),
|
|
7747
|
-
isLoading ? /* @__PURE__ */
|
|
7748
|
-
/* @__PURE__ */
|
|
7749
|
-
/* @__PURE__ */
|
|
7750
|
-
] }) : organizations?.length ? /* @__PURE__ */
|
|
7751
|
-
/* @__PURE__ */
|
|
7752
|
-
/* @__PURE__ */
|
|
7753
|
-
/* @__PURE__ */
|
|
7754
|
-
/* @__PURE__ */
|
|
6928
|
+
isLoading ? /* @__PURE__ */ jsxs51("div", { className: "ba-organization-card-grid", children: [
|
|
6929
|
+
/* @__PURE__ */ jsx57("div", { className: "ba-skeleton" }),
|
|
6930
|
+
/* @__PURE__ */ jsx57("div", { className: "ba-skeleton" })
|
|
6931
|
+
] }) : organizations?.length ? /* @__PURE__ */ jsx57("ul", { className: "ba-organization-card-grid", children: organizations.map((organization) => /* @__PURE__ */ jsxs51("li", { className: "ba-organization-card", children: [
|
|
6932
|
+
/* @__PURE__ */ jsx57("span", { className: "ba-organization-avatar ba-organization-avatar-large", "aria-hidden": "true", children: organization.name.trim().charAt(0).toUpperCase() || "?" }),
|
|
6933
|
+
/* @__PURE__ */ jsxs51("span", { className: "ba-organization-card-copy", children: [
|
|
6934
|
+
/* @__PURE__ */ jsx57("strong", { children: organization.name }),
|
|
6935
|
+
/* @__PURE__ */ jsx57("small", { children: /* @__PURE__ */ jsx57(Bidi, { children: organization.slug }) })
|
|
7755
6936
|
] }),
|
|
7756
|
-
activeId === organization.id && /* @__PURE__ */
|
|
7757
|
-
/* @__PURE__ */
|
|
7758
|
-
activeId !== organization.id && /* @__PURE__ */
|
|
7759
|
-
/* @__PURE__ */
|
|
6937
|
+
activeId === organization.id && /* @__PURE__ */ jsx57("span", { className: "ba-organization-active", children: t("organization.list.active") }),
|
|
6938
|
+
/* @__PURE__ */ jsxs51("span", { className: "ba-organization-card-actions", children: [
|
|
6939
|
+
activeId !== organization.id && /* @__PURE__ */ jsx57("button", { className: "ba-button ba-button-secondary", type: "button", disabled: pending, onClick: () => setActive(organization), children: t("organization.list.switch") }),
|
|
6940
|
+
/* @__PURE__ */ jsx57("button", { className: "ba-link-button", type: "button", onClick: (event) => openProfile(organization, event.currentTarget), children: t("organization.list.manage") })
|
|
7760
6941
|
] })
|
|
7761
|
-
] }, organization.id)) }) : /* @__PURE__ */
|
|
7762
|
-
/* @__PURE__ */
|
|
7763
|
-
/* @__PURE__ */
|
|
7764
|
-
/* @__PURE__ */
|
|
7765
|
-
/* @__PURE__ */
|
|
6942
|
+
] }, organization.id)) }) : /* @__PURE__ */ jsx57("p", { className: "ba-muted", children: t("organization.list.empty") }),
|
|
6943
|
+
/* @__PURE__ */ jsxs51("section", { className: "ba-organization-user-invitations", children: [
|
|
6944
|
+
/* @__PURE__ */ jsxs51("header", { className: "ba-organization-section-header", children: [
|
|
6945
|
+
/* @__PURE__ */ jsx57("h3", { className: "ba-title", children: t("organization.list.invitationsTitle") }),
|
|
6946
|
+
/* @__PURE__ */ jsx57("p", { className: "ba-muted", children: t("organization.list.invitationsDescription") })
|
|
7766
6947
|
] }),
|
|
7767
|
-
invitationError && /* @__PURE__ */
|
|
7768
|
-
/* @__PURE__ */
|
|
7769
|
-
/* @__PURE__ */
|
|
6948
|
+
invitationError && /* @__PURE__ */ jsxs51("div", { className: "ba-inline-error", children: [
|
|
6949
|
+
/* @__PURE__ */ jsx57(FormError, { children: invitationError }),
|
|
6950
|
+
/* @__PURE__ */ jsx57("button", { className: "ba-link-button", type: "button", onClick: () => void loadInvitations(), children: t("organization.retry") })
|
|
7770
6951
|
] }),
|
|
7771
|
-
invitations === null && !invitationError ? /* @__PURE__ */
|
|
7772
|
-
/* @__PURE__ */
|
|
7773
|
-
/* @__PURE__ */
|
|
7774
|
-
/* @__PURE__ */
|
|
6952
|
+
invitations === null && !invitationError ? /* @__PURE__ */ jsx57("div", { className: "ba-skeleton" }) : invitations?.length ? /* @__PURE__ */ jsx57("ul", { className: "ba-organization-list", children: invitations.map((invitation) => /* @__PURE__ */ jsxs51("li", { className: "ba-organization-invitation", children: [
|
|
6953
|
+
/* @__PURE__ */ jsxs51("span", { children: [
|
|
6954
|
+
/* @__PURE__ */ jsx57("strong", { children: invitation.organizationName }),
|
|
6955
|
+
/* @__PURE__ */ jsx57("small", { children: organizationRoleLabel(invitation.role, t) })
|
|
7775
6956
|
] }),
|
|
7776
|
-
/* @__PURE__ */
|
|
7777
|
-
/* @__PURE__ */
|
|
7778
|
-
/* @__PURE__ */
|
|
6957
|
+
/* @__PURE__ */ jsxs51("span", { className: "ba-organization-card-actions", children: [
|
|
6958
|
+
/* @__PURE__ */ jsx57("button", { className: "ba-button", type: "button", disabled: pending, onClick: () => invitationAction(invitation, "accept"), children: t("organization.list.accept") }),
|
|
6959
|
+
/* @__PURE__ */ jsx57("button", { className: "ba-link-button", type: "button", disabled: pending, onClick: () => invitationAction(invitation, "reject"), children: t("organization.list.reject") })
|
|
7779
6960
|
] })
|
|
7780
|
-
] }, invitation.id)) }) : /* @__PURE__ */
|
|
6961
|
+
] }, invitation.id)) }) : /* @__PURE__ */ jsx57("p", { className: "ba-muted", children: t("organization.list.noInvitations") })
|
|
7781
6962
|
] })
|
|
7782
6963
|
] }),
|
|
7783
|
-
dialog === "create" && /* @__PURE__ */
|
|
6964
|
+
dialog === "create" && /* @__PURE__ */ jsx57(OrganizationModal, { title: t("organization.create.title"), returnFocusRef: dialogReturnFocusRef, onClose: () => setDialog(null), children: /* @__PURE__ */ jsx57(CreateOrganization, { title: null, onCreated: () => {
|
|
7784
6965
|
void (async () => {
|
|
7785
6966
|
await refresh();
|
|
7786
6967
|
await session.refetch({ query: { disableCookieCache: true } });
|
|
7787
6968
|
setDialog(null);
|
|
7788
6969
|
})();
|
|
7789
6970
|
} }) }),
|
|
7790
|
-
dialog === "profile" && profileId && /* @__PURE__ */
|
|
6971
|
+
dialog === "profile" && profileId && /* @__PURE__ */ jsx57(OrganizationModal, { title: t("organization.profile.title"), returnFocusRef: dialogReturnFocusRef, onClose: () => setDialog(null), children: /* @__PURE__ */ jsx57(OrganizationProfile, { organizationId: profileId, onDeleted: () => void afterProfileRemoval(), onLeft: () => void afterProfileRemoval() }) })
|
|
7791
6972
|
] });
|
|
7792
6973
|
}
|
|
7793
6974
|
|
|
7794
6975
|
// src/components/GoogleOneTap.tsx
|
|
7795
|
-
import * as
|
|
6976
|
+
import * as React52 from "react";
|
|
7796
6977
|
|
|
7797
6978
|
// src/components/google-one-tap.ts
|
|
7798
6979
|
var GOOGLE_IDENTITY_SCRIPT = "https://accounts.google.com/gsi/client";
|
|
@@ -7960,11 +7141,11 @@ function GoogleOneTap({
|
|
|
7960
7141
|
const { config, isLoading: configLoading, isError: configError } = usePublicConfig();
|
|
7961
7142
|
const { user, isLoaded: sessionLoaded } = useUser();
|
|
7962
7143
|
const { signInSocial } = useSignIn();
|
|
7963
|
-
const callbacks =
|
|
7144
|
+
const callbacks = React52.useRef({ onSignedIn, onSkipped, onDismissed, onError });
|
|
7964
7145
|
callbacks.current = { onSignedIn, onSkipped, onDismissed, onError };
|
|
7965
7146
|
const googleEnabled = config?.socialProviders.includes("google") === true;
|
|
7966
7147
|
const clientId = config?.socialProviderClientIds?.google;
|
|
7967
|
-
|
|
7148
|
+
React52.useEffect(() => {
|
|
7968
7149
|
if (configLoading || !sessionLoaded) return;
|
|
7969
7150
|
if (disabled) {
|
|
7970
7151
|
callbacks.current.onSkipped?.("disabled");
|
|
@@ -8086,6 +7267,7 @@ export {
|
|
|
8086
7267
|
AuthLoaded,
|
|
8087
7268
|
AuthLoading,
|
|
8088
7269
|
AuthOwlBadge,
|
|
7270
|
+
AuthOwlBranding,
|
|
8089
7271
|
AuthOwlError,
|
|
8090
7272
|
AuthOwlProvider,
|
|
8091
7273
|
BackupCodesManager,
|