@eifi1/ui-kit 0.44.0 → 0.46.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 (285) hide show
  1. package/README.md +29 -14
  2. package/dist/admin/admin-action-log-labels.js +9 -0
  3. package/dist/admin/admin-action-log-labels.js.map +1 -1
  4. package/dist/admin/admin-action-log.d.ts +18 -1
  5. package/dist/admin/admin-action-log.js +25 -16
  6. package/dist/admin/admin-action-log.js.map +1 -1
  7. package/dist/admin/admin-area-labels.d.ts +15 -0
  8. package/dist/admin/admin-area-labels.js +6 -1
  9. package/dist/admin/admin-area-labels.js.map +1 -1
  10. package/dist/admin/admin-overview.d.ts +16 -1
  11. package/dist/admin/admin-overview.js +12 -1
  12. package/dist/admin/admin-overview.js.map +1 -1
  13. package/dist/admin/mail-test-card-labels.d.ts +3 -0
  14. package/dist/admin/mail-test-card-labels.js +17 -0
  15. package/dist/admin/mail-test-card-labels.js.map +1 -0
  16. package/dist/admin/mail-test-card.d.ts +75 -0
  17. package/dist/admin/mail-test-card.js +82 -0
  18. package/dist/admin/mail-test-card.js.map +1 -0
  19. package/dist/components/appearance-labels.d.ts +10 -0
  20. package/dist/components/appearance-labels.js +6 -1
  21. package/dist/components/appearance-labels.js.map +1 -1
  22. package/dist/components/data-table-column-settings.js +2 -2
  23. package/dist/components/data-table-column-settings.js.map +1 -1
  24. package/dist/components/data-table-head.js +2 -2
  25. package/dist/components/data-table-head.js.map +1 -1
  26. package/dist/components/data-table-mobile.js +17 -2
  27. package/dist/components/data-table-mobile.js.map +1 -1
  28. package/dist/components/data-table-row-actions.d.ts +18 -2
  29. package/dist/components/data-table-row-actions.js +86 -2
  30. package/dist/components/data-table-row-actions.js.map +1 -1
  31. package/dist/components/data-table-shared.d.ts +2 -0
  32. package/dist/components/data-table-shared.js +17 -2
  33. package/dist/components/data-table-shared.js.map +1 -1
  34. package/dist/components/data-table.d.ts +43 -2
  35. package/dist/components/data-table.js +10 -10
  36. package/dist/components/data-table.js.map +1 -1
  37. package/dist/components/date-format-setting.d.ts +29 -0
  38. package/dist/components/date-format-setting.js +36 -0
  39. package/dist/components/date-format-setting.js.map +1 -0
  40. package/dist/components/swipeable-row.d.ts +8 -0
  41. package/dist/components/swipeable-row.js.map +1 -1
  42. package/dist/components/tabs.d.ts +3 -2
  43. package/dist/components/tabs.js +1 -1
  44. package/dist/components/tabs.js.map +1 -1
  45. package/dist/components/translation-review-editor.js +1 -0
  46. package/dist/components/translation-review-editor.js.map +1 -1
  47. package/dist/components/translation-review-labels.d.ts +5 -0
  48. package/dist/components/translation-review-labels.js +2 -0
  49. package/dist/components/translation-review-labels.js.map +1 -1
  50. package/dist/components/translation-review.d.ts +18 -8
  51. package/dist/components/translation-review.js +64 -7
  52. package/dist/components/translation-review.js.map +1 -1
  53. package/dist/components/write-lock-labels.js +2 -1
  54. package/dist/components/write-lock-labels.js.map +1 -1
  55. package/dist/components/write-lock.d.ts +33 -3
  56. package/dist/components/write-lock.js +9 -0
  57. package/dist/components/write-lock.js.map +1 -1
  58. package/dist/data-table.d.ts +1 -1
  59. package/dist/data-table.js.map +1 -1
  60. package/dist/eslint/index.js +1 -1
  61. package/dist/feedback/feedback-row-detail.d.ts +4 -2
  62. package/dist/feedback/feedback-row-detail.js +17 -26
  63. package/dist/feedback/feedback-row-detail.js.map +1 -1
  64. package/dist/feedback/feedback-swipe.d.ts +18 -0
  65. package/dist/feedback/feedback-swipe.js +10 -1
  66. package/dist/feedback/feedback-swipe.js.map +1 -1
  67. package/dist/i18n/defaults.js +9 -1
  68. package/dist/i18n/defaults.js.map +1 -1
  69. package/dist/i18n/german.js +81 -5
  70. package/dist/i18n/german.js.map +1 -1
  71. package/dist/i18n/kit-labels.d.ts +25 -1
  72. package/dist/i18n/kit-labels.js +8 -2
  73. package/dist/i18n/kit-labels.js.map +1 -1
  74. package/dist/i18n/locales/en.js +97 -7
  75. package/dist/i18n/locales/en.js.map +3 -3
  76. package/dist/i18n/locales/es.js +81 -5
  77. package/dist/i18n/locales/es.js.map +1 -1
  78. package/dist/i18n/locales/fr.js +81 -5
  79. package/dist/i18n/locales/fr.js.map +1 -1
  80. package/dist/i18n/locales/hu.js +81 -5
  81. package/dist/i18n/locales/hu.js.map +1 -1
  82. package/dist/i18n/locales/it.js +81 -5
  83. package/dist/i18n/locales/it.js.map +1 -1
  84. package/dist/i18n/locales/zh.js +81 -5
  85. package/dist/i18n/locales/zh.js.map +1 -1
  86. package/dist/i18n/review.js +16 -2
  87. package/dist/i18n/review.js.map +1 -1
  88. package/dist/index.d.ts +17 -2
  89. package/dist/index.js +40 -0
  90. package/dist/index.js.map +1 -1
  91. package/dist/lib/date-format.d.ts +81 -0
  92. package/dist/lib/date-format.js +56 -0
  93. package/dist/lib/date-format.js.map +1 -0
  94. package/dist/lib/format.d.ts +5 -1
  95. package/dist/lib/format.js +11 -5
  96. package/dist/lib/format.js.map +1 -1
  97. package/dist/notifications/device-zone-report.d.ts +27 -0
  98. package/dist/notifications/device-zone-report.js +24 -0
  99. package/dist/notifications/device-zone-report.js.map +1 -0
  100. package/dist/notifications/feedback-notification-types-labels.d.ts +7 -1
  101. package/dist/notifications/feedback-notification-types-labels.js +4 -1
  102. package/dist/notifications/feedback-notification-types-labels.js.map +1 -1
  103. package/dist/notifications/feedback-notification-types.d.ts +11 -5
  104. package/dist/notifications/feedback-notification-types.js +2 -1
  105. package/dist/notifications/feedback-notification-types.js.map +1 -1
  106. package/dist/notifications/notification-bell.d.ts +33 -0
  107. package/dist/notifications/notification-bell.js +74 -0
  108. package/dist/notifications/notification-bell.js.map +1 -0
  109. package/dist/notifications/notification-inbox.d.ts +77 -0
  110. package/dist/notifications/notification-inbox.js +206 -0
  111. package/dist/notifications/notification-inbox.js.map +1 -0
  112. package/dist/notifications/notification-types-setting.d.ts +6 -4
  113. package/dist/notifications/notification-types-setting.js +103 -45
  114. package/dist/notifications/notification-types-setting.js.map +1 -1
  115. package/dist/notifications/notification-types.d.ts +19 -7
  116. package/dist/notifications/notifications-labels.d.ts +41 -7
  117. package/dist/notifications/notifications-labels.js +18 -1
  118. package/dist/notifications/notifications-labels.js.map +1 -1
  119. package/dist/notifications/push-devices-setting.d.ts +20 -3
  120. package/dist/notifications/push-devices-setting.js +93 -33
  121. package/dist/notifications/push-devices-setting.js.map +1 -1
  122. package/dist/notifications/push-worker.d.ts +108 -0
  123. package/dist/notifications/push-worker.js +62 -0
  124. package/dist/notifications/push-worker.js.map +1 -0
  125. package/dist/notifications/quiet-hours-setting.d.ts +29 -17
  126. package/dist/notifications/quiet-hours-setting.js +9 -41
  127. package/dist/notifications/quiet-hours-setting.js.map +1 -1
  128. package/dist/notifications/time-zone-select.d.ts +5 -2
  129. package/dist/notifications/time-zone-select.js.map +1 -1
  130. package/dist/notifications/use-push-device.d.ts +4 -17
  131. package/dist/notifications/use-push-device.js +7 -15
  132. package/dist/notifications/use-push-device.js.map +1 -1
  133. package/dist/offline/local-first.d.ts +33 -0
  134. package/dist/offline/local-first.js +39 -0
  135. package/dist/offline/local-first.js.map +1 -0
  136. package/dist/offline/pwa-update-prompt-labels.d.ts +2 -0
  137. package/dist/offline/pwa-update-prompt-labels.js +9 -0
  138. package/dist/offline/pwa-update-prompt-labels.js.map +1 -0
  139. package/dist/offline/pwa-update-prompt.d.ts +32 -0
  140. package/dist/offline/pwa-update-prompt.js +36 -0
  141. package/dist/offline/pwa-update-prompt.js.map +1 -0
  142. package/dist/offline/query-persistence.d.ts +125 -0
  143. package/dist/offline/query-persistence.js +183 -0
  144. package/dist/offline/query-persistence.js.map +1 -0
  145. package/dist/offline/service-worker-updates.d.ts +46 -0
  146. package/dist/offline/service-worker-updates.js +39 -0
  147. package/dist/offline/service-worker-updates.js.map +1 -0
  148. package/dist/offline/shared-computer-labels.d.ts +2 -0
  149. package/dist/offline/shared-computer-labels.js +9 -0
  150. package/dist/offline/shared-computer-labels.js.map +1 -0
  151. package/dist/offline/shared-computer.d.ts +44 -0
  152. package/dist/offline/shared-computer.js +51 -0
  153. package/dist/offline/shared-computer.js.map +1 -0
  154. package/dist/offline/sign-out-pending-dialog-labels.d.ts +2 -0
  155. package/dist/offline/sign-out-pending-dialog-labels.js +14 -0
  156. package/dist/offline/sign-out-pending-dialog-labels.js.map +1 -0
  157. package/dist/offline/sign-out-pending-dialog.d.ts +58 -0
  158. package/dist/offline/sign-out-pending-dialog.js +66 -0
  159. package/dist/offline/sign-out-pending-dialog.js.map +1 -0
  160. package/dist/offline.d.ts +11 -0
  161. package/dist/offline.js +33 -0
  162. package/dist/offline.js.map +1 -0
  163. package/dist/push-worker.d.ts +2 -0
  164. package/dist/push-worker.js +14 -0
  165. package/dist/push-worker.js.map +1 -0
  166. package/dist/shell/account-menu-text-size.d.ts +33 -0
  167. package/dist/shell/account-menu-text-size.js +51 -0
  168. package/dist/shell/account-menu-text-size.js.map +1 -0
  169. package/dist/shell/admin-menu.d.ts +24 -0
  170. package/dist/shell/admin-menu.js +12 -3
  171. package/dist/shell/admin-menu.js.map +1 -1
  172. package/dist/shell/top-bar-actions.d.ts +6 -2
  173. package/dist/shell/top-bar-actions.js +1 -0
  174. package/dist/shell/top-bar-actions.js.map +1 -1
  175. package/dist/shell.d.ts +4 -0
  176. package/dist/shell.js +4 -0
  177. package/dist/shell.js.map +1 -1
  178. package/dist/sync/db.d.ts +76 -0
  179. package/dist/sync/db.js +24 -0
  180. package/dist/sync/db.js.map +1 -0
  181. package/dist/sync/engine.d.ts +124 -0
  182. package/dist/sync/engine.js +474 -0
  183. package/dist/sync/engine.js.map +1 -0
  184. package/dist/sync/hooks.d.ts +30 -0
  185. package/dist/sync/hooks.js +67 -0
  186. package/dist/sync/hooks.js.map +1 -0
  187. package/dist/sync/testing.d.ts +28 -0
  188. package/dist/sync/testing.js +41 -0
  189. package/dist/sync/testing.js.map +1 -0
  190. package/dist/sync/wire.d.ts +50 -0
  191. package/dist/sync/wire.js +2 -0
  192. package/dist/sync/wire.js.map +1 -0
  193. package/dist/sync.d.ts +7 -0
  194. package/dist/sync.js +22 -0
  195. package/dist/sync.js.map +1 -0
  196. package/dist/tour/tour-catalogue.d.ts +7 -1
  197. package/dist/tour/tour-catalogue.js.map +1 -1
  198. package/dist/tour/tour-labels.js +1 -0
  199. package/dist/tour/tour-labels.js.map +1 -1
  200. package/dist/tour/tour.d.ts +30 -0
  201. package/dist/tour/tour.js +54 -8
  202. package/dist/tour/tour.js.map +1 -1
  203. package/dist/tour/use-tour-progress.d.ts +99 -1
  204. package/dist/tour/use-tour-progress.js +228 -12
  205. package/dist/tour/use-tour-progress.js.map +1 -1
  206. package/dist/tour.d.ts +2 -0
  207. package/dist/tour.js +2 -0
  208. package/dist/tour.js.map +1 -1
  209. package/package.json +43 -1
  210. package/src/admin/admin-action-log-labels.ts +9 -0
  211. package/src/admin/admin-action-log.tsx +41 -5
  212. package/src/admin/admin-area-labels.ts +20 -0
  213. package/src/admin/admin-overview.tsx +37 -2
  214. package/src/admin/mail-test-card-labels.ts +19 -0
  215. package/src/admin/mail-test-card.tsx +190 -0
  216. package/src/components/appearance-labels.ts +16 -0
  217. package/src/components/data-table-column-settings.tsx +2 -2
  218. package/src/components/data-table-head.tsx +2 -2
  219. package/src/components/data-table-mobile.tsx +26 -3
  220. package/src/components/data-table-row-actions.tsx +118 -2
  221. package/src/components/data-table-shared.tsx +39 -3
  222. package/src/components/data-table.tsx +52 -21
  223. package/src/components/date-format-setting.tsx +64 -0
  224. package/src/components/swipeable-row.tsx +8 -0
  225. package/src/components/tabs.tsx +4 -3
  226. package/src/components/translation-review-editor.tsx +2 -0
  227. package/src/components/translation-review-labels.ts +7 -0
  228. package/src/components/translation-review.tsx +102 -14
  229. package/src/components/write-lock-labels.ts +1 -0
  230. package/src/components/write-lock.tsx +36 -3
  231. package/src/data-table.ts +1 -0
  232. package/src/feedback/feedback-row-detail.tsx +18 -23
  233. package/src/feedback/feedback-swipe.tsx +28 -1
  234. package/src/i18n/defaults.ts +8 -0
  235. package/src/i18n/german.ts +90 -4
  236. package/src/i18n/kit-labels.tsx +31 -1
  237. package/src/i18n/locales/en.ts +13 -0
  238. package/src/i18n/locales/es.ts +90 -4
  239. package/src/i18n/locales/fr.ts +90 -4
  240. package/src/i18n/locales/hu.ts +86 -4
  241. package/src/i18n/locales/it.ts +90 -4
  242. package/src/i18n/locales/zh.ts +84 -2
  243. package/src/i18n/review.ts +15 -1
  244. package/src/index.ts +45 -0
  245. package/src/lib/date-format.ts +151 -0
  246. package/src/lib/format.ts +23 -6
  247. package/src/notifications/device-zone-report.ts +54 -0
  248. package/src/notifications/feedback-notification-types-labels.ts +10 -1
  249. package/src/notifications/feedback-notification-types.ts +12 -5
  250. package/src/notifications/notification-bell.tsx +116 -0
  251. package/src/notifications/notification-inbox.tsx +304 -0
  252. package/src/notifications/notification-types-setting.tsx +151 -55
  253. package/src/notifications/notification-types.ts +20 -8
  254. package/src/notifications/notifications-labels.ts +69 -11
  255. package/src/notifications/push-devices-setting.tsx +123 -34
  256. package/src/notifications/push-worker.ts +160 -0
  257. package/src/notifications/quiet-hours-setting.tsx +41 -58
  258. package/src/notifications/time-zone-select.tsx +5 -2
  259. package/src/notifications/use-push-device.ts +20 -33
  260. package/src/offline/local-first.ts +76 -0
  261. package/src/offline/pwa-update-prompt-labels.ts +9 -0
  262. package/src/offline/pwa-update-prompt.tsx +72 -0
  263. package/src/offline/query-persistence.ts +356 -0
  264. package/src/offline/service-worker-updates.ts +81 -0
  265. package/src/offline/shared-computer-labels.ts +8 -0
  266. package/src/offline/shared-computer.tsx +87 -0
  267. package/src/offline/sign-out-pending-dialog-labels.ts +21 -0
  268. package/src/offline/sign-out-pending-dialog.tsx +135 -0
  269. package/src/offline.ts +32 -0
  270. package/src/push-worker.ts +25 -0
  271. package/src/shell/account-menu-text-size.tsx +77 -0
  272. package/src/shell/admin-menu.tsx +40 -3
  273. package/src/shell/top-bar-actions.tsx +6 -1
  274. package/src/shell.ts +7 -0
  275. package/src/sync/db.ts +103 -0
  276. package/src/sync/engine.ts +699 -0
  277. package/src/sync/hooks.ts +93 -0
  278. package/src/sync/testing.ts +73 -0
  279. package/src/sync/wire.ts +61 -0
  280. package/src/sync.ts +29 -0
  281. package/src/tour/tour-catalogue.tsx +7 -1
  282. package/src/tour/tour-labels.ts +1 -0
  283. package/src/tour/tour.tsx +105 -9
  284. package/src/tour/use-tour-progress.ts +378 -12
  285. package/src/tour.ts +3 -0
@@ -153,6 +153,9 @@ export function germanLabels(numberLocale: string): UiKitLabels {
153
153
  answeredDescription: "Wenn eine Meldung, die Sie geschrieben oder kommentiert haben, eine Antwort erhält.",
154
154
  comment: "Kommentare zu Meldungen, denen Sie folgen",
155
155
  commentDescription: "Wenn jemand eine Meldung kommentiert, die Sie geschrieben oder kommentiert haben.",
156
+ received: "Neue Rückmeldungen und Überarbeitungen",
157
+ receivedDescription: "Wenn jemand eine Meldung erfasst oder eine zurückschickt.",
158
+ adminGroup: "Admin",
156
159
  },
157
160
  feedbackContext: {
158
161
  user: "Nutzer",
@@ -624,6 +627,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
624
627
  skip: "Überspringen",
625
628
  done: "Fertig",
626
629
  awaitClickHint: "Klicken Sie auf das hervorgehobene Element, um fortzufahren",
630
+ awaitInputHint: "Geben Sie im hervorgehobenen Feld einen Wert ein, um fortzufahren", // 0.46: TourStep.awaitInput (keksdose live #436).
627
631
  step: (current, total) => `${n(current)} / ${n(total)}`,
628
632
  },
629
633
  // 0.43.0 — docs/tours-harmonization.md §3, §8: the tours page. keksdose's reviewed words.
@@ -836,6 +840,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
836
840
  // Impersonal, like the rest of this catalogue where it can be: an app that
837
841
  // addresses its users with "du" then has fewer keys to override.
838
842
  reason: "Nur zum Ansehen – Änderungen sind hier nicht möglich.",
843
+ offline: "Nur mit Internetverbindung möglich.",
839
844
  },
840
845
  accountState: {
841
846
  active: "Aktiv",
@@ -1180,6 +1185,9 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1180
1185
  typesTitle: "Benachrichtigungen zu",
1181
1186
  typesDescription: "Wählen Sie, worüber Sie benachrichtigt werden, und wie.",
1182
1187
  byEmail: "Per E-Mail",
1188
+ channelApp: "In der App",
1189
+ channelPush: "Push",
1190
+ channelEmail: "E-Mail",
1183
1191
  emailUnverified: "Bestätigen Sie Ihre Adresse, um diese zu erhalten.",
1184
1192
  digestCadence: "Häufigkeit",
1185
1193
  digestWeekly: "Wöchentlich",
@@ -1187,10 +1195,15 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1187
1195
  typesLoading: "Benachrichtigungseinstellungen werden geladen…",
1188
1196
  typesEmpty: "Für dieses Konto gibt es keine Benachrichtigungen.",
1189
1197
  quietTitle: "Ruhezeiten",
1190
- quietDescription: (inbox) =>
1191
- inbox
1192
- ? "In diesem Zeitfenster kommen keine Push-Benachrichtigungen. Im Posteingang kommen sie trotzdem an."
1193
- : "In diesem Zeitfenster kommen keine Push-Benachrichtigungen.",
1198
+ quietDescription: (inbox, held) =>
1199
+ held
1200
+ ? inbox
1201
+ ? "Push-Benachrichtigungen warten in diesem Zeitfenster und kommen, sobald es endet. Im Posteingang kommen sie sofort an."
1202
+ : "Push-Benachrichtigungen warten in diesem Zeitfenster und kommen, sobald es endet."
1203
+ : inbox
1204
+ ? "In diesem Zeitfenster kommen keine Push-Benachrichtigungen. Im Posteingang kommen sie trotzdem an."
1205
+ : "In diesem Zeitfenster kommen keine Push-Benachrichtigungen.",
1206
+ quietZone: (zone) => `In Ihrer Zeitzone (${zone}), die sich nach dem zuletzt verwendeten Gerät richtet.`,
1194
1207
  quietFrom: "Von",
1195
1208
  quietUntil: "Bis",
1196
1209
  quietIncomplete: "Legen Sie eine Start- und eine Endzeit fest. Ruhezeiten gelten erst, wenn beide gesetzt sind.",
@@ -1256,6 +1269,19 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1256
1269
  // Starts with `remove`, the button's visible text, for voice control.
1257
1270
  removeItem: (device) => `Entfernen: ${device}`,
1258
1271
  removePrompt: "Keine Benachrichtigungen mehr an dieses Gerät senden?",
1272
+ deviceTypes: "Arten auf diesem Gerät",
1273
+ deviceTypesDescription: "Schalten Sie eine Art aus, um sie nur auf diesem Gerät stummzuschalten.",
1274
+ deviceTypesEmpty: "Für keine Art sind Push-Benachrichtigungen eingeschaltet.",
1275
+ inboxTitle: "Posteingang",
1276
+ inboxLoading: "Benachrichtigungen werden geladen…",
1277
+ inboxEmpty: "Alles gelesen – nichts Neues.",
1278
+ markAllRead: "Alle als gelesen markieren",
1279
+ clearAll: "Alle löschen",
1280
+ clearPrompt: "Alle Benachrichtigungen aus Ihrem Posteingang löschen?",
1281
+ showMore: "Mehr anzeigen",
1282
+ bellLabel: "Benachrichtigungen",
1283
+ bellUnread: (count) => `${n(count)} ungelesen`,
1284
+ allNotifications: "Alle Benachrichtigungen",
1259
1285
  unsubscribeTitle: "E-Mail-Benachrichtigungen",
1260
1286
  unsubscribeAbout: (type) => `Sie erhalten E-Mails zu: ${type}.`,
1261
1287
  unsubscribeGeneric: "Sie erhalten Benachrichtigungs-E-Mails.",
@@ -1409,11 +1435,14 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1409
1435
  // 0.34 (§11.5): whole phrases per noun. `team` in Kurvenschmiede's own words ("Team
1410
1436
  // angelegt", "aufnehmen"), `budget` in keksdose's, `company` with the string
1411
1437
  // `actions.membership_remove` held until 0.34.
1438
+ renamedFromTo: (from, to) => `von ${from} in ${to}`,
1412
1439
  groupActions: {
1413
1440
  group: {
1414
1441
  group_create: "Gruppe erstellt",
1415
1442
  group_rename: "Gruppe umbenannt",
1416
1443
  group_delete: "Gruppe gelöscht",
1444
+ group_deactivate: "Gruppe deaktiviert",
1445
+ group_reactivate: "Gruppe reaktiviert",
1417
1446
  membership_add: "Zur Gruppe hinzugefügt",
1418
1447
  membership_role: "Rolle in der Gruppe geändert",
1419
1448
  membership_remove: "Aus der Gruppe entfernt",
@@ -1423,6 +1452,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1423
1452
  group_create: "Team angelegt",
1424
1453
  group_rename: "Team umbenannt",
1425
1454
  group_delete: "Team gelöscht",
1455
+ group_deactivate: "Team deaktiviert",
1456
+ group_reactivate: "Team reaktiviert",
1426
1457
  membership_add: "Ins Team aufgenommen",
1427
1458
  membership_role: "Rolle im Team geändert",
1428
1459
  membership_remove: "Aus dem Team entfernt",
@@ -1432,6 +1463,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1432
1463
  group_create: "Unternehmen erstellt",
1433
1464
  group_rename: "Unternehmen umbenannt",
1434
1465
  group_delete: "Unternehmen gelöscht",
1466
+ group_deactivate: "Unternehmen deaktiviert",
1467
+ group_reactivate: "Unternehmen reaktiviert",
1435
1468
  membership_add: "Zum Unternehmen hinzugefügt",
1436
1469
  membership_role: "Rolle im Unternehmen geändert",
1437
1470
  membership_remove: "Aus dem Unternehmen entfernt",
@@ -1441,6 +1474,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1441
1474
  group_create: "Budget erstellt",
1442
1475
  group_rename: "Budget umbenannt",
1443
1476
  group_delete: "Budget gelöscht",
1477
+ group_deactivate: "Budget deaktiviert",
1478
+ group_reactivate: "Budget reaktiviert",
1444
1479
  membership_add: "Zum Budget hinzugefügt",
1445
1480
  membership_role: "Rolle im Budget geändert",
1446
1481
  membership_remove: "Aus dem Budget entfernt",
@@ -1589,6 +1624,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1589
1624
  approve: "Bestätigen",
1590
1625
  flag: "Änderung nötig",
1591
1626
  suggest: "Übersetzung vorschlagen",
1627
+ flagRow: "Zur Änderung markieren…",
1628
+ suggestRow: "Übersetzung ergänzen…",
1592
1629
  reset: "Als ungeprüft markieren",
1593
1630
  cancel: "Abbrechen",
1594
1631
  approveSelected: "Auswahl bestätigen",
@@ -1865,6 +1902,14 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1865
1902
  "Mehr Kontrast macht dezente Texte und Linien dunkler und Fokusrahmen dicker. „System“ richtet sich nach diesem Gerät.",
1866
1903
  contrastModes: { system: "System", standard: "Standard", more: "Mehr" },
1867
1904
  saveFailed: "Konnte nicht in Ihrem Konto gespeichert werden. Auf diesem Gerät gilt es trotzdem.",
1905
+ // 0.46: DateFormatSetting (keksdose's words where it has them).
1906
+ dateFormat: "Datumsformat",
1907
+ dateFormatHelp:
1908
+ "Wie Datumsangaben in der ganzen App geschrieben werden. Unabhängig von der Oberflächensprache — Sie können die App also auf Englisch lesen und trotzdem deutsche Datumsangaben sehen.",
1909
+ dateFormatAuto: "Der Sprache folgen",
1910
+ // 0.46: AccountMenuTextSize (keksdose live #426).
1911
+ textSmaller: "Kleinere Schrift",
1912
+ textLarger: "Größere Schrift",
1868
1913
  },
1869
1914
  // 0.36.0 — docs/settings-harmonization.md §11.3: resetting this device's settings, the
1870
1915
  // last card of "Darstellung". "Theme", as `topBar.theme`; "Bereiche" for the panels
@@ -1892,9 +1937,21 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1892
1937
  // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words. "Verwaltung"
1893
1938
  // as settings §5 names the page; "mit Administratorrechten" rather than "für
1894
1939
  // Administratoren", which would give the reader a gender (as `transferOwnership`).
1940
+ mailTestCard: {
1941
+ title: "Testmail",
1942
+ description: "Sendet eine Mail an Ihre eigene Adresse, über den Versand, mit dem diese Installation alle Mails verschickt.",
1943
+ transport: (backend) => `Versand: ${backend}`,
1944
+ action: "Testmail an mich senden",
1945
+ sent: (address) => `An ${address} gesendet. Bitte prüfen Sie den Posteingang.`,
1946
+ console: "Der Konsolen-Versand schreibt Mails nur ins Log; es wurde nichts gesendet.",
1947
+ failed: "Senden fehlgeschlagen. Die Antwort des Anbieters steht im Server-Log.",
1948
+ rateLimited,
1949
+ keywords: "testmail test e-mail mail versand transport smtp resend konsole senden zustellen",
1950
+ },
1895
1951
  adminArea: {
1896
1952
  title: "Verwaltung",
1897
1953
  waiting: (count) => `${n(count)} offen`,
1954
+ waitingLabel: (label, count) => `${label}, ${n(count)} offen`,
1898
1955
  forbiddenTitle: "Nur mit Administratorrechten",
1899
1956
  forbiddenBody: (appName) => `Hier wird ${appName} verwaltet. Ihr Konto kann diese Seite nicht öffnen.`,
1900
1957
  forbiddenHome: "Zur Startseite",
@@ -1912,6 +1969,10 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1912
1969
  invitationsPending: "Offene Einladungen",
1913
1970
  users: "Benutzer",
1914
1971
  usersNew: (count) => `${n(count)} neu in 7 Tagen`,
1972
+ awaitingVerdict: "Warten auf ein Urteil",
1973
+ awaitingVerdictHint: "Beantwortet; Sie oder die meldende Person bestätigen die Lösung",
1974
+ releasedForWork: "Zur Umsetzung freigegeben",
1975
+ releasedForWorkHint: "Bereit, Nacharbeit angefordert oder in Arbeit",
1915
1976
  },
1916
1977
  overviewError: "Die Übersicht konnte nicht geladen werden.",
1917
1978
  retry: "Erneut versuchen",
@@ -1966,5 +2027,30 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1966
2027
  billingOff: "Die Abrechnung ist lokal aus: Tarife ändern nichts",
1967
2028
  },
1968
2029
  },
2030
+ // 0.45.0 — docs/local-first-harmonization.md §1.6 (`@eifi1/ui-kit/offline`): keksdose's
2031
+ // reviewed words (nav.logout_queued_*, pwa.*) where it has the language.
2032
+ signOutPending: {
2033
+ title: "Einige Änderungen sind noch nicht auf dem Server",
2034
+ lost: (count) =>
2035
+ count === 1
2036
+ ? `${n(count)} Änderung wartet noch auf die Synchronisierung. Beim Abmelden wird die Kopie auf diesem Gerät gelöscht – und das ist die einzige.`
2037
+ : `${n(count)} Änderungen warten noch auf die Synchronisierung. Beim Abmelden wird die Kopie auf diesem Gerät gelöscht – und das ist die einzige.`,
2038
+ kept: (count) =>
2039
+ count === 1
2040
+ ? `${n(count)} Änderung wartet noch auf die Synchronisierung. Sie bleibt für Sie auf diesem Gerät und wird bei Ihrer nächsten Anmeldung hier synchronisiert.`
2041
+ : `${n(count)} Änderungen warten noch auf die Synchronisierung. Sie bleiben für Sie auf diesem Gerät und werden bei Ihrer nächsten Anmeldung hier synchronisiert.`,
2042
+ syncNow: "Jetzt synchronisieren",
2043
+ signOutAnyway: "Trotzdem abmelden",
2044
+ discardWaiting: "Wartende Änderungen verwerfen",
2045
+ cancel: "Abbrechen",
2046
+ },
2047
+ pwaUpdate: {
2048
+ updateAvailable: "Eine neue Version ist verfügbar.",
2049
+ reload: "Neu laden",
2050
+ },
2051
+ sharedComputer: {
2052
+ label: "Dies ist ein gemeinsam genutzter Computer",
2053
+ hint: "Auf diesem Gerät bleibt keine Kopie Ihrer Daten. Seiten öffnen sich dann nur mit einer Verbindung.",
2054
+ },
1969
2055
  };
1970
2056
  }
@@ -120,7 +120,11 @@ import type { SignChipLabels } from "../components/sign-chip";
120
120
  import type { ColumnMapperLabels } from "../components/column-mapper";
121
121
  import type { NotificationsLabels } from "../notifications/notifications-labels";
122
122
  import type { AdminAreaLabels } from "../admin/admin-area-labels";
123
+ import type { MailTestCardLabels } from "../admin/mail-test-card";
123
124
  import type { TopBarPartsLabels } from "../shell/top-bar-parts-labels";
125
+ import type { SignOutPendingDialogLabels } from "../offline/sign-out-pending-dialog";
126
+ import type { PwaUpdatePromptLabels } from "../offline/pwa-update-prompt";
127
+ import type { SharedComputerLabels } from "../offline/shared-computer";
124
128
 
125
129
  /**
126
130
  * EVERY string the kit renders, as one typed tree — and an optional provider that
@@ -487,6 +491,15 @@ export interface UiKitLabels {
487
491
  /** 0.42.0: the top bar's shared parts — `TourMenu`, `SyncStatusIndicator`, `DevSwitchers`
488
492
  * (docs/top-bar-harmonization.md §3.1). */
489
493
  topBarParts: TopBarPartsLabels;
494
+ /** 0.45.0: "Send a test mail to me" (docs/admin-harmonization.md §9.2.4). */
495
+ mailTestCard: MailTestCardLabels;
496
+ /** 0.45.0: the sign-out question while changes wait to sync (`@eifi1/ui-kit/offline`,
497
+ * docs/local-first-harmonization.md §1.6). */
498
+ signOutPending: SignOutPendingDialogLabels;
499
+ /** 0.45.0: the service-worker update toast (local-first §1.5 D8). */
500
+ pwaUpdate: PwaUpdatePromptLabels;
501
+ /** 0.45.0: "This is a shared computer" on the sign-in form (local-first §1.5 D6). */
502
+ sharedComputer: SharedComputerLabels;
490
503
  }
491
504
 
492
505
  /**
@@ -539,6 +552,7 @@ interface KitI18n {
539
552
  chartTooltipPlacement?: ChartTooltipPlacement;
540
553
  formatDate?: KitDateFormatter;
541
554
  tableStorageKeyPrefix?: string;
555
+ timeZone?: string;
542
556
  }
543
557
 
544
558
  /** What a {@link KitDateFormatter} is told about the date it is formatting. */
@@ -673,6 +687,14 @@ export interface UiKitProviderProps {
673
687
  * view when it moves the prefix here.
674
688
  */
675
689
  tableStorageKeyPrefix?: string;
690
+ /**
691
+ * 0.46 (docs/notifications-harmonization.md §10.3): the IANA zone ("Europe/Zurich") every
692
+ * TIMESTAMP below is shown in through `useKitFormat().formatDate` /
693
+ * `formatRelativeTime`, when the call names none — the account's picked zone, for an app
694
+ * that shows times in it. A bare "YYYY-MM-DD" is never shifted (a calendar day is the day
695
+ * it names in every zone). Left out, timestamps follow the device, as before.
696
+ */
697
+ timeZone?: string;
676
698
  children: ReactNode;
677
699
  }
678
700
 
@@ -692,6 +714,7 @@ export function UiKitProvider({
692
714
  chartTooltipPlacement,
693
715
  formatDate,
694
716
  tableStorageKeyPrefix,
717
+ timeZone,
695
718
  children,
696
719
  }: UiKitProviderProps) {
697
720
  const outer = useContext(KitI18nContext);
@@ -704,8 +727,9 @@ export function UiKitProvider({
704
727
  chartTooltipPlacement: chartTooltipPlacement ?? outer.chartTooltipPlacement,
705
728
  formatDate: formatDate ?? outer.formatDate,
706
729
  tableStorageKeyPrefix: tableStorageKeyPrefix ?? outer.tableStorageKeyPrefix,
730
+ timeZone: timeZone ?? outer.timeZone,
707
731
  }),
708
- [outer, labels, locale, weekStartsOn, linkComponent, chartTooltipPlacement, formatDate, tableStorageKeyPrefix],
732
+ [outer, labels, locale, weekStartsOn, linkComponent, chartTooltipPlacement, formatDate, tableStorageKeyPrefix, timeZone],
709
733
  );
710
734
  useTableViewsJoin(value.tableStorageKeyPrefix ?? DEFAULT_TABLE_STORAGE_KEY_PREFIX);
711
735
  return <KitI18nContext.Provider value={value}>{children}</KitI18nContext.Provider>;
@@ -858,6 +882,12 @@ export function useKitTableStorageKeyPrefix(): string | undefined {
858
882
  return useContext(KitI18nContext).tableStorageKeyPrefix;
859
883
  }
860
884
 
885
+ /** The nearest provider's `timeZone` (0.46), or `undefined` — the device's. A call's own
886
+ * `timeZone` wins over it. */
887
+ export function useKitTimeZone(): string | undefined {
888
+ return useContext(KitI18nContext).timeZone;
889
+ }
890
+
861
891
  /** {@link DEFAULT_FILE_LABELS}, but formatting in the provider's locale. */
862
892
  export function useKitFileLabels(prop?: Partial<FileLabels>): FileLabels {
863
893
  const locale = useKitLocale();
@@ -211,6 +211,7 @@ export function uiKitLabelsEn(numberLocale = "en-US"): UiKitLabels {
211
211
  testSent: (count) => (count === 1 ? "Test sent to 1 device" : `Test sent to ${n(count)} devices`),
212
212
  failures: (count) =>
213
213
  count === 1 ? "1 failed delivery in a row" : `${n(count)} failed deliveries in a row`,
214
+ bellUnread: (count) => `${n(count)} unread`,
214
215
  },
215
216
  settings: {
216
217
  ...d.settings,
@@ -220,6 +221,7 @@ export function uiKitLabelsEn(numberLocale = "en-US"): UiKitLabels {
220
221
  adminArea: {
221
222
  ...d.adminArea,
222
223
  waiting: (count) => `${n(count)} waiting`,
224
+ waitingLabel: (label, count) => `${label}, ${n(count)} waiting`,
223
225
  tiles: { ...d.adminArea.tiles, usersNew: (count) => `${n(count)} new in 7 days` },
224
226
  },
225
227
  // 0.43.0: the tours page's counts (docs/tours-harmonization.md §3).
@@ -266,5 +268,16 @@ export function uiKitLabelsEn(numberLocale = "en-US"): UiKitLabels {
266
268
  waitingChanges: (count) =>
267
269
  count === 1 ? "1 change waiting for a plan" : `${n(count)} changes waiting for a plan`,
268
270
  },
271
+ signOutPending: {
272
+ ...d.signOutPending,
273
+ lost: (count) =>
274
+ count === 1
275
+ ? d.signOutPending.lost(1)
276
+ : `${n(count)} changes are still waiting to sync. Logging out clears this device’s copy, and it is the only copy.`,
277
+ kept: (count) =>
278
+ count === 1
279
+ ? d.signOutPending.kept(1)
280
+ : `${n(count)} changes are still waiting to sync. They stay on this device for you and sync the next time you log in here.`,
281
+ },
269
282
  };
270
283
  }
@@ -144,6 +144,9 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
144
144
  answeredDescription: "Cuando un informe que usted escribió o comentó recibe una respuesta.",
145
145
  comment: "Comentarios en informes que sigue",
146
146
  commentDescription: "Cuando alguien comenta un informe que usted escribió o comentó.",
147
+ received: "Nuevos informes y revisiones",
148
+ receivedDescription: "Cuando alguien envía un informe o devuelve uno.",
149
+ adminGroup: "Admin",
147
150
  },
148
151
  feedbackContext: {
149
152
  user: "Usuario",
@@ -607,6 +610,7 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
607
610
  skip: "Omitir",
608
611
  done: "Listo",
609
612
  awaitClickHint: "Haga clic en el elemento resaltado para continuar",
613
+ awaitInputHint: "Introduzca un valor en el campo resaltado para continuar", // 0.46: TourStep.awaitInput (keksdose live #436).
610
614
  step: (current, total) => `${n(current)} / ${n(total)}`,
611
615
  },
612
616
  // 0.43.0 — docs/tours-harmonization.md §3, §8: the tours page.
@@ -816,6 +820,7 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
816
820
  },
817
821
  writeLock: {
818
822
  reason: "Puede verlo, pero no modificarlo.",
823
+ offline: "Requiere conexión.",
819
824
  },
820
825
  accountState: {
821
826
  // Agreeing with "cuenta" (feminine): the chip is the state of an account.
@@ -1154,6 +1159,9 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1154
1159
  typesTitle: "Avisarme de",
1155
1160
  typesDescription: "Elija de qué se entera y cómo.",
1156
1161
  byEmail: "Por correo electrónico",
1162
+ channelApp: "En la app",
1163
+ channelPush: "Push",
1164
+ channelEmail: "Correo",
1157
1165
  emailUnverified: "Confirme su dirección para recibirlos.",
1158
1166
  digestCadence: "Frecuencia",
1159
1167
  digestWeekly: "Semanal",
@@ -1161,10 +1169,15 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1161
1169
  typesLoading: "Cargando los ajustes de notificaciones…",
1162
1170
  typesEmpty: "No hay notificaciones para esta cuenta.",
1163
1171
  quietTitle: "Horas de silencio",
1164
- quietDescription: (inbox) =>
1165
- inbox
1166
- ? "Sin notificaciones push durante este intervalo. Aun así, llegan a su bandeja de entrada."
1167
- : "Sin notificaciones push durante este intervalo.",
1172
+ quietDescription: (inbox, held) =>
1173
+ held
1174
+ ? inbox
1175
+ ? "Las notificaciones push esperan durante este intervalo y llegan cuando termina. A su bandeja de entrada llegan enseguida."
1176
+ : "Las notificaciones push esperan durante este intervalo y llegan cuando termina."
1177
+ : inbox
1178
+ ? "Sin notificaciones push durante este intervalo. Aun así, llegan a su bandeja de entrada."
1179
+ : "Sin notificaciones push durante este intervalo.",
1180
+ quietZone: (zone) => `En su zona horaria (${zone}), que sigue al último dispositivo que usó.`,
1168
1181
  quietFrom: "Desde",
1169
1182
  quietUntil: "Hasta",
1170
1183
  quietIncomplete:
@@ -1226,6 +1239,19 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1226
1239
  // Starts with `remove`, the button's visible text, for voice control.
1227
1240
  removeItem: (device) => `Quitar ${device}`,
1228
1241
  removePrompt: "¿Dejar de enviar notificaciones a este dispositivo?",
1242
+ deviceTypes: "Tipos en este dispositivo",
1243
+ deviceTypesDescription: "Desactive un tipo para silenciarlo solo en este dispositivo.",
1244
+ deviceTypesEmpty: "Ningún tipo tiene las notificaciones push activadas.",
1245
+ inboxTitle: "Bandeja de entrada",
1246
+ inboxLoading: "Cargando notificaciones…",
1247
+ inboxEmpty: "Está al día.",
1248
+ markAllRead: "Marcar todo como leído",
1249
+ clearAll: "Borrar todo",
1250
+ clearPrompt: "¿Eliminar todas las notificaciones de su bandeja de entrada?",
1251
+ showMore: "Mostrar más",
1252
+ bellLabel: "Notificaciones",
1253
+ bellUnread: (count) => `${n(count)} sin leer`,
1254
+ allNotifications: "Todas las notificaciones",
1229
1255
  unsubscribeTitle: "Notificaciones por correo electrónico",
1230
1256
  unsubscribeAbout: (type) => `Recibe correos sobre: ${type}.`,
1231
1257
  unsubscribeGeneric: "Recibe correos de notificación.",
@@ -1375,11 +1401,14 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1375
1401
  // 0.34 (§11.5): whole phrases per noun. The group's own agree with the noun
1376
1402
  // ("Empresa creada"), a member's with "cuenta", as `actions` do. `team` is
1377
1403
  // Kurvenschmiede's "equipo"; `company` keeps `actions.membership_remove`'s string.
1404
+ renamedFromTo: (from, to) => `de ${from} a ${to}`,
1378
1405
  groupActions: {
1379
1406
  group: {
1380
1407
  group_create: "Grupo creado",
1381
1408
  group_rename: "Grupo renombrado",
1382
1409
  group_delete: "Grupo eliminado",
1410
+ group_deactivate: "Grupo desactivado",
1411
+ group_reactivate: "Grupo reactivado",
1383
1412
  membership_add: "Añadida al grupo",
1384
1413
  membership_role: "Rol en el grupo cambiado",
1385
1414
  membership_remove: "Quitada del grupo",
@@ -1389,6 +1418,8 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1389
1418
  group_create: "Equipo creado",
1390
1419
  group_rename: "Equipo renombrado",
1391
1420
  group_delete: "Equipo eliminado",
1421
+ group_deactivate: "Equipo desactivado",
1422
+ group_reactivate: "Equipo reactivado",
1392
1423
  membership_add: "Añadida al equipo",
1393
1424
  membership_role: "Rol en el equipo cambiado",
1394
1425
  membership_remove: "Quitada del equipo",
@@ -1398,6 +1429,8 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1398
1429
  group_create: "Empresa creada",
1399
1430
  group_rename: "Empresa renombrada",
1400
1431
  group_delete: "Empresa eliminada",
1432
+ group_deactivate: "Empresa desactivada",
1433
+ group_reactivate: "Empresa reactivada",
1401
1434
  membership_add: "Añadida a la empresa",
1402
1435
  membership_role: "Rol en la empresa cambiado",
1403
1436
  membership_remove: "Quitada de la empresa",
@@ -1407,6 +1440,8 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1407
1440
  group_create: "Presupuesto creado",
1408
1441
  group_rename: "Presupuesto renombrado",
1409
1442
  group_delete: "Presupuesto eliminado",
1443
+ group_deactivate: "Presupuesto desactivado",
1444
+ group_reactivate: "Presupuesto reactivado",
1410
1445
  membership_add: "Añadida al presupuesto",
1411
1446
  membership_role: "Rol en el presupuesto cambiado",
1412
1447
  membership_remove: "Quitada del presupuesto",
@@ -1553,6 +1588,8 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1553
1588
  approve: "Aprobar",
1554
1589
  flag: "Requiere cambios",
1555
1590
  suggest: "Proponer traducción",
1591
+ flagRow: "Marcar para cambiar…",
1592
+ suggestRow: "Añadir una traducción…",
1556
1593
  reset: "Marcar como sin revisar",
1557
1594
  cancel: "Cancelar",
1558
1595
  approveSelected: "Aprobar la selección",
@@ -1806,6 +1843,14 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1806
1843
  "El contraste aumentado oscurece los textos tenues y las líneas, y engrosa los marcos de foco. «Sistema» sigue el ajuste de este dispositivo.",
1807
1844
  contrastModes: { system: "Sistema", standard: "Estándar", more: "Aumentado" },
1808
1845
  saveFailed: "No se ha podido guardar en su cuenta. En este dispositivo se aplica igualmente.",
1846
+ // 0.46: DateFormatSetting (keksdose's words where it has them).
1847
+ dateFormat: "Formato de fecha",
1848
+ dateFormatHelp:
1849
+ "Cómo se escriben las fechas en toda la app. Independiente del idioma de la interfaz: puede leer la app en inglés y ver igualmente las fechas en formato alemán.",
1850
+ dateFormatAuto: "Seguir el idioma",
1851
+ // 0.46: AccountMenuTextSize (keksdose live #426).
1852
+ textSmaller: "Texto más pequeño",
1853
+ textLarger: "Texto más grande",
1809
1854
  },
1810
1855
  // 0.36.0 — docs/settings-harmonization.md §11.3: resetting this device's settings, the
1811
1856
  // last card of "Apariencia". "Restablecer", as a phone's own settings say it.
@@ -1831,9 +1876,21 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1831
1876
  },
1832
1877
  // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words. "Usted",
1833
1878
  // as the rest of the catalogue.
1879
+ mailTestCard: {
1880
+ title: "Correo de prueba",
1881
+ description: "Envía un correo a su propia dirección, por el mismo transporte con el que esta instalación envía todo su correo.",
1882
+ transport: (backend) => `Transporte: ${backend}`,
1883
+ action: "Enviarme un correo de prueba",
1884
+ sent: (address) => `Enviado a ${address}. Revise la bandeja de entrada.`,
1885
+ console: "El transporte de consola solo registra el correo; no se ha enviado nada.",
1886
+ failed: "No se pudo enviar. El registro del servidor tiene la respuesta del proveedor.",
1887
+ rateLimited,
1888
+ keywords: "correo prueba email e-mail transporte smtp resend consola enviar entrega",
1889
+ },
1834
1890
  adminArea: {
1835
1891
  title: "Administración",
1836
1892
  waiting: (count) => `${n(count)} ${plural(count, "pendiente", "pendientes")}`,
1893
+ waitingLabel: (label, count) => `${label}, ${n(count)} ${plural(count, "pendiente", "pendientes")}`,
1837
1894
  forbiddenTitle: "Solo para administradores",
1838
1895
  forbiddenBody: (appName) =>
1839
1896
  `Aquí es donde los administradores gestionan ${appName}. Su cuenta no puede abrir esta página.`,
@@ -1852,6 +1909,10 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1852
1909
  invitationsPending: "Invitaciones pendientes",
1853
1910
  users: "Usuarios",
1854
1911
  usersNew: (count) => `${n(count)} ${plural(count, "nuevo", "nuevos")} en 7 días`,
1912
+ awaitingVerdict: "Pendientes de veredicto",
1913
+ awaitingVerdictHint: "Respondidos, a la espera de que usted o quien lo informó confirme la solución",
1914
+ releasedForWork: "Listos para trabajar",
1915
+ releasedForWorkHint: "Listos, con revisión solicitada o en curso",
1855
1916
  },
1856
1917
  overviewError: "No se pudo cargar el resumen.",
1857
1918
  retry: "Reintentar",
@@ -1902,6 +1963,31 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1902
1963
  billingOff: "La facturación está desactivada en local: los planes no cambian nada",
1903
1964
  },
1904
1965
  },
1966
+ // 0.45.0 — docs/local-first-harmonization.md §1.6 (`@eifi1/ui-kit/offline`): keksdose's
1967
+ // reviewed words (nav.logout_queued_*, pwa.*) where it has the language.
1968
+ signOutPending: {
1969
+ title: "Algunos cambios aún no se han guardado en el servidor",
1970
+ lost: (count) =>
1971
+ count === 1
1972
+ ? `${n(count)} cambio sigue pendiente de sincronizar. Al cerrar sesión se borra la copia de este dispositivo, y es la única.`
1973
+ : `${n(count)} cambios siguen pendientes de sincronizar. Al cerrar sesión se borra la copia de este dispositivo, y es la única.`,
1974
+ kept: (count) =>
1975
+ count === 1
1976
+ ? `${n(count)} cambio sigue pendiente de sincronizar. Se queda en este dispositivo para usted y se sincronizará la próxima vez que inicie sesión aquí.`
1977
+ : `${n(count)} cambios siguen pendientes de sincronizar. Se quedan en este dispositivo para usted y se sincronizarán la próxima vez que inicie sesión aquí.`,
1978
+ syncNow: "Sincronizar ahora",
1979
+ signOutAnyway: "Cerrar sesión de todos modos",
1980
+ discardWaiting: "Descartar los cambios en espera",
1981
+ cancel: "Cancelar",
1982
+ },
1983
+ pwaUpdate: {
1984
+ updateAvailable: "Hay una nueva versión disponible.",
1985
+ reload: "Recargar",
1986
+ },
1987
+ sharedComputer: {
1988
+ label: "Este es un ordenador compartido",
1989
+ hint: "No queda ninguna copia de sus datos en este dispositivo. Las páginas solo se abren entonces con conexión.",
1990
+ },
1905
1991
  };
1906
1992
  }
1907
1993