@eifi1/ui-kit 0.29.0 → 0.31.0

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 (307) hide show
  1. package/README.md +65 -6
  2. package/dist/account/account-parts.d.ts +21 -0
  3. package/dist/account/account-parts.js +40 -0
  4. package/dist/account/account-parts.js.map +1 -0
  5. package/dist/account/data-export-setting.d.ts +73 -0
  6. package/dist/account/data-export-setting.js +114 -0
  7. package/dist/account/data-export-setting.js.map +1 -0
  8. package/dist/account/delete-account-setting.d.ts +95 -0
  9. package/dist/account/delete-account-setting.js +200 -0
  10. package/dist/account/delete-account-setting.js.map +1 -0
  11. package/dist/account/email-change-setting.d.ts +136 -0
  12. package/dist/account/email-change-setting.js +278 -0
  13. package/dist/account/email-change-setting.js.map +1 -0
  14. package/dist/account/sessions-setting.d.ts +110 -0
  15. package/dist/account/sessions-setting.js +147 -0
  16. package/dist/account/sessions-setting.js.map +1 -0
  17. package/dist/admin/admin-action-confirm.d.ts +95 -0
  18. package/dist/admin/admin-action-confirm.js +276 -0
  19. package/dist/admin/admin-action-confirm.js.map +1 -0
  20. package/dist/admin/admin-action-log.d.ts +105 -0
  21. package/dist/admin/admin-action-log.js +153 -0
  22. package/dist/admin/admin-action-log.js.map +1 -0
  23. package/dist/admin/admin-parts.d.ts +40 -0
  24. package/dist/admin/admin-parts.js +45 -0
  25. package/dist/admin/admin-parts.js.map +1 -0
  26. package/dist/admin/invitations-panel.d.ts +95 -0
  27. package/dist/admin/invitations-panel.js +290 -0
  28. package/dist/admin/invitations-panel.js.map +1 -0
  29. package/dist/admin/reviewer-scope-editor.d.ts +95 -0
  30. package/dist/admin/reviewer-scope-editor.js +134 -0
  31. package/dist/admin/reviewer-scope-editor.js.map +1 -0
  32. package/dist/admin/role-select.d.ts +95 -0
  33. package/dist/admin/role-select.js +128 -0
  34. package/dist/admin/role-select.js.map +1 -0
  35. package/dist/admin/transfer-ownership-dialog.d.ts +95 -0
  36. package/dist/admin/transfer-ownership-dialog.js +83 -0
  37. package/dist/admin/transfer-ownership-dialog.js.map +1 -0
  38. package/dist/admin/user-roster.d.ts +95 -0
  39. package/dist/admin/user-roster.js +285 -0
  40. package/dist/admin/user-roster.js.map +1 -0
  41. package/dist/auth/auth-errors.d.ts +103 -6
  42. package/dist/auth/auth-errors.js +68 -2
  43. package/dist/auth/auth-errors.js.map +1 -1
  44. package/dist/auth/forgot-password-form.d.ts +10 -3
  45. package/dist/auth/forgot-password-form.js +6 -3
  46. package/dist/auth/forgot-password-form.js.map +1 -1
  47. package/dist/auth/register-form.d.ts +21 -12
  48. package/dist/auth/register-form.js +6 -4
  49. package/dist/auth/register-form.js.map +1 -1
  50. package/dist/auth/reset-password-form.d.ts +10 -3
  51. package/dist/auth/reset-password-form.js +6 -3
  52. package/dist/auth/reset-password-form.js.map +1 -1
  53. package/dist/auth/sign-in-form.d.ts +75 -9
  54. package/dist/auth/sign-in-form.js +105 -15
  55. package/dist/auth/sign-in-form.js.map +1 -1
  56. package/dist/auth/verify-email.d.ts +7 -2
  57. package/dist/auth/verify-email.js +44 -8
  58. package/dist/auth/verify-email.js.map +1 -1
  59. package/dist/chart.d.ts +20 -11
  60. package/dist/components/account-chips.d.ts +47 -7
  61. package/dist/components/account-chips.js +19 -3
  62. package/dist/components/account-chips.js.map +1 -1
  63. package/dist/components/account-settings-labels.d.ts +24 -1
  64. package/dist/components/account-settings-labels.js +6 -2
  65. package/dist/components/account-settings-labels.js.map +1 -1
  66. package/dist/components/account-settings.d.ts +69 -8
  67. package/dist/components/account-settings.js +133 -25
  68. package/dist/components/account-settings.js.map +1 -1
  69. package/dist/components/amount-input.d.ts +21 -12
  70. package/dist/components/button-group.d.ts +21 -12
  71. package/dist/components/calculator.d.ts +21 -12
  72. package/dist/components/confirm-dialog.d.ts +21 -12
  73. package/dist/components/copy-button.d.ts +18 -9
  74. package/dist/components/danger-confirm.d.ts +21 -12
  75. package/dist/components/data-table.js +8 -1
  76. package/dist/components/data-table.js.map +1 -1
  77. package/dist/components/date-picker.js +9 -4
  78. package/dist/components/date-picker.js.map +1 -1
  79. package/dist/components/facing-pair.d.ts +21 -12
  80. package/dist/components/file-button.d.ts +21 -12
  81. package/dist/components/file-dropzone.d.ts +21 -12
  82. package/dist/components/form-actions.d.ts +21 -12
  83. package/dist/components/iban-input.d.ts +21 -12
  84. package/dist/components/language-select.d.ts +21 -12
  85. package/dist/components/legal-page.d.ts +21 -12
  86. package/dist/components/legal.d.ts +21 -12
  87. package/dist/components/money-field.d.ts +21 -12
  88. package/dist/components/number-field.d.ts +21 -12
  89. package/dist/components/number-input.d.ts +21 -12
  90. package/dist/components/numpad-sheet.d.ts +21 -12
  91. package/dist/components/passkeys-setting.js +2 -1
  92. package/dist/components/passkeys-setting.js.map +1 -1
  93. package/dist/components/phone-input.d.ts +21 -12
  94. package/dist/components/series-chart.d.ts +21 -12
  95. package/dist/components/settings-fields.d.ts +55 -13
  96. package/dist/components/settings-fields.js +20 -1
  97. package/dist/components/settings-fields.js.map +1 -1
  98. package/dist/components/share-card.d.ts +20 -11
  99. package/dist/components/text-link.d.ts +21 -12
  100. package/dist/components/time-input.d.ts +21 -12
  101. package/dist/components/ui.d.ts +17 -8
  102. package/dist/{register-form-V1OeNlMr.d.ts → delete-account-setting-DCFS5Vof.d.ts} +6612 -5612
  103. package/dist/demo/demo-banner.d.ts +51 -0
  104. package/dist/demo/demo-banner.js +97 -0
  105. package/dist/demo/demo-banner.js.map +1 -0
  106. package/dist/demo/demo-countdown.d.ts +58 -0
  107. package/dist/demo/demo-countdown.js +79 -0
  108. package/dist/demo/demo-countdown.js.map +1 -0
  109. package/dist/demo/demo-ended.d.ts +45 -0
  110. package/dist/demo/demo-ended.js +42 -0
  111. package/dist/demo/demo-ended.js.map +1 -0
  112. package/dist/demo/demo-labels.d.ts +53 -0
  113. package/dist/demo/demo-labels.js +29 -0
  114. package/dist/demo/demo-labels.js.map +1 -0
  115. package/dist/demo/demo-session.d.ts +30 -0
  116. package/dist/demo/demo-session.js +8 -0
  117. package/dist/demo/demo-session.js.map +1 -0
  118. package/dist/demo/demo-start.d.ts +54 -0
  119. package/dist/demo/demo-start.js +68 -0
  120. package/dist/demo/demo-start.js.map +1 -0
  121. package/dist/feedback/feedback-attachment.d.ts +21 -12
  122. package/dist/feedback/feedback-context.d.ts +21 -12
  123. package/dist/feedback/feedback-crash.d.ts +21 -12
  124. package/dist/feedback/feedback-dialog.d.ts +21 -12
  125. package/dist/feedback/feedback-inbox.d.ts +21 -12
  126. package/dist/feedback/feedback-inbox.js +12 -2
  127. package/dist/feedback/feedback-inbox.js.map +1 -1
  128. package/dist/feedback/feedback-labels.d.ts +21 -12
  129. package/dist/feedback/feedback-labels.js +1 -0
  130. package/dist/feedback/feedback-labels.js.map +1 -1
  131. package/dist/feedback/feedback-menu.d.ts +21 -12
  132. package/dist/feedback/feedback-record.d.ts +21 -12
  133. package/dist/feedback/feedback-record.js +2 -0
  134. package/dist/feedback/feedback-record.js.map +1 -1
  135. package/dist/feedback/feedback-row-detail.d.ts +21 -12
  136. package/dist/feedback/feedback-row-detail.js +7 -0
  137. package/dist/feedback/feedback-row-detail.js.map +1 -1
  138. package/dist/feedback/feedback-status-undo.d.ts +21 -12
  139. package/dist/feedback/feedback-submit.d.ts +21 -12
  140. package/dist/feedback/feedback-swipe.d.ts +22 -13
  141. package/dist/feedback/feedback-swipe.js.map +1 -1
  142. package/dist/feedback/feedback-table.d.ts +18 -9
  143. package/dist/feedback/feedback-thread.d.ts +21 -12
  144. package/dist/feedback.d.ts +21 -12
  145. package/dist/hooks/use-anchored-panel.d.ts +6 -2
  146. package/dist/hooks/use-anchored-panel.js +2 -1
  147. package/dist/hooks/use-anchored-panel.js.map +1 -1
  148. package/dist/hooks/use-file-drop.d.ts +21 -12
  149. package/dist/i18n/defaults.d.ts +21 -12
  150. package/dist/i18n/defaults.js +28 -0
  151. package/dist/i18n/defaults.js.map +1 -1
  152. package/dist/i18n/german.d.ts +21 -12
  153. package/dist/i18n/german.js +298 -12
  154. package/dist/i18n/german.js.map +1 -1
  155. package/dist/i18n/kit-labels.d.ts +14 -5
  156. package/dist/i18n/kit-labels.js.map +1 -1
  157. package/dist/i18n/languages.d.ts +15 -6
  158. package/dist/i18n/locales/de-CH.d.ts +21 -12
  159. package/dist/i18n/locales/en.d.ts +21 -12
  160. package/dist/i18n/locales/es.d.ts +21 -12
  161. package/dist/i18n/locales/es.js +287 -10
  162. package/dist/i18n/locales/es.js.map +1 -1
  163. package/dist/i18n/locales/fr.d.ts +21 -12
  164. package/dist/i18n/locales/fr.js +290 -7
  165. package/dist/i18n/locales/fr.js.map +1 -1
  166. package/dist/i18n/locales/hu.d.ts +21 -12
  167. package/dist/i18n/locales/hu.js +288 -12
  168. package/dist/i18n/locales/hu.js.map +1 -1
  169. package/dist/i18n/locales/it.d.ts +21 -12
  170. package/dist/i18n/locales/it.js +289 -7
  171. package/dist/i18n/locales/it.js.map +1 -1
  172. package/dist/i18n/locales/zh.d.ts +21 -12
  173. package/dist/i18n/locales/zh.js +279 -7
  174. package/dist/i18n/locales/zh.js.map +1 -1
  175. package/dist/i18n/review.d.ts +21 -12
  176. package/dist/i18n/review.js +50 -1
  177. package/dist/i18n/review.js.map +1 -1
  178. package/dist/index.d.ts +31 -4
  179. package/dist/index.js +148 -0
  180. package/dist/index.js.map +1 -1
  181. package/dist/landing/access.d.ts +48 -0
  182. package/dist/landing/access.js +38 -0
  183. package/dist/landing/access.js.map +1 -0
  184. package/dist/landing/landing-actions.d.ts +138 -0
  185. package/dist/landing/landing-actions.js +39 -0
  186. package/dist/landing/landing-actions.js.map +1 -0
  187. package/dist/landing/landing-labels.d.ts +43 -0
  188. package/dist/landing/landing-labels.js +23 -0
  189. package/dist/landing/landing-labels.js.map +1 -0
  190. package/dist/landing/landing-sections.d.ts +218 -0
  191. package/dist/landing/landing-sections.js +167 -0
  192. package/dist/landing/landing-sections.js.map +1 -0
  193. package/dist/landing/page-seo.d.ts +99 -0
  194. package/dist/landing/page-seo.js +121 -0
  195. package/dist/landing/page-seo.js.map +1 -0
  196. package/dist/landing/public-header.d.ts +148 -0
  197. package/dist/landing/public-header.js +49 -0
  198. package/dist/landing/public-header.js.map +1 -0
  199. package/dist/landing/routing.d.ts +218 -0
  200. package/dist/landing/routing.js +81 -0
  201. package/dist/landing/routing.js.map +1 -0
  202. package/dist/rhf/fields.d.ts +21 -12
  203. package/dist/rhf/form.d.ts +21 -12
  204. package/dist/rhf.d.ts +21 -12
  205. package/dist/settings/settings-catalogue.d.ts +84 -0
  206. package/dist/settings/settings-catalogue.js +47 -0
  207. package/dist/settings/settings-catalogue.js.map +1 -0
  208. package/dist/settings/settings-context.d.ts +31 -0
  209. package/dist/settings/settings-context.js +11 -0
  210. package/dist/settings/settings-context.js.map +1 -0
  211. package/dist/settings/settings-heading.d.ts +50 -0
  212. package/dist/settings/settings-heading.js +27 -0
  213. package/dist/settings/settings-heading.js.map +1 -0
  214. package/dist/settings/settings-labels.d.ts +41 -0
  215. package/dist/settings/settings-labels.js +38 -0
  216. package/dist/settings/settings-labels.js.map +1 -0
  217. package/dist/settings/settings-layout.d.ts +77 -0
  218. package/dist/settings/settings-layout.js +242 -0
  219. package/dist/settings/settings-layout.js.map +1 -0
  220. package/dist/settings/settings-section.d.ts +133 -0
  221. package/dist/settings/settings-section.js +63 -0
  222. package/dist/settings/settings-section.js.map +1 -0
  223. package/dist/settings/use-account-language.d.ts +83 -0
  224. package/dist/settings/use-account-language.js +62 -0
  225. package/dist/settings/use-account-language.js.map +1 -0
  226. package/dist/settings/use-settings-focus.d.ts +34 -0
  227. package/dist/settings/use-settings-focus.js +77 -0
  228. package/dist/settings/use-settings-focus.js.map +1 -0
  229. package/dist/settings/use-settings-route.d.ts +118 -0
  230. package/dist/settings/use-settings-route.js +120 -0
  231. package/dist/settings/use-settings-route.js.map +1 -0
  232. package/dist/shell/app-shell.d.ts +27 -12
  233. package/dist/shell/app-shell.js +3 -2
  234. package/dist/shell/app-shell.js.map +1 -1
  235. package/dist/shell/top-bar-brand.d.ts +21 -12
  236. package/dist/shell.d.ts +25 -6
  237. package/dist/shell.js +56 -0
  238. package/dist/shell.js.map +1 -1
  239. package/dist/wizard/stepper-nav.d.ts +21 -12
  240. package/dist/wizard.d.ts +21 -12
  241. package/package.json +2 -1
  242. package/src/account/account-parts.ts +67 -0
  243. package/src/account/data-export-setting.tsx +219 -0
  244. package/src/account/delete-account-setting.tsx +363 -0
  245. package/src/account/email-change-setting.tsx +454 -0
  246. package/src/account/sessions-setting.tsx +284 -0
  247. package/src/admin/admin-action-confirm.tsx +495 -0
  248. package/src/admin/admin-action-log.tsx +297 -0
  249. package/src/admin/admin-parts.ts +82 -0
  250. package/src/admin/invitations-panel.tsx +523 -0
  251. package/src/admin/reviewer-scope-editor.tsx +234 -0
  252. package/src/admin/role-select.tsx +286 -0
  253. package/src/admin/transfer-ownership-dialog.tsx +172 -0
  254. package/src/admin/user-roster.tsx +573 -0
  255. package/src/auth/auth-errors.ts +196 -8
  256. package/src/auth/forgot-password-form.tsx +21 -5
  257. package/src/auth/register-form.tsx +24 -6
  258. package/src/auth/reset-password-form.tsx +19 -5
  259. package/src/auth/sign-in-form.tsx +241 -38
  260. package/src/auth/verify-email.tsx +59 -8
  261. package/src/components/account-chips.tsx +64 -7
  262. package/src/components/account-settings-labels.ts +28 -1
  263. package/src/components/account-settings.tsx +231 -34
  264. package/src/components/data-table.tsx +8 -0
  265. package/src/components/date-picker.tsx +9 -4
  266. package/src/components/passkeys-setting.tsx +2 -1
  267. package/src/components/settings-fields.tsx +50 -1
  268. package/src/demo/demo-banner.tsx +159 -0
  269. package/src/demo/demo-countdown.ts +141 -0
  270. package/src/demo/demo-ended.tsx +89 -0
  271. package/src/demo/demo-labels.ts +78 -0
  272. package/src/demo/demo-session.ts +32 -0
  273. package/src/demo/demo-start.tsx +150 -0
  274. package/src/feedback/feedback-inbox.tsx +21 -8
  275. package/src/feedback/feedback-labels.ts +2 -1
  276. package/src/feedback/feedback-record.ts +10 -7
  277. package/src/feedback/feedback-row-detail.tsx +28 -4
  278. package/src/feedback/feedback-swipe.tsx +1 -1
  279. package/src/hooks/use-anchored-panel.ts +14 -3
  280. package/src/i18n/defaults.ts +28 -0
  281. package/src/i18n/german.ts +327 -5
  282. package/src/i18n/kit-labels.tsx +42 -0
  283. package/src/i18n/locales/es.ts +313 -3
  284. package/src/i18n/locales/fr.ts +316 -0
  285. package/src/i18n/locales/hu.ts +308 -5
  286. package/src/i18n/locales/it.ts +313 -0
  287. package/src/i18n/locales/zh.ts +286 -0
  288. package/src/i18n/review.ts +49 -0
  289. package/src/index.ts +184 -0
  290. package/src/landing/access.ts +97 -0
  291. package/src/landing/landing-actions.tsx +92 -0
  292. package/src/landing/landing-labels.ts +59 -0
  293. package/src/landing/landing-sections.tsx +337 -0
  294. package/src/landing/page-seo.ts +251 -0
  295. package/src/landing/public-header.tsx +120 -0
  296. package/src/landing/routing.tsx +209 -0
  297. package/src/settings/settings-catalogue.ts +132 -0
  298. package/src/settings/settings-context.ts +33 -0
  299. package/src/settings/settings-heading.tsx +65 -0
  300. package/src/settings/settings-labels.ts +75 -0
  301. package/src/settings/settings-layout.tsx +379 -0
  302. package/src/settings/settings-section.tsx +108 -0
  303. package/src/settings/use-account-language.ts +146 -0
  304. package/src/settings/use-settings-focus.ts +120 -0
  305. package/src/settings/use-settings-route.ts +258 -0
  306. package/src/shell/app-shell.tsx +10 -2
  307. package/src/shell.ts +45 -0
@@ -17,6 +17,15 @@ import type { UiKitLabels } from "./kit-labels";
17
17
  export function germanLabels(numberLocale: string): UiKitLabels {
18
18
  const num = new Intl.NumberFormat(numberLocale);
19
19
  const n = (value: number) => num.format(value);
20
+ // 0.30.0 — a throttled request (HTTP 429), as `englishRateLimited` in
21
+ // src/auth/auth-errors.ts: no wait → "einen Moment", under a minute → seconds, else
22
+ // minutes rounded up. kastlan's reviewed "auth.throttled" is the sentence without one.
23
+ const wait = (seconds: number) =>
24
+ seconds < 60 ? `${n(Math.ceil(seconds))} s` : `${n(Math.ceil(seconds / 60))} min`;
25
+ const rateLimited = (seconds?: number) =>
26
+ !seconds || seconds <= 0
27
+ ? "Zu viele Versuche. Bitte warten Sie einen Moment und versuchen Sie es dann noch einmal."
28
+ : `Zu viele Versuche. Versuchen Sie es in ${wait(seconds)} erneut.`;
20
29
 
21
30
  return {
22
31
  feedbackAttachment: {
@@ -70,6 +79,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
70
79
  // written here with "ß" like the rest of this source; `swiss()` makes it "grösser".
71
80
  feedbackStatus: {
72
81
  OPEN: "Offen",
82
+ READY: "Bereit zur Umsetzung",
73
83
  IN_PROGRESS: "In Bearbeitung",
74
84
  IN_EVALUATION: "Zur Prüfung",
75
85
  NEEDS_LIVE_TEST: "Live testen",
@@ -131,6 +141,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
131
141
  phoneActions: "Feedback-Aktionen",
132
142
  },
133
143
  feedbackDetail: {
144
+ subject: "Betreff",
134
145
  body: "Beschreibung",
135
146
  edit: "Bearbeiten",
136
147
  editDescription: "Beschreibung bearbeiten",
@@ -162,6 +173,9 @@ export function germanLabels(numberLocale: string): UiKitLabels {
162
173
  memberSince: "Mitglied seit",
163
174
  displayName: "Anzeigename",
164
175
  save: "Speichern",
176
+ firstName: "Vorname",
177
+ lastName: "Nachname",
178
+ nameRequired: "Geben Sie Vor- und Nachnamen ein.",
165
179
  },
166
180
  password: {
167
181
  title: "Passwort ändern",
@@ -186,6 +200,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
186
200
  qrAlt: "QR-Code für die Authenticator-App",
187
201
  secretHint: "Scannen nicht möglich? Stattdessen diesen Schlüssel in der App eingeben:",
188
202
  copySecret: "Schlüssel kopieren",
203
+ // 0.31.0: the card's title; the state ("Aktiv") stands beside it.
204
+ title: "Zwei-Faktor-Authentifizierung",
189
205
  },
190
206
  passkeys: {
191
207
  title: "Passkeys",
@@ -718,6 +734,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
718
734
  registered: "Registriert",
719
735
  unverified: "Nicht bestätigt",
720
736
  passwordChange: "Passwortänderung erforderlich",
737
+ deletion: "Löschung beantragt",
738
+ deletionOn: (date) => `Löschung am ${date}`,
721
739
  },
722
740
  shareCard: {
723
741
  dialogTitle: "Teilen",
@@ -883,6 +901,19 @@ export function germanLabels(numberLocale: string): UiKitLabels {
883
901
  setPasswordFailed: "Das Passwort konnte nicht vergeben werden.",
884
902
  expired: "Diese Anmeldung ist abgelaufen. Bitte melden Sie sich erneut an.",
885
903
  backToSignIn: "Zurück zur Anmeldung",
904
+ // kastlan's backup-code words ("Backup-Code" — not keksdose's
905
+ // "Wiederherstellungscode", which is the key of its end-to-end encryption).
906
+ useRecoveryCode: "Backup-Code verwenden",
907
+ useAuthenticatorCode: "Authenticator-App verwenden",
908
+ recoveryCode: "Backup-Code",
909
+ recoveryIntro:
910
+ "Geben Sie einen der Backup-Codes ein, die Sie beim Einrichten der Zwei-Faktor-Authentifizierung gespeichert haben.",
911
+ recoveryCodeHint: (length) =>
912
+ `${n(length)} Buchstaben und Ziffern. Bindestriche und Leerzeichen spielen keine Rolle.`,
913
+ recoveryCodeInvalid: "Dieser Backup-Code ist ungültig oder wurde schon verwendet.",
914
+ rateLimited,
915
+ // 0.31.0: the same words as `landing.requestAccess`.
916
+ requestAccess: "Zugang anfragen",
886
917
  },
887
918
  register: {
888
919
  firstName: "Vorname",
@@ -906,6 +937,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
906
937
  invitationInvalid: "Dieser Einladungslink ist ungültig.",
907
938
  invitationExpired: "Diese Einladung ist abgelaufen. Bitten Sie um eine neue.",
908
939
  failed: "Registrierung fehlgeschlagen. Bitte versuchen Sie es erneut.",
940
+ rateLimited,
909
941
  },
910
942
  completeName: {
911
943
  title: "Namen vervollständigen",
@@ -927,6 +959,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
927
959
  sentHint: "Der Link gilt eine Stunde und funktioniert genau einmal. Sehen Sie auch im Spam-Ordner nach.",
928
960
  backToSignIn: "Zurück zur Anmeldung",
929
961
  error: "Anfrage fehlgeschlagen. Bitte versuchen Sie es später noch einmal.",
962
+ rateLimited,
930
963
  },
931
964
  resetPassword: {
932
965
  title: "Neues Passwort vergeben",
@@ -944,6 +977,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
944
977
  success: "Ihr Passwort ist geändert. Sie können sich jetzt damit anmelden.",
945
978
  sessionsEnded: "Angemeldete Geräte wurden abgemeldet – dort müssen Sie sich neu anmelden.",
946
979
  signIn: "Zur Anmeldung",
980
+ rateLimited,
947
981
  },
948
982
  verifyEmail: {
949
983
  title: "E-Mail-Adresse bestätigen",
@@ -987,12 +1021,220 @@ export function germanLabels(numberLocale: string): UiKitLabels {
987
1021
  register: "Registrieren",
988
1022
  },
989
1023
  companySwitcher: {
990
- // "Firma", as kastlan's sign-up asks for the "Firmenname".
991
- switchCompany: "Firma wechseln",
992
- heading: "Firmen",
993
- current: (name) => `Firma: ${name}`,
1024
+ // "Unternehmen" (0.30), the word kastlan's admin strings use ("Aus dem Unternehmen
1025
+ // entfernen"), so one German word names a company across the kit.
1026
+ switchCompany: "Unternehmen wechseln",
1027
+ heading: "Unternehmen",
1028
+ current: (name) => `Unternehmen: ${name}`,
994
1029
  currentMark: "(aktuell)",
995
- switching: "Firma wird gewechselt…",
1030
+ switching: "Unternehmen wird gewechselt…",
1031
+ },
1032
+ // 0.30.0 — docs/user-admin-harmonization.md: keksdose's reviewed de-CH for the admin
1033
+ // words (admin.users.*), Kurvenschmiede's for transfer, invitations and sessions,
1034
+ // kastlan's for "Unternehmen", the throttle and "Überall abmelden"; written fresh where
1035
+ // no app had the sentence. Formal "Sie". "Administratorrechte" rather than "der letzte
1036
+ // Administrator", which would give the reader a gender.
1037
+ emailChange: {
1038
+ title: "E-Mail-Adresse",
1039
+ current: "Aktuelle Adresse",
1040
+ newEmail: "Neue E-Mail-Adresse",
1041
+ password: "Aktuelles Passwort",
1042
+ passwordHint: "Mit Ihrer Adresse melden Sie sich an – deshalb braucht eine Änderung Ihr Passwort.",
1043
+ emailTagUse: (address) => `${address} verwenden`,
1044
+ emailTagHint:
1045
+ "Viele Anbieter stellen name+kennung@… an dasselbe Postfach zu, damit Post von dieser App filter- und zuordenbar wird. Prüfen Sie vorher, ob Ihrer das tut: Angemeldet wird dann mit der markierten Adresse.",
1046
+ submit: "E-Mail-Adresse ändern",
1047
+ sameAsCurrent: "Das ist bereits Ihre Adresse.",
1048
+ emailTaken: "Ein Konto mit dieser E-Mail-Adresse existiert bereits.",
1049
+ wrongPassword: "Das Passwort ist falsch.",
1050
+ pending: (newEmail) => `Bestätigen Sie den Link, den wir an ${newEmail} geschickt haben.`,
1051
+ pendingHint: (currentEmail) =>
1052
+ `Bis dahin melden Sie sich weiterhin mit ${currentEmail} an. Sehen Sie auch im Spam-Ordner nach.`,
1053
+ resend: "Link erneut senden",
1054
+ resent: "Wir haben den Link erneut gesendet.",
1055
+ cancel: "Änderung abbrechen",
1056
+ confirmed: (email) => `Ihre E-Mail-Adresse ist jetzt ${email}.`,
1057
+ passkeyNote:
1058
+ "Ihre Passkeys funktionieren weiterhin. Ihr Gerät zeigt sie eventuell noch unter der alten Adresse an.",
1059
+ rateLimited,
1060
+ failed: "Das hat nicht geklappt. Bitte erneut versuchen.",
1061
+ },
1062
+ sessions: {
1063
+ title: "Sitzungen",
1064
+ description:
1065
+ "Auf einem Gerät angemeldet, das Sie nicht mehr nutzen oder dem Sie nicht trauen? Melden Sie sich überall ab.",
1066
+ signOutEverywhere: "Überall abmelden…",
1067
+ signOutEverywherePrompt:
1068
+ "Damit enden alle Sitzungen, auch diese: Sie werden auch auf diesem Gerät abgemeldet und melden sich hier neu an.",
1069
+ confirmSignOutEverywhere: "Überall abmelden",
1070
+ list: "Wo Sie angemeldet sind",
1071
+ loading: "Sitzungen werden geladen…",
1072
+ empty: "Keine Sitzungen vorhanden.",
1073
+ current: "Dieses Gerät",
1074
+ unknownDevice: "Unbekanntes Gerät",
1075
+ // A colon: `when` is either "vor 3 Stunden" or a date.
1076
+ lastActive: (when) => `Zuletzt aktiv: ${when}`,
1077
+ ip: (address) => `IP ${address}`,
1078
+ revoke: "Abmelden",
1079
+ // Starts with `revoke`, the button's visible text, for voice control.
1080
+ revokeItem: (device) => `Abmelden: ${device}`,
1081
+ failed: "Das hat nicht geklappt. Bitte erneut versuchen.",
1082
+ },
1083
+ deleteAccount: {
1084
+ title: "Konto löschen",
1085
+ afterDays: (days) =>
1086
+ days === 1
1087
+ ? "Ihr Konto wird sofort deaktiviert und 1 Tag später endgültig gelöscht."
1088
+ : `Ihr Konto wird sofort deaktiviert und ${n(days)} Tage später endgültig gelöscht.`,
1089
+ operator: "Ihr Konto wird sofort deaktiviert und anschließend vom Betreiber endgültig gelöscht.",
1090
+ arm: "Konto löschen…",
1091
+ prompt: "Sie werden auf allen Geräten abgemeldet, und Ihr Konto kann nicht mehr verwendet werden.",
1092
+ handOver: (count) =>
1093
+ count === 1
1094
+ ? "1 Element, das andere sehen können, geht an einen Administrator über."
1095
+ : `${n(count)} Elemente, die andere sehen können, gehen an einen Administrator über.`,
1096
+ confirm: "Mein Konto löschen",
1097
+ done: "Ihr Konto ist deaktiviert. Sie werden abgemeldet.",
1098
+ wrongPassword: "Das Passwort ist falsch.",
1099
+ confirmationMismatch: "Das ist nicht die Adresse Ihres Kontos.",
1100
+ lastAdmin:
1101
+ "Ihr Konto ist das letzte mit Administratorrechten. Geben Sie zuerst einem anderen Konto Administratorrechte.",
1102
+ lastAdminOf: (companies) =>
1103
+ `Ihr Konto ist das letzte mit Administratorrechten bei ${companies}. Geben Sie dort zuerst einem anderen Konto Administratorrechte.`,
1104
+ // keksdose's "Haushalt".
1105
+ householdHasMembers:
1106
+ "Ihr Haushalt hat weitere Mitglieder, deshalb kann das Konto hier nicht gelöscht werden. Bitte schreiben Sie dem Betreiber.",
1107
+ rateLimited,
1108
+ failed: "Ihr Konto konnte nicht gelöscht werden. Bitte versuchen Sie es erneut.",
1109
+ },
1110
+ dataExport: {
1111
+ title: "Ihre Daten exportieren",
1112
+ description: "Laden Sie eine Kopie der Daten Ihres Kontos als JSON-Datei herunter.",
1113
+ download: "Meine Daten herunterladen",
1114
+ started: "Ihr Download hat begonnen.",
1115
+ saveAgain: "Nicht gestartet? Datei speichern",
1116
+ rateLimited: (seconds) =>
1117
+ seconds && seconds > 0
1118
+ ? `Sie haben Ihre Daten gerade erst exportiert. Versuchen Sie es in ${wait(seconds)} erneut.`
1119
+ : "Sie haben Ihre Daten gerade erst exportiert. Bitte versuchen Sie es in einer Minute erneut.",
1120
+ failed: "Der Export ist fehlgeschlagen. Bitte versuchen Sie es erneut.",
1121
+ },
1122
+ userRoster: {
1123
+ name: "Name",
1124
+ email: "E-Mail",
1125
+ role: "Rolle",
1126
+ state: "Status",
1127
+ created: "Erstellt",
1128
+ lastLogin: "Letzte Anmeldung",
1129
+ never: "Nie",
1130
+ actions: "Aktionen",
1131
+ actionsFor: (name) => `Aktionen für ${name}`,
1132
+ },
1133
+ roleSelect: {
1134
+ label: "Rolle",
1135
+ rolesLegend: "Rollen",
1136
+ roleOf: (name) => `Rolle von ${name}`,
1137
+ lockedLastAdmin: "Das letzte aktive Konto mit Administratorrechten behält diese Rolle.",
1138
+ lockedSelf: "Ihre eigene Rolle können Sie nicht ändern.",
1139
+ notForLastAdmin: "nicht für das letzte Administratorkonto",
1140
+ notForSelf: "nicht für Ihr eigenes Konto",
1141
+ unavailable: (role, reason) => `${role} (${reason})`,
1142
+ },
1143
+ reviewerScope: {
1144
+ languages: "Sprachen",
1145
+ hint: "Kreuzen Sie die Sprachen an, die diese Person prüft.",
1146
+ none: "Keine Sprache: Beim Speichern wird die Prüfrolle entzogen.",
1147
+ areas: "Beschränken auf",
1148
+ legalOnly: "Nur die rechtlichen Seiten",
1149
+ legalOnlyHint:
1150
+ "Impressum, Datenschutzerklärung und Nutzungsbedingungen – für eine Juristin oder einen Juristen statt für Muttersprachler.",
1151
+ failed: "Die Prüfrolle konnte nicht gespeichert werden. Bitte versuchen Sie es erneut.",
1152
+ },
1153
+ adminAction: {
1154
+ confirm: "Bestätigen",
1155
+ cancel: "Abbrechen",
1156
+ close: "Schließen",
1157
+ lastAdmin:
1158
+ "Dies ist das letzte aktive Konto mit Administratorrechten. Geben Sie zuerst einem anderen Konto Administratorrechte.",
1159
+ self: "Mit Ihrem eigenen Konto ist das nicht möglich.",
1160
+ confirmationMismatch:
1161
+ "Die Adresse passt nicht zu diesem Konto. Prüfen Sie, bei welchem Konto Sie sind.",
1162
+ otherCompanies:
1163
+ "Dieses Konto gehört auch zu anderen Unternehmen, deshalb kann nur der Plattformbetreiber das tun. Sie können es stattdessen aus diesem Unternehmen entfernen.",
1164
+ removeFromCompany: "Aus dem Unternehmen entfernen",
1165
+ failed: "Das hat nicht geklappt. Bitte erneut versuchen.",
1166
+ },
1167
+ adminActionLog: {
1168
+ title: "Admin-Aktionen",
1169
+ empty: "Noch keine Admin-Aktionen.",
1170
+ loading: "Wird geladen…",
1171
+ // "durch", not "von": it takes the accusative, so `erased` ("ein gelöschtes Konto")
1172
+ // reads right both on its own and after it.
1173
+ by: (actor) => `durch ${actor}`,
1174
+ bySelf: "durch die Person selbst",
1175
+ automatic: "automatisch",
1176
+ erased: "ein gelöschtes Konto",
1177
+ filteredTo: (target) => `Nur ${target}`,
1178
+ showAll: "Alle Aktionen zeigen",
1179
+ filterBy: (target) => `Nur Aktionen zu ${target} zeigen`,
1180
+ actions: {
1181
+ deactivate: "Deaktiviert",
1182
+ reactivate: "Reaktiviert",
1183
+ role: "Rolle geändert",
1184
+ membership_remove: "Aus dem Unternehmen entfernt",
1185
+ password_change_require: "Neues Passwort verlangt",
1186
+ password_change_withdraw: "Passwortforderung zurückgenommen",
1187
+ mail_verification: "Bestätigungsmail gesendet",
1188
+ mail_reset: "Mail zum Zurücksetzen des Passworts gesendet",
1189
+ reviewer: "Prüfrolle geändert",
1190
+ invite: "Eingeladen",
1191
+ invite_resend: "Einladung erneut gesendet",
1192
+ invite_revoke: "Einladung zurückgezogen",
1193
+ transfer: "Arbeit übergeben",
1194
+ deletion_request: "Löschung beantragt",
1195
+ deletion_cancel: "Löschung aufgehoben",
1196
+ erase: "Konto endgültig gelöscht",
1197
+ },
1198
+ },
1199
+ transferOwnership: {
1200
+ title: (name) => `Arbeit von ${name} übergeben`,
1201
+ body: "Alles, was diesem Konto gehört, geht in einem Schritt an das gewählte Konto.",
1202
+ recipient: "Übergeben an",
1203
+ choose: "Konto wählen…",
1204
+ chooseFirst: "Wählen Sie, wer die Arbeit erhält",
1205
+ confirm: "Übergeben",
1206
+ customer: "Kundenkonto",
1207
+ deactivated: "deaktiviert",
1208
+ self: "dasselbe Konto",
1209
+ unavailable: (account, reason) => `${account} (${reason})`,
1210
+ noCandidates: "Kein anderes Konto kann sie erhalten.",
1211
+ },
1212
+ invitations: {
1213
+ email: "E-Mail-Adresse",
1214
+ invalidEmail: "Bitte eine vollständige E-Mail-Adresse eingeben.",
1215
+ role: "Rolle",
1216
+ scope: "Bereich",
1217
+ scopeNone: "Keiner",
1218
+ language: "Sprache der Einladung",
1219
+ note: "Notiz",
1220
+ invite: "Einladen",
1221
+ listTitle: "Einladungen",
1222
+ empty: "Noch niemand ist eingeladen.",
1223
+ loading: "Wird geladen…",
1224
+ status: { open: "Offen", accepted: "Angenommen", expired: "Abgelaufen", revoked: "Zurückgezogen" },
1225
+ sent: (date) => `Gesendet am ${date}`,
1226
+ // kastlan's "Gültig bis".
1227
+ expires: (date) => `Gültig bis ${date}`,
1228
+ invitedBy: (name) => `von ${name}`,
1229
+ resend: (email) => `${email} einen neuen Link senden`,
1230
+ copyLink: "Einladungslink kopieren",
1231
+ revoke: (email) => `Einladung an ${email} zurückziehen`,
1232
+ consoleHint:
1233
+ "Dieser Server verschickt keine Mails – sie werden ins Server-Log geschrieben. Kopieren Sie jeden Einladungslink hier und geben Sie ihn selbst weiter: Er wird nur einmal angezeigt.",
1234
+ linkReady: (email) => `Der Einladungslink für ${email}, nur dieses eine Mal angezeigt:`,
1235
+ notSent: (email) =>
1236
+ `${email} ist eingeladen, aber die Mail konnte nicht gesendet werden. Senden Sie sie erneut.`,
1237
+ failed: "Das hat nicht geklappt. Bitte erneut versuchen.",
996
1238
  },
997
1239
  characterCount: {
998
1240
  // "Zeichen" is the same in singular and plural.
@@ -1127,5 +1369,85 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1127
1369
  ? `Den ungeprüften Text in „${group}“ bestätigen?`
1128
1370
  : `Alle ${n(count)} ungeprüften Texte in „${group}“ bestätigen – auch die nicht angezeigten?`,
1129
1371
  },
1372
+ // 0.31.0 — docs/settings-harmonization.md §4.3 and docs/landing-demo-harmonization.md
1373
+ // §4–§5: the settings shell, the landing page's generic words and the demo. The group
1374
+ // names are the contracts' ("Darstellung", "Konto", "Sicherheit", "Benachrichtigungen",
1375
+ // "Daten"); the help lines name things as `accountSettings`, `sessions` and
1376
+ // `dataExport` do. Formal "Sie".
1377
+ settings: {
1378
+ title: "Einstellungen",
1379
+ search: "Einstellungen durchsuchen",
1380
+ searchPlaceholder: "Einstellungen durchsuchen…",
1381
+ results: "Passende Einstellungen",
1382
+ noMatches: (query) => `Keine Einstellung passt zu „${query}“.`,
1383
+ // As `commandPalette.clear`.
1384
+ clearSearch: "Suche löschen",
1385
+ back: "Zurück zu den Einstellungen",
1386
+ sections: "Einstellungsbereiche",
1387
+ // "Treffer" is the same in singular and plural.
1388
+ matchCount: (count) => `${n(count)} Treffer`,
1389
+ groups: {
1390
+ appearance: {
1391
+ title: "Darstellung",
1392
+ // "Theme", as `topBar.theme`.
1393
+ help: "Sprache, Theme und wie die App auf diesem Gerät aussieht.",
1394
+ },
1395
+ account: {
1396
+ title: "Konto",
1397
+ help: "Ihr Profil und Ihre E-Mail-Adresse.",
1398
+ },
1399
+ security: {
1400
+ title: "Sicherheit",
1401
+ help: "Wie Sie sich anmelden: Passwort, Zwei-Faktor-Codes, Passkeys und Sitzungen.",
1402
+ },
1403
+ notifications: {
1404
+ title: "Benachrichtigungen",
1405
+ help: "Worüber Sie informiert werden, wann und auf welchen Geräten.",
1406
+ },
1407
+ data: {
1408
+ title: "Daten",
1409
+ help: "Ihre Daten exportieren oder zusammen mit Ihrem Konto löschen.",
1410
+ },
1411
+ },
1412
+ },
1413
+ landing: {
1414
+ signIn: "Anmelden",
1415
+ requestAccess: "Zugang anfragen",
1416
+ getStarted: "Jetzt starten",
1417
+ tryDemo: "Demo ausprobieren",
1418
+ openApp: "App öffnen",
1419
+ continueDemo: "Demo fortsetzen",
1420
+ beta: "Beta",
1421
+ // Plain text: a mail's subject and body lines, never HTML.
1422
+ accessSubject: (app) => (app ? `Zugang zu ${app}` : "Zugangsanfrage"),
1423
+ accessName: "Name:",
1424
+ // "Unternehmen", as `companySwitcher`.
1425
+ accessCompany: "Unternehmen:",
1426
+ accessUse: "Wofür Sie die App nutzen möchten:",
1427
+ },
1428
+ demo: {
1429
+ starting: "Demo wird gestartet…",
1430
+ rateLimited: (minutes) =>
1431
+ minutes
1432
+ ? `Zu viele Demos aus diesem Netzwerk. Versuchen Sie es in ${n(minutes)} min erneut.`
1433
+ : "Zu viele Demos aus diesem Netzwerk. Versuchen Sie es später erneut.",
1434
+ capacity: "Die Demo ist gerade ausgelastet. Versuchen Sie es später erneut.",
1435
+ unavailable: "Die Demo ist gerade nicht verfügbar.",
1436
+ failed: "Die Demo konnte nicht gestartet werden. Bitte versuchen Sie es erneut.",
1437
+ // As `legal.backHome`.
1438
+ backToStart: "Zurück zur Startseite",
1439
+ hoursLeft: (hours, minutes) => `Demo · noch ${n(hours)} h ${n(minutes)} min`,
1440
+ minutesLeft: (minutes) => `Demo · noch ${n(minutes)} min`,
1441
+ badge: "Demo",
1442
+ readOnly: "Sie sehen Beispieldaten. Änderungen sind nicht möglich.",
1443
+ sandbox: "Was Sie selbst anlegen, wird gelöscht, wenn die Demo endet.",
1444
+ details: "Demo-Details",
1445
+ writeLocked: "In der Demo nicht möglich.",
1446
+ endedTitle: "Die Demo ist beendet",
1447
+ endedReadOnly: "Die Beispieldaten werden regelmäßig zurückgesetzt.",
1448
+ endedSandbox:
1449
+ "Die Beispieldaten werden regelmäßig zurückgesetzt; was Sie in der Demo selbst angelegt haben, wird gelöscht.",
1450
+ restart: "Neue Demo starten",
1451
+ },
1130
1452
  };
1131
1453
  }
@@ -66,6 +66,20 @@ import type { VerifyEmailLabels } from "../auth/verify-email";
66
66
  import type { NotFoundLabels } from "../auth/not-found-page";
67
67
  import type { AcceptInvitationLabels } from "../auth/accept-invitation";
68
68
  import type { CompanySwitcherLabels } from "../shell/company-switcher";
69
+ import type { EmailChangeLabels } from "../account/email-change-setting";
70
+ import type { SessionsLabels } from "../account/sessions-setting";
71
+ import type { DeleteAccountLabels } from "../account/delete-account-setting";
72
+ import type { DataExportLabels } from "../account/data-export-setting";
73
+ import type { UserRosterLabels } from "../admin/user-roster";
74
+ import type { RoleSelectLabels } from "../admin/role-select";
75
+ import type { ReviewerScopeLabels } from "../admin/reviewer-scope-editor";
76
+ import type { AdminActionLabels } from "../admin/admin-action-confirm";
77
+ import type { AdminActionLogLabels } from "../admin/admin-action-log";
78
+ import type { TransferOwnershipLabels } from "../admin/transfer-ownership-dialog";
79
+ import type { InvitationsLabels } from "../admin/invitations-panel";
80
+ import type { SettingsLabels } from "../settings/settings-labels";
81
+ import type { LandingLabels } from "../landing/landing-labels";
82
+ import type { DemoLabels } from "../demo/demo-labels";
69
83
  import type { AccountStateLabels } from "../components/account-chips";
70
84
  import type { ShareCardLabels } from "../components/share-card";
71
85
  import type { ReauthDialogLabels } from "../components/reauth-dialog";
@@ -350,6 +364,34 @@ export interface UiKitLabels {
350
364
  acceptInvitation: AcceptInvitationLabels;
351
365
  /** 0.29.0: kastlan's switcher between a user's companies (§5.3). */
352
366
  companySwitcher: CompanySwitcherLabels;
367
+ /** 0.30.0: changing the account's address with re-verification (docs/user-admin-harmonization.md §6.2). */
368
+ emailChange: EmailChangeLabels;
369
+ /** 0.30.0: sign out everywhere, and kastlan's device list (§6.3). */
370
+ sessions: SessionsLabels;
371
+ /** 0.30.0: deletion in two stages (§6.4). */
372
+ deleteAccount: DeleteAccountLabels;
373
+ /** 0.30.0: the self-service JSON export (§6.5). */
374
+ dataExport: DataExportLabels;
375
+ /** 0.30.0: the admin user list's columns (§3). */
376
+ userRoster: UserRosterLabels;
377
+ /** 0.30.0: picking one or several roles, with the reasons a choice is locked (§4.1). */
378
+ roleSelect: RoleSelectLabels;
379
+ /** 0.30.0: a translation reviewer's languages and areas. */
380
+ reviewerScope: ReviewerScopeLabels;
381
+ /** 0.30.0: an admin action's confirmation and refusals (§4.2). */
382
+ adminAction: AdminActionLabels;
383
+ /** 0.30.0: the admin_actions list (§4.3). */
384
+ adminActionLog: AdminActionLogLabels;
385
+ /** 0.30.0: handing an account's work to another (Kurvenschmiede). */
386
+ transferOwnership: TransferOwnershipLabels;
387
+ /** 0.30.0: the invitations panel (§5). */
388
+ invitations: InvitationsLabels;
389
+ /** 0.31.0: the settings and admin pages' shell (docs/settings-harmonization.md §4.3). */
390
+ settings: SettingsLabels;
391
+ /** 0.31.0: the public landing page's kit words (docs/landing-demo-harmonization.md §4). */
392
+ landing: LandingLabels;
393
+ /** 0.31.0: the demo's start, banner and end (§5). */
394
+ demo: DemoLabels;
353
395
  /** 0.22.0: the screen-reader words of `Input` / `Textarea`'s `showCount` counter. */
354
396
  characterCount: CharacterCountLabels;
355
397
  /** 0.22.0: `CountrySelect`. Its list's "no results" and counts are `combobox`'s. */