@bitbaum/accountkit 0.0.0-stage → 0.6.3

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.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +203 -2
  3. package/dist/AccountMenu.d.ts +76 -0
  4. package/dist/AccountMenu.d.ts.map +1 -0
  5. package/dist/AccountMenu.js +156 -0
  6. package/dist/AccountMenu.js.map +1 -0
  7. package/dist/SignInError.d.ts +50 -0
  8. package/dist/SignInError.d.ts.map +1 -0
  9. package/dist/SignInError.js +34 -0
  10. package/dist/SignInError.js.map +1 -0
  11. package/dist/auth/client.d.ts +19 -0
  12. package/dist/auth/client.d.ts.map +1 -0
  13. package/dist/auth/client.js +17 -0
  14. package/dist/auth/client.js.map +1 -0
  15. package/dist/auth/factor.d.ts +9 -0
  16. package/dist/auth/factor.d.ts.map +1 -0
  17. package/dist/auth/factor.js +107 -0
  18. package/dist/auth/factor.js.map +1 -0
  19. package/dist/auth/index.d.ts +6 -0
  20. package/dist/auth/index.d.ts.map +1 -0
  21. package/dist/auth/index.js +6 -0
  22. package/dist/auth/index.js.map +1 -0
  23. package/dist/auth/labels.d.ts +114 -0
  24. package/dist/auth/labels.d.ts.map +1 -0
  25. package/dist/auth/labels.js +132 -0
  26. package/dist/auth/labels.js.map +1 -0
  27. package/dist/auth/limits.d.ts +28 -0
  28. package/dist/auth/limits.d.ts.map +1 -0
  29. package/dist/auth/limits.js +90 -0
  30. package/dist/auth/limits.js.map +1 -0
  31. package/dist/auth/mail.d.ts +10 -0
  32. package/dist/auth/mail.d.ts.map +1 -0
  33. package/dist/auth/mail.js +45 -0
  34. package/dist/auth/mail.js.map +1 -0
  35. package/dist/auth/methods.d.ts +71 -0
  36. package/dist/auth/methods.d.ts.map +1 -0
  37. package/dist/auth/methods.js +92 -0
  38. package/dist/auth/methods.js.map +1 -0
  39. package/dist/auth/next.d.ts +73 -0
  40. package/dist/auth/next.d.ts.map +1 -0
  41. package/dist/auth/next.js +131 -0
  42. package/dist/auth/next.js.map +1 -0
  43. package/dist/auth/react.d.ts +174 -0
  44. package/dist/auth/react.d.ts.map +1 -0
  45. package/dist/auth/react.js +396 -0
  46. package/dist/auth/react.js.map +1 -0
  47. package/dist/auth/recovery.d.ts +17 -0
  48. package/dist/auth/recovery.d.ts.map +1 -0
  49. package/dist/auth/recovery.js +85 -0
  50. package/dist/auth/recovery.js.map +1 -0
  51. package/dist/auth/roles.d.ts +19 -0
  52. package/dist/auth/roles.d.ts.map +1 -0
  53. package/dist/auth/roles.js +29 -0
  54. package/dist/auth/roles.js.map +1 -0
  55. package/dist/auth/schema.d.ts +1923 -0
  56. package/dist/auth/schema.d.ts.map +1 -0
  57. package/dist/auth/schema.js +120 -0
  58. package/dist/auth/schema.js.map +1 -0
  59. package/dist/auth/server.d.ts +56 -0
  60. package/dist/auth/server.d.ts.map +1 -0
  61. package/dist/auth/server.js +229 -0
  62. package/dist/auth/server.js.map +1 -0
  63. package/dist/auth/translations.d.ts +9 -0
  64. package/dist/auth/translations.d.ts.map +1 -0
  65. package/dist/auth/translations.js +513 -0
  66. package/dist/auth/translations.js.map +1 -0
  67. package/dist/identity.d.ts +50 -0
  68. package/dist/identity.d.ts.map +1 -0
  69. package/dist/identity.js +76 -0
  70. package/dist/identity.js.map +1 -0
  71. package/dist/index.d.ts +4 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +4 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/orangecat.d.ts +333 -0
  76. package/dist/orangecat.d.ts.map +1 -0
  77. package/dist/orangecat.js +508 -0
  78. package/dist/orangecat.js.map +1 -0
  79. package/dist/paths.d.ts +3 -0
  80. package/dist/paths.d.ts.map +1 -0
  81. package/dist/paths.js +11 -0
  82. package/dist/paths.js.map +1 -0
  83. package/package.json +145 -4
  84. package/styles.css +383 -0
@@ -0,0 +1,513 @@
1
+ import { DEFAULT_AUTH_LABELS } from "./labels.js";
2
+ /**
3
+ * The account screens' words in every language a fleet product speaks, so a
4
+ * product passes `authLabelsFor(locale)` instead of keeping its own copy.
5
+ * Five copies of these sentences in five repositories would drift the way
6
+ * every copied list in the fleet has; one here cannot.
7
+ *
8
+ * German is written the Swiss way (ss, never ß). Romansh (Rumantsch Grischun)
9
+ * still wants a native reader's pass. A product whose roles have other names
10
+ * overrides `account.roles` and nothing else (Heidi calls its customers
11
+ * learners). The role names here are the package's generic ones.
12
+ */
13
+ const de = {
14
+ recovery: {
15
+ forgot: "Passwort vergessen?",
16
+ send: "Link zum Zurücksetzen schicken",
17
+ sent: "Falls ein Konto mit dieser Adresse wiederhergestellt werden kann, kommt bald ein Link. Prüfen Sie auch den Spamordner.",
18
+ reset: "Passwort zurücksetzen",
19
+ newPassword: "Neues Passwort",
20
+ confirmPassword: "Neues Passwort wiederholen",
21
+ mismatch: "Die Passwörter stimmen nicht überein. Geben Sie in beiden Feldern dasselbe Passwort ein.",
22
+ invalidToken: "Dieser Link ist ungültig oder abgelaufen. Fordern Sie einen neuen an.",
23
+ success: "Ihr Passwort wurde geändert. Melden Sie sich mit dem neuen Passwort an.",
24
+ },
25
+ signIn: "Anmelden",
26
+ createAccount: "Konto erstellen",
27
+ withSignin: "Weiter mit Google, Apple, GitHub, X oder Facebook",
28
+ withOrangecat: "Weiter mit OrangeCat",
29
+ withPasskey: "Mit Passkey anmelden",
30
+ withLink: "Stattdessen einen Anmeldelink per E-Mail schicken",
31
+ signUpWithLink: "Stattdessen mit einem Link per E-Mail registrieren",
32
+ orEmail: "oder mit E-Mail",
33
+ email: "E-Mail",
34
+ password: "Passwort",
35
+ passwordHint: "Mindestens 12 Zeichen. Ein langer Satz ist leichter zu merken als Sonderzeichen.",
36
+ displayName: "Anzeigename",
37
+ displayNameHint: "Freiwillig. Irgendetwas — es muss nicht Ihr echter Name sein.",
38
+ checkInbox: "Wir haben einen Link an {email} geschickt. Öffnen Sie ihn auf diesem Gerät. Er gilt 10 Minuten.",
39
+ confirmInbox: "Wir haben einen Link an {email} geschickt. Öffnen Sie ihn, um die Adresse zu bestätigen und das Konto fertig einzurichten.",
40
+ back: "Zurück",
41
+ totpPrompt: "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein.",
42
+ backupPrompt: "Geben Sie einen der Backup-Codes ein, die Sie beim Einrichten gespeichert haben.",
43
+ totpCode: "Code",
44
+ backupCode: "Backup-Code",
45
+ trustDevice: "Diesem Gerät 30 Tage lang vertrauen",
46
+ verify: "Bestätigen",
47
+ useTotp: "Stattdessen die Authenticator-App verwenden",
48
+ useBackup: "Stattdessen einen Backup-Code verwenden",
49
+ resendVerification: "Bestätigungslink nochmals schicken",
50
+ noAccount: "Noch kein Konto?",
51
+ haveAccount: "Schon ein Konto?",
52
+ errors: {
53
+ rateLimited: "Zu viele Versuche. Warten Sie ein paar Minuten und versuchen Sie es dann nochmals.",
54
+ unavailable: "Konten sind gerade nicht verfügbar. Versuchen Sie es etwas später nochmals.",
55
+ generic: "Das hat nicht geklappt. Versuchen Sie es nochmals oder wählen Sie einen anderen Weg.",
56
+ emailFirst: "Geben Sie zuerst Ihre E-Mail-Adresse ein.",
57
+ INVALID_EMAIL_OR_PASSWORD: "E-Mail und Passwort passen nicht zusammen. Prüfen Sie beides oder melden Sie sich mit einem Link an.",
58
+ EMAIL_NOT_VERIFIED: "Bestätigen Sie zuerst Ihre E-Mail-Adresse — der Link ist in Ihrem Posteingang.",
59
+ USER_ALREADY_EXISTS: "Mit dieser Adresse gibt es schon ein Konto. Melden Sie sich stattdessen an.",
60
+ USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL: "Mit dieser Adresse gibt es schon ein Konto. Melden Sie sich stattdessen an.",
61
+ PASSWORD_TOO_SHORT: "Das Passwort braucht mindestens 12 Zeichen.",
62
+ PASSWORD_TOO_LONG: "Das Passwort darf höchstens 128 Zeichen haben.",
63
+ INVALID_EMAIL: "Das sieht nicht nach einer E-Mail-Adresse aus.",
64
+ INVALID_CODE: "Dieser Code stimmt nicht oder ist abgelaufen. Nehmen Sie den neuesten.",
65
+ INVALID_TWO_FACTOR_CODE: "Dieser Code stimmt nicht oder ist abgelaufen. Nehmen Sie den neuesten.",
66
+ SESSION_EXPIRED: "Melden Sie sich zur Sicherheit erneut an, bevor Sie das ändern.",
67
+ INVALID_PASSWORD: "Dieses Passwort stimmt nicht.",
68
+ },
69
+ account: {
70
+ profile: "Profil",
71
+ noEmail: "keine — fügen Sie eine Anmeldung mit Passwort hinzu, um E-Mail zu nutzen",
72
+ unverified: "noch nicht bestätigt",
73
+ role: "Rolle",
74
+ roles: {
75
+ customer: "Kundin oder Kunde",
76
+ helper: "Helferin oder Helfer",
77
+ professional: "Fachperson",
78
+ staff: "Team",
79
+ admin: "Administration",
80
+ },
81
+ save: "Speichern",
82
+ saved: "Gespeichert.",
83
+ methods: "Wege zur Anmeldung",
84
+ methodPassword: "E-Mail und Passwort",
85
+ link: "{method} hinzufügen",
86
+ passkeys: "Passkeys",
87
+ passkeysLede: "Mit Fingerabdruck, Gesicht oder Geräte-PIN anmelden statt mit Passwort.",
88
+ passkeyDefaultName: "Passkey",
89
+ remove: "Entfernen",
90
+ addPasskey: "Passkey hinzufügen",
91
+ twoFactor: "Anmeldung in zwei Schritten",
92
+ twoFactorOn: "Ein. Bei der Anmeldung wird ein Code aus Ihrer Authenticator-App verlangt.",
93
+ twoFactorOff: "Aus. Schalten Sie sie ein, um bei jeder Anmeldung einen Code zu verlangen.",
94
+ currentPassword: "Aktuelles Passwort",
95
+ currentPasswordHint: "Nötig, wenn Ihr Konto ein Passwort hat. Ohne Passwort zuerst neu anmelden.",
96
+ scan: "Fügen Sie dieses Konto Ihrer Authenticator-App hinzu und geben Sie dann den angezeigten Code ein.",
97
+ openAuthenticator: "In der Authenticator-App öffnen",
98
+ backupCodes: "Bewahren Sie diese Backup-Codes sicher auf. Jeder funktioniert einmal, falls Sie Ihr Telefon verlieren.",
99
+ turnOn: "Einschalten",
100
+ turnOff: "Ausschalten",
101
+ setUp: "Einrichten",
102
+ leave: "Abmelden oder gehen",
103
+ signOut: "Abmelden",
104
+ deleteConfirm: "Um Ihr Konto und alles darin zu löschen, tippen Sie {word}",
105
+ deleteWord: "löschen",
106
+ delete: "Mein Konto löschen",
107
+ },
108
+ };
109
+ const fr = {
110
+ recovery: {
111
+ forgot: "Mot de passe oublié ?",
112
+ send: "Envoyer un lien de réinitialisation",
113
+ sent: "Si un compte peut être récupéré à cette adresse, un lien arrivera bientôt. Vérifiez aussi les courriers indésirables.",
114
+ reset: "Réinitialiser le mot de passe",
115
+ newPassword: "Nouveau mot de passe",
116
+ confirmPassword: "Répéter le nouveau mot de passe",
117
+ mismatch: "Les mots de passe ne correspondent pas. Saisissez le même dans les deux champs.",
118
+ invalidToken: "Ce lien est invalide ou a expiré. Demandez un nouveau lien.",
119
+ success: "Votre mot de passe a été modifié. Connectez-vous avec le nouveau mot de passe.",
120
+ },
121
+ signIn: "Se connecter",
122
+ createAccount: "Créer un compte",
123
+ withSignin: "Continuer avec Google, Apple, GitHub, X ou Facebook",
124
+ withOrangecat: "Continuer avec OrangeCat",
125
+ withPasskey: "Se connecter avec une clé d'accès",
126
+ withLink: "M'envoyer plutôt un lien de connexion par e-mail",
127
+ signUpWithLink: "S'inscrire plutôt avec un lien par e-mail",
128
+ orEmail: "ou avec un e-mail",
129
+ email: "E-mail",
130
+ password: "Mot de passe",
131
+ passwordHint: "Au moins 12 caractères. Une longue phrase se retient mieux que des symboles.",
132
+ displayName: "Nom affiché",
133
+ displayNameHint: "Facultatif. Ce que vous voulez — pas forcément votre vrai nom.",
134
+ checkInbox: "Nous avons envoyé un lien à {email}. Ouvrez-le sur cet appareil pour continuer. Il est valable 10 minutes.",
135
+ confirmInbox: "Nous avons envoyé un lien à {email}. Ouvrez-le pour confirmer votre adresse et terminer la création du compte.",
136
+ back: "Retour",
137
+ totpPrompt: "Saisissez le code à 6 chiffres de votre application d'authentification.",
138
+ backupPrompt: "Saisissez l'un des codes de secours enregistrés lors de la configuration.",
139
+ totpCode: "Code",
140
+ backupCode: "Code de secours",
141
+ trustDevice: "Faire confiance à cet appareil pendant 30 jours",
142
+ verify: "Vérifier",
143
+ useTotp: "Utiliser plutôt l'application d'authentification",
144
+ useBackup: "Utiliser plutôt un code de secours",
145
+ resendVerification: "Renvoyer le lien de confirmation",
146
+ noAccount: "Pas encore de compte ?",
147
+ haveAccount: "Vous avez déjà un compte ?",
148
+ errors: {
149
+ rateLimited: "Trop de tentatives. Attendez quelques minutes, puis réessayez.",
150
+ unavailable: "Les comptes ne sont pas disponibles pour le moment. Réessayez un peu plus tard.",
151
+ generic: "Cela n'a pas fonctionné. Réessayez, ou choisissez une autre façon de vous connecter.",
152
+ emailFirst: "Saisissez d'abord votre adresse e-mail.",
153
+ INVALID_EMAIL_OR_PASSWORD: "Cet e-mail et ce mot de passe ne correspondent pas. Vérifiez les deux, ou connectez-vous avec un lien.",
154
+ EMAIL_NOT_VERIFIED: "Confirmez d'abord votre adresse e-mail — le lien est dans votre boîte de réception.",
155
+ USER_ALREADY_EXISTS: "Un compte existe déjà avec cette adresse. Connectez-vous plutôt.",
156
+ USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL: "Un compte existe déjà avec cette adresse. Connectez-vous plutôt.",
157
+ PASSWORD_TOO_SHORT: "Le mot de passe doit compter au moins 12 caractères.",
158
+ PASSWORD_TOO_LONG: "Le mot de passe peut compter au plus 128 caractères.",
159
+ INVALID_EMAIL: "Cela ne ressemble pas à une adresse e-mail.",
160
+ INVALID_CODE: "Ce code n'est pas bon ou a expiré. Essayez le plus récent.",
161
+ INVALID_TWO_FACTOR_CODE: "Ce code n'est pas bon ou a expiré. Essayez le plus récent.",
162
+ SESSION_EXPIRED: "Par sécurité, reconnectez-vous avant de modifier ceci.",
163
+ INVALID_PASSWORD: "Ce mot de passe n'est pas bon.",
164
+ },
165
+ account: {
166
+ profile: "Profil",
167
+ noEmail: "aucun — ajoutez une connexion par mot de passe pour utiliser l'e-mail",
168
+ unverified: "pas encore confirmé",
169
+ role: "Rôle",
170
+ roles: {
171
+ customer: "Client·e",
172
+ helper: "Aide",
173
+ professional: "Professionnel·le",
174
+ staff: "Équipe",
175
+ admin: "Administration",
176
+ },
177
+ save: "Enregistrer",
178
+ saved: "Enregistré.",
179
+ methods: "Façons de se connecter",
180
+ methodPassword: "E-mail et mot de passe",
181
+ link: "Ajouter {method}",
182
+ passkeys: "Clés d'accès",
183
+ passkeysLede: "Connectez-vous avec votre empreinte, votre visage ou le code de l'appareil plutôt qu'un mot de passe.",
184
+ passkeyDefaultName: "Clé d'accès",
185
+ remove: "Retirer",
186
+ addPasskey: "Ajouter une clé d'accès",
187
+ twoFactor: "Connexion en deux étapes",
188
+ twoFactorOn: "Activée. La connexion demande un code de votre application d'authentification.",
189
+ twoFactorOff: "Désactivée. Activez-la pour demander un code à chaque connexion.",
190
+ currentPassword: "Mot de passe actuel",
191
+ currentPasswordHint: "Nécessaire si votre compte a un mot de passe. Sans mot de passe, reconnectez-vous d'abord.",
192
+ scan: "Ajoutez ce compte à votre application d'authentification, puis saisissez le code affiché.",
193
+ openAuthenticator: "Ouvrir dans l'application d'authentification",
194
+ backupCodes: "Conservez ces codes de secours en lieu sûr. Chacun fonctionne une fois si vous perdez votre téléphone.",
195
+ turnOn: "Activer",
196
+ turnOff: "Désactiver",
197
+ setUp: "Configurer",
198
+ leave: "Se déconnecter ou partir",
199
+ signOut: "Se déconnecter",
200
+ deleteConfirm: "Pour supprimer votre compte et tout son contenu, tapez {word}",
201
+ deleteWord: "supprimer",
202
+ delete: "Supprimer mon compte",
203
+ },
204
+ };
205
+ const it = {
206
+ recovery: {
207
+ forgot: "Password dimenticata?",
208
+ send: "Invia un link per reimpostarla",
209
+ sent: "Se un account può essere recuperato a questo indirizzo, riceverai presto un link. Controlla anche la posta indesiderata.",
210
+ reset: "Reimposta password",
211
+ newPassword: "Nuova password",
212
+ confirmPassword: "Ripeti la nuova password",
213
+ mismatch: "Le password non coincidono. Inserisci la stessa password in entrambi i campi.",
214
+ invalidToken: "Questo link non è valido o è scaduto. Richiedine uno nuovo.",
215
+ success: "La password è stata cambiata. Accedi con la nuova password.",
216
+ },
217
+ signIn: "Accedi",
218
+ createAccount: "Crea un account",
219
+ withSignin: "Continua con Google, Apple, GitHub, X o Facebook",
220
+ withOrangecat: "Continua con OrangeCat",
221
+ withPasskey: "Accedi con una passkey",
222
+ withLink: "Inviami invece un link di accesso via e-mail",
223
+ signUpWithLink: "Registrati invece con un link via e-mail",
224
+ orEmail: "oppure con l'e-mail",
225
+ email: "E-mail",
226
+ password: "Password",
227
+ passwordHint: "Almeno 12 caratteri. Una frase lunga si ricorda meglio dei simboli.",
228
+ displayName: "Nome visualizzato",
229
+ displayNameHint: "Facoltativo. Quello che vuoi — non deve essere il tuo vero nome.",
230
+ checkInbox: "Abbiamo inviato un link a {email}. Aprilo su questo dispositivo per continuare. Vale 10 minuti.",
231
+ confirmInbox: "Abbiamo inviato un link a {email}. Aprilo per confermare l'indirizzo e completare la creazione dell'account.",
232
+ back: "Indietro",
233
+ totpPrompt: "Inserisci il codice di 6 cifre della tua app di autenticazione.",
234
+ backupPrompt: "Inserisci uno dei codici di riserva salvati durante la configurazione.",
235
+ totpCode: "Codice",
236
+ backupCode: "Codice di riserva",
237
+ trustDevice: "Considera affidabile questo dispositivo per 30 giorni",
238
+ verify: "Verifica",
239
+ useTotp: "Usa invece l'app di autenticazione",
240
+ useBackup: "Usa invece un codice di riserva",
241
+ resendVerification: "Invia di nuovo il link di conferma",
242
+ noAccount: "Non hai ancora un account?",
243
+ haveAccount: "Hai già un account?",
244
+ errors: {
245
+ rateLimited: "Troppi tentativi. Aspetta qualche minuto, poi riprova.",
246
+ unavailable: "Gli account non sono disponibili al momento. Riprova tra poco.",
247
+ generic: "Non ha funzionato. Riprova, oppure scegli un altro modo per accedere.",
248
+ emailFirst: "Inserisci prima il tuo indirizzo e-mail.",
249
+ INVALID_EMAIL_OR_PASSWORD: "E-mail e password non corrispondono. Controlla entrambe, oppure accedi con un link.",
250
+ EMAIL_NOT_VERIFIED: "Conferma prima il tuo indirizzo e-mail — il link è nella tua casella di posta.",
251
+ USER_ALREADY_EXISTS: "Esiste già un account con questo indirizzo. Accedi invece.",
252
+ USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL: "Esiste già un account con questo indirizzo. Accedi invece.",
253
+ PASSWORD_TOO_SHORT: "La password deve avere almeno 12 caratteri.",
254
+ PASSWORD_TOO_LONG: "La password può avere al massimo 128 caratteri.",
255
+ INVALID_EMAIL: "Non sembra un indirizzo e-mail.",
256
+ INVALID_CODE: "Questo codice non è corretto o è scaduto. Prova il più recente.",
257
+ INVALID_TWO_FACTOR_CODE: "Questo codice non è corretto o è scaduto. Prova il più recente.",
258
+ SESSION_EXPIRED: "Per sicurezza, accedi di nuovo prima di modificare questo.",
259
+ INVALID_PASSWORD: "Questa password non è corretta.",
260
+ },
261
+ account: {
262
+ profile: "Profilo",
263
+ noEmail: "nessuna — aggiungi un accesso con password per usare l'e-mail",
264
+ unverified: "non ancora confermato",
265
+ role: "Ruolo",
266
+ roles: {
267
+ customer: "Cliente",
268
+ helper: "Aiuto",
269
+ professional: "Professionista",
270
+ staff: "Team",
271
+ admin: "Amministrazione",
272
+ },
273
+ save: "Salva",
274
+ saved: "Salvato.",
275
+ methods: "Modi per accedere",
276
+ methodPassword: "E-mail e password",
277
+ link: "Aggiungi {method}",
278
+ passkeys: "Passkey",
279
+ passkeysLede: "Accedi con impronta, volto o PIN del dispositivo invece che con una password.",
280
+ passkeyDefaultName: "Passkey",
281
+ remove: "Rimuovi",
282
+ addPasskey: "Aggiungi una passkey",
283
+ twoFactor: "Accesso in due passaggi",
284
+ twoFactorOn: "Attivo. L'accesso chiede un codice dalla tua app di autenticazione.",
285
+ twoFactorOff: "Disattivato. Attivalo per chiedere un codice a ogni accesso.",
286
+ currentPassword: "Password attuale",
287
+ currentPasswordHint: "Necessaria se il tuo account ha una password. Senza, accedi prima di nuovo.",
288
+ scan: "Aggiungi questo account alla tua app di autenticazione, poi inserisci il codice che mostra.",
289
+ openAuthenticator: "Apri nell'app di autenticazione",
290
+ backupCodes: "Conserva questi codici di riserva in un posto sicuro. Ognuno funziona una volta se perdi il telefono.",
291
+ turnOn: "Attiva",
292
+ turnOff: "Disattiva",
293
+ setUp: "Configura",
294
+ leave: "Esci o lascia",
295
+ signOut: "Esci",
296
+ deleteConfirm: "Per eliminare il tuo account e tutto il suo contenuto, scrivi {word}",
297
+ deleteWord: "elimina",
298
+ delete: "Elimina il mio account",
299
+ },
300
+ };
301
+ const rm = {
302
+ recovery: {
303
+ forgot: "Emblidà il pled-clav?",
304
+ send: "Trametter in link per redefinir",
305
+ sent: "Sche in conto po vegnir restabilì cun questa adressa, arriva prest in link. Controllai era il dossier da spam.",
306
+ reset: "Redefinir il pled-clav",
307
+ newPassword: "Nov pled-clav",
308
+ confirmPassword: "Repeter il nov pled-clav",
309
+ mismatch: "Ils pleds-clav na correspundan betg. Endatai il medem en omadus champs.",
310
+ invalidToken: "Quest link n’è betg valaivel u è scadì. Dumandai in nov link.",
311
+ success: "Voss pled-clav è vegnì midà. S’annunziai cun il nov pled-clav.",
312
+ },
313
+ signIn: "S'annunziar",
314
+ createAccount: "Crear in conto",
315
+ withSignin: "Cuntinuar cun Google, Apple, GitHub, X u Facebook",
316
+ withOrangecat: "Cuntinuar cun OrangeCat",
317
+ withPasskey: "S'annunziar cun ina passkey",
318
+ withLink: "Ma tramettai empè ina colliaziun d'annunzia per e-mail",
319
+ signUpWithLink: "S'registrar empè cun ina colliaziun per e-mail",
320
+ orEmail: "u cun e-mail",
321
+ email: "E-mail",
322
+ password: "Pled-clav",
323
+ passwordHint: "Almain 12 caracters. Ina frasa lunga è pli simpla da memorisar che simbols.",
324
+ displayName: "Num mussà",
325
+ displayNameHint: "Facultativ. Tge che vus vulais — i na sto betg esser voss num vair.",
326
+ checkInbox: "Nus avain tramess ina colliaziun a {email}. L'avri sin quest apparat per cuntinuar. Ella vala 10 minutas.",
327
+ confirmInbox: "Nus avain tramess ina colliaziun a {email}. L'avri per confermar l'adressa e terminar il conto.",
328
+ back: "Enavos",
329
+ totpPrompt: "Endatai il code da 6 cifras da voss app d'autentificaziun.",
330
+ backupPrompt: "Endatai in dals codes da reserva che vus avais memorisà.",
331
+ totpCode: "Code",
332
+ backupCode: "Code da reserva",
333
+ trustDevice: "Fidar da quest apparat durant 30 dis",
334
+ verify: "Confermar",
335
+ useTotp: "Utilisar empè l'app d'autentificaziun",
336
+ useBackup: "Utilisar empè in code da reserva",
337
+ resendVerification: "Trametter anc ina giada la colliaziun da conferma",
338
+ noAccount: "Anc nagin conto?",
339
+ haveAccount: "Gia in conto?",
340
+ errors: {
341
+ rateLimited: "Memia blers empruvs. Spetgai in pèr minutas e empruvai alura danovamain.",
342
+ unavailable: "Ils contos n'èn actualmain betg disponibels. Empruvai pli tard.",
343
+ generic: "Quai n'ha betg funcziunà. Empruvai danovamain u tscherni in'autra via.",
344
+ emailFirst: "Endatai l'emprim vossa adressa d'e-mail.",
345
+ INVALID_EMAIL_OR_PASSWORD: "L'e-mail ed il pled-clav na correspundan betg. Controllai omadus u s'annunziai cun ina colliaziun.",
346
+ EMAIL_NOT_VERIFIED: "Confermai l'emprim vossa adressa d'e-mail — la colliaziun è en voss inbox.",
347
+ USER_ALREADY_EXISTS: "I dat gia in conto cun questa adressa. S'annunziai empè.",
348
+ USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL: "I dat gia in conto cun questa adressa. S'annunziai empè.",
349
+ PASSWORD_TOO_SHORT: "Il pled-clav dovra almain 12 caracters.",
350
+ PASSWORD_TOO_LONG: "Il pled-clav po avair maximalmain 128 caracters.",
351
+ INVALID_EMAIL: "Quai na para betg dad esser ina adressa d'e-mail.",
352
+ INVALID_CODE: "Quest code n'è betg correct u è scadì. Empruvai il pli nov.",
353
+ INVALID_TWO_FACTOR_CODE: "Quest code n'è betg correct u è scadì. Empruvai il pli nov.",
354
+ SESSION_EXPIRED: "Per segirezza, s'annunziai danovamain avant che midar quai.",
355
+ INVALID_PASSWORD: "Quest pled-clav n'è betg correct.",
356
+ },
357
+ account: {
358
+ profile: "Profil",
359
+ noEmail: "nagina — agiuntai in'annunzia cun pled-clav per utilisar e-mail",
360
+ unverified: "anc betg confermà",
361
+ role: "Rolla",
362
+ roles: {
363
+ customer: "Cliant",
364
+ helper: "Agid",
365
+ professional: "Persuna spezialisada",
366
+ staff: "Team",
367
+ admin: "Administraziun",
368
+ },
369
+ save: "Memorisar",
370
+ saved: "Memorisà.",
371
+ methods: "Vias d'annunzia",
372
+ methodPassword: "E-mail e pled-clav",
373
+ link: "Agiuntar {method}",
374
+ passkeys: "Passkeys",
375
+ passkeysLede: "S'annunziar cun l'impronta, la fatscha u il PIN da l'apparat empè d'in pled-clav.",
376
+ passkeyDefaultName: "Passkey",
377
+ remove: "Allontanar",
378
+ addPasskey: "Agiuntar ina passkey",
379
+ twoFactor: "Annunzia en dus pass",
380
+ twoFactorOn: "Activà. L'annunzia dumonda in code da voss app d'autentificaziun.",
381
+ twoFactorOff: "Deactivà. L'activai per dumandar in code tar mintga annunzia.",
382
+ currentPassword: "Pled-clav actual",
383
+ currentPasswordHint: "Necessari sche voss conto ha in pled-clav. Senza, s'annunziai l'emprim danovamain.",
384
+ scan: "Agiuntai quest conto a voss app d'autentificaziun ed endatai lura il code mussà.",
385
+ openAuthenticator: "Avrir en l'app d'autentificaziun",
386
+ backupCodes: "Conservai quests codes da reserva en in lieu segir. Mintgin funcziuna ina giada, sche vus perdais voss telefon.",
387
+ turnOn: "Activar",
388
+ turnOff: "Deactivar",
389
+ setUp: "Installar",
390
+ leave: "Sortir u bandunar",
391
+ signOut: "Sortir",
392
+ deleteConfirm: "Per stizzar voss conto e tut ses cuntegn, scrivai {word}",
393
+ deleteWord: "stizzar",
394
+ delete: "Stizzar mes conto",
395
+ },
396
+ };
397
+ const ru = {
398
+ recovery: {
399
+ forgot: "Забыли пароль?",
400
+ send: "Отправить ссылку для сброса",
401
+ sent: "Если учётную запись можно восстановить по этому адресу, ссылка скоро придёт. Проверьте также папку «Спам».",
402
+ reset: "Сбросить пароль",
403
+ newPassword: "Новый пароль",
404
+ confirmPassword: "Повторите новый пароль",
405
+ mismatch: "Пароли не совпадают. Введите одинаковый пароль в обоих полях.",
406
+ invalidToken: "Эта ссылка недействительна или срок её действия истёк. Запросите новую.",
407
+ success: "Пароль изменён. Войдите с новым паролем.",
408
+ },
409
+ signIn: "Войти",
410
+ createAccount: "Создать аккаунт",
411
+ withSignin: "Продолжить с Google, Apple, GitHub, X или Facebook",
412
+ withOrangecat: "Продолжить с OrangeCat",
413
+ withPasskey: "Войти с ключом доступа",
414
+ withLink: "Прислать ссылку для входа на e-mail",
415
+ signUpWithLink: "Зарегистрироваться по ссылке на e-mail",
416
+ orEmail: "или по e-mail",
417
+ email: "E-mail",
418
+ password: "Пароль",
419
+ passwordHint: "Не меньше 12 символов. Длинную фразу запомнить легче, чем символы.",
420
+ displayName: "Отображаемое имя",
421
+ displayNameHint: "Необязательно. Что угодно — не обязательно ваше настоящее имя.",
422
+ checkInbox: "Мы отправили ссылку на {email}. Откройте её на этом устройстве. Она действует 10 минут.",
423
+ confirmInbox: "Мы отправили ссылку на {email}. Откройте её, чтобы подтвердить адрес и завершить создание аккаунта.",
424
+ back: "Назад",
425
+ totpPrompt: "Введите 6-значный код из приложения-аутентификатора.",
426
+ backupPrompt: "Введите один из резервных кодов, сохранённых при настройке.",
427
+ totpCode: "Код",
428
+ backupCode: "Резервный код",
429
+ trustDevice: "Доверять этому устройству 30 дней",
430
+ verify: "Подтвердить",
431
+ useTotp: "Использовать приложение-аутентификатор",
432
+ useBackup: "Использовать резервный код",
433
+ resendVerification: "Отправить ссылку для подтверждения ещё раз",
434
+ noAccount: "Ещё нет аккаунта?",
435
+ haveAccount: "Уже есть аккаунт?",
436
+ errors: {
437
+ rateLimited: "Слишком много попыток. Подождите несколько минут и попробуйте снова.",
438
+ unavailable: "Аккаунты сейчас недоступны. Попробуйте чуть позже.",
439
+ generic: "Не получилось. Попробуйте ещё раз или выберите другой способ входа.",
440
+ emailFirst: "Сначала введите адрес e-mail.",
441
+ INVALID_EMAIL_OR_PASSWORD: "E-mail и пароль не совпадают. Проверьте оба или войдите по ссылке.",
442
+ EMAIL_NOT_VERIFIED: "Сначала подтвердите адрес e-mail — ссылка в вашем почтовом ящике.",
443
+ USER_ALREADY_EXISTS: "Аккаунт с этим адресом уже существует. Войдите вместо этого.",
444
+ USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL: "Аккаунт с этим адресом уже существует. Войдите вместо этого.",
445
+ PASSWORD_TOO_SHORT: "Пароль должен содержать не меньше 12 символов.",
446
+ PASSWORD_TOO_LONG: "Пароль может содержать не больше 128 символов.",
447
+ INVALID_EMAIL: "Это не похоже на адрес e-mail.",
448
+ INVALID_CODE: "Код неверный или устарел. Попробуйте самый новый.",
449
+ INVALID_TWO_FACTOR_CODE: "Код неверный или устарел. Попробуйте самый новый.",
450
+ SESSION_EXPIRED: "Для безопасности войдите снова, прежде чем это менять.",
451
+ INVALID_PASSWORD: "Пароль неверный.",
452
+ },
453
+ account: {
454
+ profile: "Профиль",
455
+ noEmail: "нет — добавьте вход по паролю, чтобы использовать e-mail",
456
+ unverified: "ещё не подтверждён",
457
+ role: "Роль",
458
+ roles: {
459
+ customer: "Клиент",
460
+ helper: "Помощник",
461
+ professional: "Специалист",
462
+ staff: "Команда",
463
+ admin: "Администратор",
464
+ },
465
+ save: "Сохранить",
466
+ saved: "Сохранено.",
467
+ methods: "Способы входа",
468
+ methodPassword: "E-mail и пароль",
469
+ link: "Добавить: {method}",
470
+ passkeys: "Ключи доступа",
471
+ passkeysLede: "Входите по отпечатку, лицу или PIN-коду устройства вместо пароля.",
472
+ passkeyDefaultName: "Ключ доступа",
473
+ remove: "Удалить",
474
+ addPasskey: "Добавить ключ доступа",
475
+ twoFactor: "Вход в два шага",
476
+ twoFactorOn: "Включён. При входе нужен код из приложения-аутентификатора.",
477
+ twoFactorOff: "Выключен. Включите, чтобы при каждом входе запрашивался код.",
478
+ currentPassword: "Текущий пароль",
479
+ currentPasswordHint: "Нужен, если у аккаунта есть пароль. Без пароля сначала войдите заново.",
480
+ scan: "Добавьте этот аккаунт в приложение-аутентификатор и введите показанный код.",
481
+ openAuthenticator: "Открыть в приложении-аутентификаторе",
482
+ backupCodes: "Храните эти резервные коды в надёжном месте. Каждый сработает один раз, если вы потеряете телефон.",
483
+ turnOn: "Включить",
484
+ turnOff: "Выключить",
485
+ setUp: "Настроить",
486
+ leave: "Выйти или уйти",
487
+ signOut: "Выйти",
488
+ deleteConfirm: "Чтобы удалить аккаунт и всё в нём, введите {word}",
489
+ deleteWord: "удалить",
490
+ delete: "Удалить мой аккаунт",
491
+ },
492
+ };
493
+ const BY_LANGUAGE = {
494
+ en: DEFAULT_AUTH_LABELS,
495
+ de,
496
+ // Swiss German is spoken, not written: its forms are in Standard German.
497
+ gsw: de,
498
+ fr,
499
+ it,
500
+ rm,
501
+ ru,
502
+ };
503
+ /** The languages with a full set of labels. */
504
+ export const AUTH_LABEL_LOCALES = Object.keys(BY_LANGUAGE);
505
+ /**
506
+ * The labels for a locale such as `de`, `de-CH` or `fr`. Unknown languages
507
+ * get English, which is the package's own default.
508
+ */
509
+ export function authLabelsFor(locale) {
510
+ const language = (locale ?? "").toLowerCase().split(/[-_]/)[0] ?? "";
511
+ return BY_LANGUAGE[language] ?? DEFAULT_AUTH_LABELS;
512
+ }
513
+ //# sourceMappingURL=translations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translations.js","sourceRoot":"","sources":["../../src/auth/translations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Who is signed in, as the menu shows it — pure, so every rule is testable
3
+ * without a browser.
4
+ *
5
+ * Two apps had already learned two different halves of this, and each was
6
+ * missing the other's half:
7
+ *
8
+ * - Loki: initials come from the NAME only. Built from an email local-part,
9
+ * "butaeff" becomes "B" and tells the person nothing they didn't know.
10
+ * - OrangeCat: a display name is NEVER reconstructed from the email address.
11
+ * Its old chain ended in the local-part titlecased, so
12
+ * `firstname.lastname@…` came out as "Firstname Lastname" — a real name
13
+ * nobody typed, rebuilt from an address the person never chose to display,
14
+ * on an account that may have chosen a pseudonym on purpose.
15
+ *
16
+ * Loki itself still fell back to the email local-part for its name. This
17
+ * module takes OrangeCat's rule, so adopting it fixes that too.
18
+ */
19
+ export type AccountUser = {
20
+ /** What the person chose to be called. */
21
+ name?: string | null;
22
+ /** Their handle, shown as @handle — e.g. an OrangeCat username. */
23
+ handle?: string | null;
24
+ /** Shown to the signed-in person as their own address; never used to
25
+ * invent a name or initials. */
26
+ email?: string | null;
27
+ /** Avatar URL. A broken image falls back to initials, then to a glyph. */
28
+ image?: string | null;
29
+ };
30
+ /** Shown when the person has no name and no handle. Not their email. */
31
+ export declare const PLACEHOLDER_NAME = "Account";
32
+ /**
33
+ * The name the menu shows: name, else @handle, else a placeholder.
34
+ * Never the email, never anything derived from it.
35
+ */
36
+ export declare function displayNameFor(user: AccountUser): string;
37
+ /**
38
+ * Up to two initials from the person's NAME, or null — in which case the
39
+ * trigger draws a person glyph rather than a letter that means nothing.
40
+ */
41
+ export declare function initialsFor(user: AccountUser): string | null;
42
+ /** The identity line under the name: @handle when the name is shown, else the email. */
43
+ export declare function secondaryLineFor(user: AccountUser): string | null;
44
+ /**
45
+ * Where keyboard focus goes next among `count` menu items. Arrows wrap;
46
+ * Home and End jump. Pure so the wrap-around is pinned by a test — an
47
+ * off-by-one here strands the keyboard on the last row.
48
+ */
49
+ export declare function nextMenuIndex(current: number, key: "ArrowDown" | "ArrowUp" | "Home" | "End", count: number): number;
50
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;qCACiC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAMxD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAS5D;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAKjE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,EAC7C,KAAK,EAAE,MAAM,GACZ,MAAM,CAYR"}