@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
@@ -3,6 +3,8 @@ import { formatFileSize } from "./kit-labels.js";
3
3
  function germanLabels(numberLocale) {
4
4
  const num = new Intl.NumberFormat(numberLocale);
5
5
  const n = (value) => num.format(value);
6
+ const wait = (seconds) => seconds < 60 ? `${n(Math.ceil(seconds))} s` : `${n(Math.ceil(seconds / 60))} min`;
7
+ const rateLimited = (seconds) => !seconds || seconds <= 0 ? "Zu viele Versuche. Bitte warten Sie einen Moment und versuchen Sie es dann noch einmal." : `Zu viele Versuche. Versuchen Sie es in ${wait(seconds)} erneut.`;
6
8
  return {
7
9
  feedbackAttachment: {
8
10
  attachmentAdd: "Anhang hinzuf\xFCgen",
@@ -51,6 +53,7 @@ function germanLabels(numberLocale) {
51
53
  // written here with "ß" like the rest of this source; `swiss()` makes it "grösser".
52
54
  feedbackStatus: {
53
55
  OPEN: "Offen",
56
+ READY: "Bereit zur Umsetzung",
54
57
  IN_PROGRESS: "In Bearbeitung",
55
58
  IN_EVALUATION: "Zur Pr\xFCfung",
56
59
  NEEDS_LIVE_TEST: "Live testen",
@@ -109,6 +112,7 @@ function germanLabels(numberLocale) {
109
112
  phoneActions: "Feedback-Aktionen"
110
113
  },
111
114
  feedbackDetail: {
115
+ subject: "Betreff",
112
116
  body: "Beschreibung",
113
117
  edit: "Bearbeiten",
114
118
  editDescription: "Beschreibung bearbeiten",
@@ -139,7 +143,10 @@ function germanLabels(numberLocale) {
139
143
  role: "Rolle",
140
144
  memberSince: "Mitglied seit",
141
145
  displayName: "Anzeigename",
142
- save: "Speichern"
146
+ save: "Speichern",
147
+ firstName: "Vorname",
148
+ lastName: "Nachname",
149
+ nameRequired: "Geben Sie Vor- und Nachnamen ein."
143
150
  },
144
151
  password: {
145
152
  title: "Passwort \xE4ndern",
@@ -163,7 +170,9 @@ function germanLabels(numberLocale) {
163
170
  disable: "Deaktivieren",
164
171
  qrAlt: "QR-Code f\xFCr die Authenticator-App",
165
172
  secretHint: "Scannen nicht m\xF6glich? Stattdessen diesen Schl\xFCssel in der App eingeben:",
166
- copySecret: "Schl\xFCssel kopieren"
173
+ copySecret: "Schl\xFCssel kopieren",
174
+ // 0.31.0: the card's title; the state ("Aktiv") stands beside it.
175
+ title: "Zwei-Faktor-Authentifizierung"
167
176
  },
168
177
  passkeys: {
169
178
  title: "Passkeys",
@@ -680,7 +689,9 @@ function germanLabels(numberLocale) {
680
689
  invited: "Eingeladen",
681
690
  registered: "Registriert",
682
691
  unverified: "Nicht best\xE4tigt",
683
- passwordChange: "Passwort\xE4nderung erforderlich"
692
+ passwordChange: "Passwort\xE4nderung erforderlich",
693
+ deletion: "L\xF6schung beantragt",
694
+ deletionOn: (date) => `L\xF6schung am ${date}`
684
695
  },
685
696
  shareCard: {
686
697
  dialogTitle: "Teilen",
@@ -845,7 +856,18 @@ Die vollst\xE4ndige Postanschrift wird betroffenen Personen und Aufsichtsbeh\xF6
845
856
  setPasswordSubmit: "Passwort vergeben und anmelden",
846
857
  setPasswordFailed: "Das Passwort konnte nicht vergeben werden.",
847
858
  expired: "Diese Anmeldung ist abgelaufen. Bitte melden Sie sich erneut an.",
848
- backToSignIn: "Zur\xFCck zur Anmeldung"
859
+ backToSignIn: "Zur\xFCck zur Anmeldung",
860
+ // kastlan's backup-code words ("Backup-Code" — not keksdose's
861
+ // "Wiederherstellungscode", which is the key of its end-to-end encryption).
862
+ useRecoveryCode: "Backup-Code verwenden",
863
+ useAuthenticatorCode: "Authenticator-App verwenden",
864
+ recoveryCode: "Backup-Code",
865
+ recoveryIntro: "Geben Sie einen der Backup-Codes ein, die Sie beim Einrichten der Zwei-Faktor-Authentifizierung gespeichert haben.",
866
+ recoveryCodeHint: (length) => `${n(length)} Buchstaben und Ziffern. Bindestriche und Leerzeichen spielen keine Rolle.`,
867
+ recoveryCodeInvalid: "Dieser Backup-Code ist ung\xFCltig oder wurde schon verwendet.",
868
+ rateLimited,
869
+ // 0.31.0: the same words as `landing.requestAccess`.
870
+ requestAccess: "Zugang anfragen"
849
871
  },
850
872
  register: {
851
873
  firstName: "Vorname",
@@ -866,7 +888,8 @@ Die vollst\xE4ndige Postanschrift wird betroffenen Personen und Aufsichtsbeh\xF6
866
888
  registrationClosed: "Neue Konten gibt es nur auf Einladung. Bitten Sie den Betreiber, Ihre E-Mail-Adresse einzuladen.",
867
889
  invitationInvalid: "Dieser Einladungslink ist ung\xFCltig.",
868
890
  invitationExpired: "Diese Einladung ist abgelaufen. Bitten Sie um eine neue.",
869
- failed: "Registrierung fehlgeschlagen. Bitte versuchen Sie es erneut."
891
+ failed: "Registrierung fehlgeschlagen. Bitte versuchen Sie es erneut.",
892
+ rateLimited
870
893
  },
871
894
  completeName: {
872
895
  title: "Namen vervollst\xE4ndigen",
@@ -885,7 +908,8 @@ Die vollst\xE4ndige Postanschrift wird betroffenen Personen und Aufsichtsbeh\xF6
885
908
  sent: (email) => `Falls es ein Konto zu ${email} gibt, ist der Link unterwegs.`,
886
909
  sentHint: "Der Link gilt eine Stunde und funktioniert genau einmal. Sehen Sie auch im Spam-Ordner nach.",
887
910
  backToSignIn: "Zur\xFCck zur Anmeldung",
888
- error: "Anfrage fehlgeschlagen. Bitte versuchen Sie es sp\xE4ter noch einmal."
911
+ error: "Anfrage fehlgeschlagen. Bitte versuchen Sie es sp\xE4ter noch einmal.",
912
+ rateLimited
889
913
  },
890
914
  resetPassword: {
891
915
  title: "Neues Passwort vergeben",
@@ -902,7 +926,8 @@ Die vollst\xE4ndige Postanschrift wird betroffenen Personen und Aufsichtsbeh\xF6
902
926
  requestNew: "Neuen Link anfordern",
903
927
  success: "Ihr Passwort ist ge\xE4ndert. Sie k\xF6nnen sich jetzt damit anmelden.",
904
928
  sessionsEnded: "Angemeldete Ger\xE4te wurden abgemeldet \u2013 dort m\xFCssen Sie sich neu anmelden.",
905
- signIn: "Zur Anmeldung"
929
+ signIn: "Zur Anmeldung",
930
+ rateLimited
906
931
  },
907
932
  verifyEmail: {
908
933
  title: "E-Mail-Adresse best\xE4tigen",
@@ -946,12 +971,197 @@ Die vollst\xE4ndige Postanschrift wird betroffenen Personen und Aufsichtsbeh\xF6
946
971
  register: "Registrieren"
947
972
  },
948
973
  companySwitcher: {
949
- // "Firma", as kastlan's sign-up asks for the "Firmenname".
950
- switchCompany: "Firma wechseln",
951
- heading: "Firmen",
952
- current: (name) => `Firma: ${name}`,
974
+ // "Unternehmen" (0.30), the word kastlan's admin strings use ("Aus dem Unternehmen
975
+ // entfernen"), so one German word names a company across the kit.
976
+ switchCompany: "Unternehmen wechseln",
977
+ heading: "Unternehmen",
978
+ current: (name) => `Unternehmen: ${name}`,
953
979
  currentMark: "(aktuell)",
954
- switching: "Firma wird gewechselt\u2026"
980
+ switching: "Unternehmen wird gewechselt\u2026"
981
+ },
982
+ // 0.30.0 — docs/user-admin-harmonization.md: keksdose's reviewed de-CH for the admin
983
+ // words (admin.users.*), Kurvenschmiede's for transfer, invitations and sessions,
984
+ // kastlan's for "Unternehmen", the throttle and "Überall abmelden"; written fresh where
985
+ // no app had the sentence. Formal "Sie". "Administratorrechte" rather than "der letzte
986
+ // Administrator", which would give the reader a gender.
987
+ emailChange: {
988
+ title: "E-Mail-Adresse",
989
+ current: "Aktuelle Adresse",
990
+ newEmail: "Neue E-Mail-Adresse",
991
+ password: "Aktuelles Passwort",
992
+ passwordHint: "Mit Ihrer Adresse melden Sie sich an \u2013 deshalb braucht eine \xC4nderung Ihr Passwort.",
993
+ emailTagUse: (address) => `${address} verwenden`,
994
+ emailTagHint: "Viele Anbieter stellen name+kennung@\u2026 an dasselbe Postfach zu, damit Post von dieser App filter- und zuordenbar wird. Pr\xFCfen Sie vorher, ob Ihrer das tut: Angemeldet wird dann mit der markierten Adresse.",
995
+ submit: "E-Mail-Adresse \xE4ndern",
996
+ sameAsCurrent: "Das ist bereits Ihre Adresse.",
997
+ emailTaken: "Ein Konto mit dieser E-Mail-Adresse existiert bereits.",
998
+ wrongPassword: "Das Passwort ist falsch.",
999
+ pending: (newEmail) => `Best\xE4tigen Sie den Link, den wir an ${newEmail} geschickt haben.`,
1000
+ pendingHint: (currentEmail) => `Bis dahin melden Sie sich weiterhin mit ${currentEmail} an. Sehen Sie auch im Spam-Ordner nach.`,
1001
+ resend: "Link erneut senden",
1002
+ resent: "Wir haben den Link erneut gesendet.",
1003
+ cancel: "\xC4nderung abbrechen",
1004
+ confirmed: (email) => `Ihre E-Mail-Adresse ist jetzt ${email}.`,
1005
+ passkeyNote: "Ihre Passkeys funktionieren weiterhin. Ihr Ger\xE4t zeigt sie eventuell noch unter der alten Adresse an.",
1006
+ rateLimited,
1007
+ failed: "Das hat nicht geklappt. Bitte erneut versuchen."
1008
+ },
1009
+ sessions: {
1010
+ title: "Sitzungen",
1011
+ description: "Auf einem Ger\xE4t angemeldet, das Sie nicht mehr nutzen oder dem Sie nicht trauen? Melden Sie sich \xFCberall ab.",
1012
+ signOutEverywhere: "\xDCberall abmelden\u2026",
1013
+ signOutEverywherePrompt: "Damit enden alle Sitzungen, auch diese: Sie werden auch auf diesem Ger\xE4t abgemeldet und melden sich hier neu an.",
1014
+ confirmSignOutEverywhere: "\xDCberall abmelden",
1015
+ list: "Wo Sie angemeldet sind",
1016
+ loading: "Sitzungen werden geladen\u2026",
1017
+ empty: "Keine Sitzungen vorhanden.",
1018
+ current: "Dieses Ger\xE4t",
1019
+ unknownDevice: "Unbekanntes Ger\xE4t",
1020
+ // A colon: `when` is either "vor 3 Stunden" or a date.
1021
+ lastActive: (when) => `Zuletzt aktiv: ${when}`,
1022
+ ip: (address) => `IP ${address}`,
1023
+ revoke: "Abmelden",
1024
+ // Starts with `revoke`, the button's visible text, for voice control.
1025
+ revokeItem: (device) => `Abmelden: ${device}`,
1026
+ failed: "Das hat nicht geklappt. Bitte erneut versuchen."
1027
+ },
1028
+ deleteAccount: {
1029
+ title: "Konto l\xF6schen",
1030
+ afterDays: (days) => days === 1 ? "Ihr Konto wird sofort deaktiviert und 1 Tag sp\xE4ter endg\xFCltig gel\xF6scht." : `Ihr Konto wird sofort deaktiviert und ${n(days)} Tage sp\xE4ter endg\xFCltig gel\xF6scht.`,
1031
+ operator: "Ihr Konto wird sofort deaktiviert und anschlie\xDFend vom Betreiber endg\xFCltig gel\xF6scht.",
1032
+ arm: "Konto l\xF6schen\u2026",
1033
+ prompt: "Sie werden auf allen Ger\xE4ten abgemeldet, und Ihr Konto kann nicht mehr verwendet werden.",
1034
+ handOver: (count) => count === 1 ? "1 Element, das andere sehen k\xF6nnen, geht an einen Administrator \xFCber." : `${n(count)} Elemente, die andere sehen k\xF6nnen, gehen an einen Administrator \xFCber.`,
1035
+ confirm: "Mein Konto l\xF6schen",
1036
+ done: "Ihr Konto ist deaktiviert. Sie werden abgemeldet.",
1037
+ wrongPassword: "Das Passwort ist falsch.",
1038
+ confirmationMismatch: "Das ist nicht die Adresse Ihres Kontos.",
1039
+ lastAdmin: "Ihr Konto ist das letzte mit Administratorrechten. Geben Sie zuerst einem anderen Konto Administratorrechte.",
1040
+ lastAdminOf: (companies) => `Ihr Konto ist das letzte mit Administratorrechten bei ${companies}. Geben Sie dort zuerst einem anderen Konto Administratorrechte.`,
1041
+ // keksdose's "Haushalt".
1042
+ householdHasMembers: "Ihr Haushalt hat weitere Mitglieder, deshalb kann das Konto hier nicht gel\xF6scht werden. Bitte schreiben Sie dem Betreiber.",
1043
+ rateLimited,
1044
+ failed: "Ihr Konto konnte nicht gel\xF6scht werden. Bitte versuchen Sie es erneut."
1045
+ },
1046
+ dataExport: {
1047
+ title: "Ihre Daten exportieren",
1048
+ description: "Laden Sie eine Kopie der Daten Ihres Kontos als JSON-Datei herunter.",
1049
+ download: "Meine Daten herunterladen",
1050
+ started: "Ihr Download hat begonnen.",
1051
+ saveAgain: "Nicht gestartet? Datei speichern",
1052
+ rateLimited: (seconds) => seconds && seconds > 0 ? `Sie haben Ihre Daten gerade erst exportiert. Versuchen Sie es in ${wait(seconds)} erneut.` : "Sie haben Ihre Daten gerade erst exportiert. Bitte versuchen Sie es in einer Minute erneut.",
1053
+ failed: "Der Export ist fehlgeschlagen. Bitte versuchen Sie es erneut."
1054
+ },
1055
+ userRoster: {
1056
+ name: "Name",
1057
+ email: "E-Mail",
1058
+ role: "Rolle",
1059
+ state: "Status",
1060
+ created: "Erstellt",
1061
+ lastLogin: "Letzte Anmeldung",
1062
+ never: "Nie",
1063
+ actions: "Aktionen",
1064
+ actionsFor: (name) => `Aktionen f\xFCr ${name}`
1065
+ },
1066
+ roleSelect: {
1067
+ label: "Rolle",
1068
+ rolesLegend: "Rollen",
1069
+ roleOf: (name) => `Rolle von ${name}`,
1070
+ lockedLastAdmin: "Das letzte aktive Konto mit Administratorrechten beh\xE4lt diese Rolle.",
1071
+ lockedSelf: "Ihre eigene Rolle k\xF6nnen Sie nicht \xE4ndern.",
1072
+ notForLastAdmin: "nicht f\xFCr das letzte Administratorkonto",
1073
+ notForSelf: "nicht f\xFCr Ihr eigenes Konto",
1074
+ unavailable: (role, reason) => `${role} (${reason})`
1075
+ },
1076
+ reviewerScope: {
1077
+ languages: "Sprachen",
1078
+ hint: "Kreuzen Sie die Sprachen an, die diese Person pr\xFCft.",
1079
+ none: "Keine Sprache: Beim Speichern wird die Pr\xFCfrolle entzogen.",
1080
+ areas: "Beschr\xE4nken auf",
1081
+ legalOnly: "Nur die rechtlichen Seiten",
1082
+ legalOnlyHint: "Impressum, Datenschutzerkl\xE4rung und Nutzungsbedingungen \u2013 f\xFCr eine Juristin oder einen Juristen statt f\xFCr Muttersprachler.",
1083
+ failed: "Die Pr\xFCfrolle konnte nicht gespeichert werden. Bitte versuchen Sie es erneut."
1084
+ },
1085
+ adminAction: {
1086
+ confirm: "Best\xE4tigen",
1087
+ cancel: "Abbrechen",
1088
+ close: "Schlie\xDFen",
1089
+ lastAdmin: "Dies ist das letzte aktive Konto mit Administratorrechten. Geben Sie zuerst einem anderen Konto Administratorrechte.",
1090
+ self: "Mit Ihrem eigenen Konto ist das nicht m\xF6glich.",
1091
+ confirmationMismatch: "Die Adresse passt nicht zu diesem Konto. Pr\xFCfen Sie, bei welchem Konto Sie sind.",
1092
+ otherCompanies: "Dieses Konto geh\xF6rt auch zu anderen Unternehmen, deshalb kann nur der Plattformbetreiber das tun. Sie k\xF6nnen es stattdessen aus diesem Unternehmen entfernen.",
1093
+ removeFromCompany: "Aus dem Unternehmen entfernen",
1094
+ failed: "Das hat nicht geklappt. Bitte erneut versuchen."
1095
+ },
1096
+ adminActionLog: {
1097
+ title: "Admin-Aktionen",
1098
+ empty: "Noch keine Admin-Aktionen.",
1099
+ loading: "Wird geladen\u2026",
1100
+ // "durch", not "von": it takes the accusative, so `erased` ("ein gelöschtes Konto")
1101
+ // reads right both on its own and after it.
1102
+ by: (actor) => `durch ${actor}`,
1103
+ bySelf: "durch die Person selbst",
1104
+ automatic: "automatisch",
1105
+ erased: "ein gel\xF6schtes Konto",
1106
+ filteredTo: (target) => `Nur ${target}`,
1107
+ showAll: "Alle Aktionen zeigen",
1108
+ filterBy: (target) => `Nur Aktionen zu ${target} zeigen`,
1109
+ actions: {
1110
+ deactivate: "Deaktiviert",
1111
+ reactivate: "Reaktiviert",
1112
+ role: "Rolle ge\xE4ndert",
1113
+ membership_remove: "Aus dem Unternehmen entfernt",
1114
+ password_change_require: "Neues Passwort verlangt",
1115
+ password_change_withdraw: "Passwortforderung zur\xFCckgenommen",
1116
+ mail_verification: "Best\xE4tigungsmail gesendet",
1117
+ mail_reset: "Mail zum Zur\xFCcksetzen des Passworts gesendet",
1118
+ reviewer: "Pr\xFCfrolle ge\xE4ndert",
1119
+ invite: "Eingeladen",
1120
+ invite_resend: "Einladung erneut gesendet",
1121
+ invite_revoke: "Einladung zur\xFCckgezogen",
1122
+ transfer: "Arbeit \xFCbergeben",
1123
+ deletion_request: "L\xF6schung beantragt",
1124
+ deletion_cancel: "L\xF6schung aufgehoben",
1125
+ erase: "Konto endg\xFCltig gel\xF6scht"
1126
+ }
1127
+ },
1128
+ transferOwnership: {
1129
+ title: (name) => `Arbeit von ${name} \xFCbergeben`,
1130
+ body: "Alles, was diesem Konto geh\xF6rt, geht in einem Schritt an das gew\xE4hlte Konto.",
1131
+ recipient: "\xDCbergeben an",
1132
+ choose: "Konto w\xE4hlen\u2026",
1133
+ chooseFirst: "W\xE4hlen Sie, wer die Arbeit erh\xE4lt",
1134
+ confirm: "\xDCbergeben",
1135
+ customer: "Kundenkonto",
1136
+ deactivated: "deaktiviert",
1137
+ self: "dasselbe Konto",
1138
+ unavailable: (account, reason) => `${account} (${reason})`,
1139
+ noCandidates: "Kein anderes Konto kann sie erhalten."
1140
+ },
1141
+ invitations: {
1142
+ email: "E-Mail-Adresse",
1143
+ invalidEmail: "Bitte eine vollst\xE4ndige E-Mail-Adresse eingeben.",
1144
+ role: "Rolle",
1145
+ scope: "Bereich",
1146
+ scopeNone: "Keiner",
1147
+ language: "Sprache der Einladung",
1148
+ note: "Notiz",
1149
+ invite: "Einladen",
1150
+ listTitle: "Einladungen",
1151
+ empty: "Noch niemand ist eingeladen.",
1152
+ loading: "Wird geladen\u2026",
1153
+ status: { open: "Offen", accepted: "Angenommen", expired: "Abgelaufen", revoked: "Zur\xFCckgezogen" },
1154
+ sent: (date) => `Gesendet am ${date}`,
1155
+ // kastlan's "Gültig bis".
1156
+ expires: (date) => `G\xFCltig bis ${date}`,
1157
+ invitedBy: (name) => `von ${name}`,
1158
+ resend: (email) => `${email} einen neuen Link senden`,
1159
+ copyLink: "Einladungslink kopieren",
1160
+ revoke: (email) => `Einladung an ${email} zur\xFCckziehen`,
1161
+ consoleHint: "Dieser Server verschickt keine Mails \u2013 sie werden ins Server-Log geschrieben. Kopieren Sie jeden Einladungslink hier und geben Sie ihn selbst weiter: Er wird nur einmal angezeigt.",
1162
+ linkReady: (email) => `Der Einladungslink f\xFCr ${email}, nur dieses eine Mal angezeigt:`,
1163
+ notSent: (email) => `${email} ist eingeladen, aber die Mail konnte nicht gesendet werden. Senden Sie sie erneut.`,
1164
+ failed: "Das hat nicht geklappt. Bitte erneut versuchen."
955
1165
  },
956
1166
  characterCount: {
957
1167
  // "Zeichen" is the same in singular and plural.
@@ -1071,6 +1281,82 @@ Die vollst\xE4ndige Postanschrift wird betroffenen Personen und Aufsichtsbeh\xF6
1071
1281
  // The group's name quoted, as `columnMapper.roleOf`'s column: it is often a key
1072
1282
  // ("billing"), which unquoted would read as part of the sentence.
1073
1283
  confirmGroup: (count, group) => count === 1 ? `Den ungepr\xFCften Text in \u201E${group}\u201C best\xE4tigen?` : `Alle ${n(count)} ungepr\xFCften Texte in \u201E${group}\u201C best\xE4tigen \u2013 auch die nicht angezeigten?`
1284
+ },
1285
+ // 0.31.0 — docs/settings-harmonization.md §4.3 and docs/landing-demo-harmonization.md
1286
+ // §4–§5: the settings shell, the landing page's generic words and the demo. The group
1287
+ // names are the contracts' ("Darstellung", "Konto", "Sicherheit", "Benachrichtigungen",
1288
+ // "Daten"); the help lines name things as `accountSettings`, `sessions` and
1289
+ // `dataExport` do. Formal "Sie".
1290
+ settings: {
1291
+ title: "Einstellungen",
1292
+ search: "Einstellungen durchsuchen",
1293
+ searchPlaceholder: "Einstellungen durchsuchen\u2026",
1294
+ results: "Passende Einstellungen",
1295
+ noMatches: (query) => `Keine Einstellung passt zu \u201E${query}\u201C.`,
1296
+ // As `commandPalette.clear`.
1297
+ clearSearch: "Suche l\xF6schen",
1298
+ back: "Zur\xFCck zu den Einstellungen",
1299
+ sections: "Einstellungsbereiche",
1300
+ // "Treffer" is the same in singular and plural.
1301
+ matchCount: (count) => `${n(count)} Treffer`,
1302
+ groups: {
1303
+ appearance: {
1304
+ title: "Darstellung",
1305
+ // "Theme", as `topBar.theme`.
1306
+ help: "Sprache, Theme und wie die App auf diesem Ger\xE4t aussieht."
1307
+ },
1308
+ account: {
1309
+ title: "Konto",
1310
+ help: "Ihr Profil und Ihre E-Mail-Adresse."
1311
+ },
1312
+ security: {
1313
+ title: "Sicherheit",
1314
+ help: "Wie Sie sich anmelden: Passwort, Zwei-Faktor-Codes, Passkeys und Sitzungen."
1315
+ },
1316
+ notifications: {
1317
+ title: "Benachrichtigungen",
1318
+ help: "Wor\xFCber Sie informiert werden, wann und auf welchen Ger\xE4ten."
1319
+ },
1320
+ data: {
1321
+ title: "Daten",
1322
+ help: "Ihre Daten exportieren oder zusammen mit Ihrem Konto l\xF6schen."
1323
+ }
1324
+ }
1325
+ },
1326
+ landing: {
1327
+ signIn: "Anmelden",
1328
+ requestAccess: "Zugang anfragen",
1329
+ getStarted: "Jetzt starten",
1330
+ tryDemo: "Demo ausprobieren",
1331
+ openApp: "App \xF6ffnen",
1332
+ continueDemo: "Demo fortsetzen",
1333
+ beta: "Beta",
1334
+ // Plain text: a mail's subject and body lines, never HTML.
1335
+ accessSubject: (app) => app ? `Zugang zu ${app}` : "Zugangsanfrage",
1336
+ accessName: "Name:",
1337
+ // "Unternehmen", as `companySwitcher`.
1338
+ accessCompany: "Unternehmen:",
1339
+ accessUse: "Wof\xFCr Sie die App nutzen m\xF6chten:"
1340
+ },
1341
+ demo: {
1342
+ starting: "Demo wird gestartet\u2026",
1343
+ rateLimited: (minutes) => minutes ? `Zu viele Demos aus diesem Netzwerk. Versuchen Sie es in ${n(minutes)} min erneut.` : "Zu viele Demos aus diesem Netzwerk. Versuchen Sie es sp\xE4ter erneut.",
1344
+ capacity: "Die Demo ist gerade ausgelastet. Versuchen Sie es sp\xE4ter erneut.",
1345
+ unavailable: "Die Demo ist gerade nicht verf\xFCgbar.",
1346
+ failed: "Die Demo konnte nicht gestartet werden. Bitte versuchen Sie es erneut.",
1347
+ // As `legal.backHome`.
1348
+ backToStart: "Zur\xFCck zur Startseite",
1349
+ hoursLeft: (hours, minutes) => `Demo \xB7 noch ${n(hours)} h ${n(minutes)} min`,
1350
+ minutesLeft: (minutes) => `Demo \xB7 noch ${n(minutes)} min`,
1351
+ badge: "Demo",
1352
+ readOnly: "Sie sehen Beispieldaten. \xC4nderungen sind nicht m\xF6glich.",
1353
+ sandbox: "Was Sie selbst anlegen, wird gel\xF6scht, wenn die Demo endet.",
1354
+ details: "Demo-Details",
1355
+ writeLocked: "In der Demo nicht m\xF6glich.",
1356
+ endedTitle: "Die Demo ist beendet",
1357
+ endedReadOnly: "Die Beispieldaten werden regelm\xE4\xDFig zur\xFCckgesetzt.",
1358
+ endedSandbox: "Die Beispieldaten werden regelm\xE4\xDFig zur\xFCckgesetzt; was Sie in der Demo selbst angelegt haben, wird gel\xF6scht.",
1359
+ restart: "Neue Demo starten"
1074
1360
  }
1075
1361
  };
1076
1362
  }