@eifi1/ui-kit 0.51.4 → 0.51.6

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 (759) hide show
  1. package/README.md +5 -5
  2. package/dist/account/account-settings-labels.js.map +1 -1
  3. package/dist/account/account-settings.js +11 -9
  4. package/dist/account/account-settings.js.map +1 -1
  5. package/dist/account/delete-account-setting.js +56 -65
  6. package/dist/account/delete-account-setting.js.map +1 -1
  7. package/dist/account/email-change-setting-labels.js.map +1 -1
  8. package/dist/account/email-change-setting.js.map +1 -1
  9. package/dist/account/passkeys-setting.js.map +1 -1
  10. package/dist/account/sessions-setting.js.map +1 -1
  11. package/dist/admin/admin-action-confirm.js +1 -3
  12. package/dist/admin/admin-action-confirm.js.map +1 -1
  13. package/dist/admin/admin-action-log.js.map +1 -1
  14. package/dist/admin/admin-area-labels.js +4 -1
  15. package/dist/admin/admin-area-labels.js.map +1 -1
  16. package/dist/admin/admin-overview.js +19 -11
  17. package/dist/admin/admin-overview.js.map +1 -1
  18. package/dist/admin/admin-sections.js.map +1 -1
  19. package/dist/admin/admin-tool-links.d.ts +1 -1
  20. package/dist/admin/admin-tool-links.js +7 -1
  21. package/dist/admin/admin-tool-links.js.map +1 -1
  22. package/dist/admin/invitations-panel.js +2 -13
  23. package/dist/admin/invitations-panel.js.map +1 -1
  24. package/dist/admin/mail-test-card.js.map +1 -1
  25. package/dist/admin/reviewer-scope-editor.js +4 -11
  26. package/dist/admin/reviewer-scope-editor.js.map +1 -1
  27. package/dist/admin/role-select.js.map +1 -1
  28. package/dist/admin/user-roster.js +1 -9
  29. package/dist/admin/user-roster.js.map +1 -1
  30. package/dist/auth/accept-invitation.js.map +1 -1
  31. package/dist/auth/auth-errors.js.map +1 -1
  32. package/dist/auth/forgot-password-form.js +23 -31
  33. package/dist/auth/forgot-password-form.js.map +1 -1
  34. package/dist/auth/register-form.js.map +1 -1
  35. package/dist/auth/reset-password-form.js.map +1 -1
  36. package/dist/auth/sign-in-form.js +13 -5
  37. package/dist/auth/sign-in-form.js.map +1 -1
  38. package/dist/auth/verify-email.js +1 -8
  39. package/dist/auth/verify-email.js.map +1 -1
  40. package/dist/billing/billing-banner.js.map +1 -1
  41. package/dist/billing/billing-labels.js.map +1 -1
  42. package/dist/billing/checkout-processing.js.map +1 -1
  43. package/dist/billing/plan-card.js +91 -85
  44. package/dist/billing/plan-card.js.map +1 -1
  45. package/dist/billing/plan-limit-toast.js.map +1 -1
  46. package/dist/billing/plan-limit.js.map +1 -1
  47. package/dist/billing/plan-price.js.map +1 -1
  48. package/dist/billing/plan-switch.js.map +1 -1
  49. package/dist/billing/subscription-actions.js.map +1 -1
  50. package/dist/bin/eifi1-pay-page.mjs +6 -1
  51. package/dist/components/account-chips.js.map +1 -1
  52. package/dist/components/alert-banner.js +1 -5
  53. package/dist/components/alert-banner.js.map +1 -1
  54. package/dist/components/amount-input.js +29 -12
  55. package/dist/components/amount-input.js.map +1 -1
  56. package/dist/components/authed-image.js.map +1 -1
  57. package/dist/components/autocomplete.js.map +1 -1
  58. package/dist/components/bulk-action-bar.js +1 -4
  59. package/dist/components/bulk-action-bar.js.map +1 -1
  60. package/dist/components/button-group.js.map +1 -1
  61. package/dist/components/button-look.js.map +1 -1
  62. package/dist/components/button.js +1 -7
  63. package/dist/components/button.js.map +1 -1
  64. package/dist/components/calculator.js +5 -5
  65. package/dist/components/calculator.js.map +1 -1
  66. package/dist/components/calendar-heatmap.js +4 -10
  67. package/dist/components/calendar-heatmap.js.map +1 -1
  68. package/dist/components/card.js +1 -8
  69. package/dist/components/card.js.map +1 -1
  70. package/dist/components/chart-zoom-core.js +3 -17
  71. package/dist/components/chart-zoom-core.js.map +1 -1
  72. package/dist/components/chart.d.ts +1 -1
  73. package/dist/components/chart.js +4 -22
  74. package/dist/components/chart.js.map +1 -1
  75. package/dist/components/checkbox-group.js +1 -4
  76. package/dist/components/checkbox-group.js.map +1 -1
  77. package/dist/components/chip-input.js +4 -1
  78. package/dist/components/chip-input.js.map +1 -1
  79. package/dist/components/chip.js +10 -5
  80. package/dist/components/chip.js.map +1 -1
  81. package/dist/components/choice-card.js +58 -74
  82. package/dist/components/choice-card.js.map +1 -1
  83. package/dist/components/column-mapper-labels.js.map +1 -1
  84. package/dist/components/column-mapper.js +167 -227
  85. package/dist/components/column-mapper.js.map +1 -1
  86. package/dist/components/combobox-core.js +1 -4
  87. package/dist/components/combobox-core.js.map +1 -1
  88. package/dist/components/combobox.js +1 -4
  89. package/dist/components/combobox.js.map +1 -1
  90. package/dist/components/confirm-dialog.js.map +1 -1
  91. package/dist/components/copy-button.js.map +1 -1
  92. package/dist/components/country-select.d.ts +5 -4
  93. package/dist/components/country-select.js +3 -19
  94. package/dist/components/country-select.js.map +1 -1
  95. package/dist/components/currency-option-list.js +10 -8
  96. package/dist/components/currency-option-list.js.map +1 -1
  97. package/dist/components/currency-select.js +1 -6
  98. package/dist/components/currency-select.js.map +1 -1
  99. package/dist/components/danger-confirm.js.map +1 -1
  100. package/dist/components/data-table-cells.js.map +1 -1
  101. package/dist/components/data-table-column-settings.js.map +1 -1
  102. package/dist/components/data-table-filter-popover.js +2 -18
  103. package/dist/components/data-table-filter-popover.js.map +1 -1
  104. package/dist/components/data-table-filters.js.map +1 -1
  105. package/dist/components/data-table-fit.js.map +1 -1
  106. package/dist/components/data-table-groups.js +3 -1
  107. package/dist/components/data-table-groups.js.map +1 -1
  108. package/dist/components/data-table-head.js +44 -56
  109. package/dist/components/data-table-head.js.map +1 -1
  110. package/dist/components/data-table-mobile.js +31 -44
  111. package/dist/components/data-table-mobile.js.map +1 -1
  112. package/dist/components/data-table-pagination.js.map +1 -1
  113. package/dist/components/data-table-row-actions.js +19 -16
  114. package/dist/components/data-table-row-actions.js.map +1 -1
  115. package/dist/components/data-table-row.js.map +1 -1
  116. package/dist/components/data-table-shared.js.map +1 -1
  117. package/dist/components/data-table-sort.js.map +1 -1
  118. package/dist/components/data-table-virtual.js +4 -1
  119. package/dist/components/data-table-virtual.js.map +1 -1
  120. package/dist/components/data-table.js +30 -39
  121. package/dist/components/data-table.js.map +1 -1
  122. package/dist/components/date-picker.js +1 -6
  123. package/dist/components/date-picker.js.map +1 -1
  124. package/dist/components/date-range-picker.js.map +1 -1
  125. package/dist/components/description-list.js +10 -10
  126. package/dist/components/description-list.js.map +1 -1
  127. package/dist/components/dialog-frame.js +9 -2
  128. package/dist/components/dialog-frame.js.map +1 -1
  129. package/dist/components/disclosure.js +17 -27
  130. package/dist/components/disclosure.js.map +1 -1
  131. package/dist/components/dropdown.js +25 -35
  132. package/dist/components/dropdown.js.map +1 -1
  133. package/dist/components/empty-state.js.map +1 -1
  134. package/dist/components/entity-combobox.js.map +1 -1
  135. package/dist/components/error-boundary.js.map +1 -1
  136. package/dist/components/field-base.js +5 -5
  137. package/dist/components/field-base.js.map +1 -1
  138. package/dist/components/field-parts.d.ts +1 -1
  139. package/dist/components/field-parts.js +10 -14
  140. package/dist/components/field-parts.js.map +1 -1
  141. package/dist/components/field-sync.js +8 -10
  142. package/dist/components/field-sync.js.map +1 -1
  143. package/dist/components/file-button.js.map +1 -1
  144. package/dist/components/file-dropzone.js.map +1 -1
  145. package/dist/components/floating-panel.js +4 -1
  146. package/dist/components/floating-panel.js.map +1 -1
  147. package/dist/components/focus-ring.js.map +1 -1
  148. package/dist/components/form-actions.js.map +1 -1
  149. package/dist/components/grouped-picker.js +6 -8
  150. package/dist/components/grouped-picker.js.map +1 -1
  151. package/dist/components/hover-menu.js +1 -4
  152. package/dist/components/hover-menu.js.map +1 -1
  153. package/dist/components/iban-input-labels.js.map +1 -1
  154. package/dist/components/icon-button.js +4 -1
  155. package/dist/components/icon-button.js.map +1 -1
  156. package/dist/components/icon-picker.js +2 -7
  157. package/dist/components/icon-picker.js.map +1 -1
  158. package/dist/components/image-grid.js +41 -50
  159. package/dist/components/image-grid.js.map +1 -1
  160. package/dist/components/inline-edit-field.js.map +1 -1
  161. package/dist/components/inline-entity-combobox.js +2 -8
  162. package/dist/components/inline-entity-combobox.js.map +1 -1
  163. package/dist/components/input.js +14 -2
  164. package/dist/components/input.js.map +1 -1
  165. package/dist/components/jump-calendar.js +1 -7
  166. package/dist/components/jump-calendar.js.map +1 -1
  167. package/dist/components/legal-labels.js.map +1 -1
  168. package/dist/components/legal-page.js +14 -2
  169. package/dist/components/legal-page.js.map +1 -1
  170. package/dist/components/legal.js +12 -2
  171. package/dist/components/legal.js.map +1 -1
  172. package/dist/components/lightbox.js.map +1 -1
  173. package/dist/components/line-items.js +26 -36
  174. package/dist/components/line-items.js.map +1 -1
  175. package/dist/components/list.js +22 -10
  176. package/dist/components/list.js.map +1 -1
  177. package/dist/components/measured-grid.js +29 -53
  178. package/dist/components/measured-grid.js.map +1 -1
  179. package/dist/components/menu-item.js.map +1 -1
  180. package/dist/components/mini-calendar.js +13 -31
  181. package/dist/components/mini-calendar.js.map +1 -1
  182. package/dist/components/money-field.js.map +1 -1
  183. package/dist/components/month-picker.js +10 -21
  184. package/dist/components/month-picker.js.map +1 -1
  185. package/dist/components/multi-entity-combobox.js +3 -16
  186. package/dist/components/multi-entity-combobox.js.map +1 -1
  187. package/dist/components/multi-select.js.map +1 -1
  188. package/dist/components/nav-pills.js +10 -1
  189. package/dist/components/nav-pills.js.map +1 -1
  190. package/dist/components/number-field.js.map +1 -1
  191. package/dist/components/number-input.js +1 -7
  192. package/dist/components/number-input.js.map +1 -1
  193. package/dist/components/numpad-sheet.js +1 -4
  194. package/dist/components/numpad-sheet.js.map +1 -1
  195. package/dist/components/one-time-code-input.js +1 -7
  196. package/dist/components/one-time-code-input.js.map +1 -1
  197. package/dist/components/page-contents.js +13 -22
  198. package/dist/components/page-contents.js.map +1 -1
  199. package/dist/components/page-header.js +1 -11
  200. package/dist/components/page-header.js.map +1 -1
  201. package/dist/components/password-strength-labels.js.map +1 -1
  202. package/dist/components/password-strength.js +2 -8
  203. package/dist/components/password-strength.js.map +1 -1
  204. package/dist/components/phone-input.js +42 -57
  205. package/dist/components/phone-input.js.map +1 -1
  206. package/dist/components/picker-sheet.js.map +1 -1
  207. package/dist/components/pie-chart.js +1 -8
  208. package/dist/components/pie-chart.js.map +1 -1
  209. package/dist/components/popover.js.map +1 -1
  210. package/dist/components/progress-bar.js +16 -9
  211. package/dist/components/progress-bar.js.map +1 -1
  212. package/dist/components/qr-code.js +1 -8
  213. package/dist/components/qr-code.js.map +1 -1
  214. package/dist/components/row-actions.js +5 -1
  215. package/dist/components/row-actions.js.map +1 -1
  216. package/dist/components/search-field.js.map +1 -1
  217. package/dist/components/select.js +28 -38
  218. package/dist/components/select.js.map +1 -1
  219. package/dist/components/separator.js +1 -5
  220. package/dist/components/separator.js.map +1 -1
  221. package/dist/components/series-chart-axes.js +4 -1
  222. package/dist/components/series-chart-axes.js.map +1 -1
  223. package/dist/components/series-chart-budget.js.map +1 -1
  224. package/dist/components/series-chart-ticks.js.map +1 -1
  225. package/dist/components/series-chart.js +29 -45
  226. package/dist/components/series-chart.js.map +1 -1
  227. package/dist/components/settings-fields.js +21 -17
  228. package/dist/components/settings-fields.js.map +1 -1
  229. package/dist/components/share-card.js +4 -9
  230. package/dist/components/share-card.js.map +1 -1
  231. package/dist/components/sign-chip.js.map +1 -1
  232. package/dist/components/signature-pad.js +4 -13
  233. package/dist/components/signature-pad.js.map +1 -1
  234. package/dist/components/signed-amount.js +12 -5
  235. package/dist/components/signed-amount.js.map +1 -1
  236. package/dist/components/skeleton.js +2 -17
  237. package/dist/components/skeleton.js.map +1 -1
  238. package/dist/components/slider.js +13 -36
  239. package/dist/components/slider.js.map +1 -1
  240. package/dist/components/sparkline.js.map +1 -1
  241. package/dist/components/stat-tile.js +14 -10
  242. package/dist/components/stat-tile.js.map +1 -1
  243. package/dist/components/swatch-picker.js +14 -4
  244. package/dist/components/swatch-picker.js.map +1 -1
  245. package/dist/components/swipeable-row.d.ts +1 -1
  246. package/dist/components/swipeable-row.js +1 -8
  247. package/dist/components/swipeable-row.js.map +1 -1
  248. package/dist/components/table-skeleton.js +4 -1
  249. package/dist/components/table-skeleton.js.map +1 -1
  250. package/dist/components/table.js +12 -9
  251. package/dist/components/table.js.map +1 -1
  252. package/dist/components/tabs.js +5 -24
  253. package/dist/components/tabs.js.map +1 -1
  254. package/dist/components/text-link.js.map +1 -1
  255. package/dist/components/text.js.map +1 -1
  256. package/dist/components/tile-radio.js +1 -7
  257. package/dist/components/tile-radio.js.map +1 -1
  258. package/dist/components/time-input.js.map +1 -1
  259. package/dist/components/toast.js.map +1 -1
  260. package/dist/components/toggle-group.js +6 -1
  261. package/dist/components/toggle-group.js.map +1 -1
  262. package/dist/components/toggle-legend.js +2 -11
  263. package/dist/components/toggle-legend.js.map +1 -1
  264. package/dist/components/tooltip.js +2 -22
  265. package/dist/components/tooltip.js.map +1 -1
  266. package/dist/components/translation-review-editor.js +1 -4
  267. package/dist/components/translation-review-editor.js.map +1 -1
  268. package/dist/components/translation-review-parts.d.ts +1 -1
  269. package/dist/components/translation-review-parts.js +7 -1
  270. package/dist/components/translation-review-parts.js.map +1 -1
  271. package/dist/components/translation-review.js +18 -7
  272. package/dist/components/translation-review.js.map +1 -1
  273. package/dist/components/tree-view.js +14 -10
  274. package/dist/components/tree-view.js.map +1 -1
  275. package/dist/components/treemap.d.ts +24 -2
  276. package/dist/components/treemap.js +28 -4
  277. package/dist/components/treemap.js.map +1 -1
  278. package/dist/components/trigger-aria.js.map +1 -1
  279. package/dist/components/use-table-state.js +14 -11
  280. package/dist/components/use-table-state.js.map +1 -1
  281. package/dist/components/user-avatar.js +3 -26
  282. package/dist/components/user-avatar.js.map +1 -1
  283. package/dist/demo/demo-start.js +8 -4
  284. package/dist/demo/demo-start.js.map +1 -1
  285. package/dist/eslint/index.js +1 -1
  286. package/dist/feedback/feedback-attachment-labels.js.map +1 -1
  287. package/dist/feedback/feedback-attachment.js +1 -8
  288. package/dist/feedback/feedback-attachment.js.map +1 -1
  289. package/dist/feedback/feedback-capture.d.ts +1 -1
  290. package/dist/feedback/feedback-capture.js +3 -1
  291. package/dist/feedback/feedback-capture.js.map +1 -1
  292. package/dist/feedback/feedback-comment-thread.js +27 -13
  293. package/dist/feedback/feedback-comment-thread.js.map +1 -1
  294. package/dist/feedback/feedback-context.js +1 -4
  295. package/dist/feedback/feedback-context.js.map +1 -1
  296. package/dist/feedback/feedback-dialog.js.map +1 -1
  297. package/dist/feedback/feedback-inbox.js.map +1 -1
  298. package/dist/feedback/feedback-public-list.js +7 -1
  299. package/dist/feedback/feedback-public-list.js.map +1 -1
  300. package/dist/feedback/feedback-record.js +1 -5
  301. package/dist/feedback/feedback-record.js.map +1 -1
  302. package/dist/feedback/feedback-replies.js +25 -10
  303. package/dist/feedback/feedback-replies.js.map +1 -1
  304. package/dist/feedback/feedback-row-detail.js.map +1 -1
  305. package/dist/feedback/feedback-status-undo.js.map +1 -1
  306. package/dist/feedback/feedback-submit-dialog.js.map +1 -1
  307. package/dist/feedback/feedback-table.js +4 -1
  308. package/dist/feedback/feedback-table.js.map +1 -1
  309. package/dist/feedback/feedback-thread.js +2 -13
  310. package/dist/feedback/feedback-thread.js.map +1 -1
  311. package/dist/feedback/feedback-vocabulary.js.map +1 -1
  312. package/dist/feedback/feedback-vote-button.js.map +1 -1
  313. package/dist/hooks/use-anchored-rect.js.map +1 -1
  314. package/dist/hooks/use-document-title.js.map +1 -1
  315. package/dist/hooks/use-file-drop.js.map +1 -1
  316. package/dist/hooks/use-file-picker-labels.js.map +1 -1
  317. package/dist/hooks/use-file-picker.js.map +1 -1
  318. package/dist/hooks/use-focus-trap.js.map +1 -1
  319. package/dist/hooks/use-overlay-history.js +10 -5
  320. package/dist/hooks/use-overlay-history.js.map +1 -1
  321. package/dist/hooks/use-row-swipe.d.ts +1 -1
  322. package/dist/hooks/use-row-swipe.js +1 -6
  323. package/dist/hooks/use-row-swipe.js.map +1 -1
  324. package/dist/i18n/defaults.js +1 -4
  325. package/dist/i18n/defaults.js.map +1 -1
  326. package/dist/i18n/german.js +4 -1
  327. package/dist/i18n/german.js.map +1 -1
  328. package/dist/i18n/kit-labels.js +2 -8
  329. package/dist/i18n/kit-labels.js.map +1 -1
  330. package/dist/i18n/languages.js.map +1 -1
  331. package/dist/i18n/locales/en.js +4 -1
  332. package/dist/i18n/locales/en.js.map +2 -2
  333. package/dist/i18n/locales/es.js +4 -1
  334. package/dist/i18n/locales/es.js.map +1 -1
  335. package/dist/i18n/locales/fr.js +4 -1
  336. package/dist/i18n/locales/fr.js.map +1 -1
  337. package/dist/i18n/locales/hu.js +4 -1
  338. package/dist/i18n/locales/hu.js.map +1 -1
  339. package/dist/i18n/locales/it.js +4 -1
  340. package/dist/i18n/locales/it.js.map +1 -1
  341. package/dist/i18n/locales/zh.js.map +1 -1
  342. package/dist/i18n/plurals.js.map +1 -1
  343. package/dist/i18n/review.js +13 -7
  344. package/dist/i18n/review.js.map +1 -1
  345. package/dist/i18n/shared-labels.js.map +1 -1
  346. package/dist/index.d.ts +16 -16
  347. package/dist/index.js +40 -23
  348. package/dist/index.js.map +1 -1
  349. package/dist/landing/access.js +1 -4
  350. package/dist/landing/access.js.map +1 -1
  351. package/dist/landing/landing-sections.js +35 -38
  352. package/dist/landing/landing-sections.js.map +1 -1
  353. package/dist/landing/page-seo.js.map +1 -1
  354. package/dist/lib/calc.js.map +1 -1
  355. package/dist/lib/clipboard-minus.js.map +1 -1
  356. package/dist/lib/dates.js.map +1 -1
  357. package/dist/lib/decimal-marks.js.map +1 -1
  358. package/dist/lib/device-settings.js +2 -1
  359. package/dist/lib/device-settings.js.map +1 -1
  360. package/dist/lib/direction.js.map +1 -1
  361. package/dist/lib/iban.js.map +1 -1
  362. package/dist/lib/logger.js +1 -5
  363. package/dist/lib/logger.js.map +1 -1
  364. package/dist/lib/person-name.js.map +1 -1
  365. package/dist/lib/phone.js.map +1 -1
  366. package/dist/lib/qr-encode.js +344 -8
  367. package/dist/lib/qr-encode.js.map +1 -1
  368. package/dist/lib/session-refresh.js.map +1 -1
  369. package/dist/lib/table-text.js +15 -3
  370. package/dist/lib/table-text.js.map +1 -1
  371. package/dist/lib/text-match.d.ts +4 -0
  372. package/dist/lib/text-match.js.map +1 -1
  373. package/dist/lib/translation-review.js.map +1 -1
  374. package/dist/notifications/notification-inbox.js +63 -44
  375. package/dist/notifications/notification-inbox.js.map +1 -1
  376. package/dist/notifications/notification-parts.js.map +1 -1
  377. package/dist/notifications/notification-types-setting.js.map +1 -1
  378. package/dist/notifications/notifications-labels.js.map +1 -1
  379. package/dist/notifications/push-device-setting.js +6 -1
  380. package/dist/notifications/push-device-setting.js.map +1 -1
  381. package/dist/notifications/push-devices-setting.js.map +1 -1
  382. package/dist/notifications/push-worker.js.map +1 -1
  383. package/dist/notifications/quiet-hours-setting.js.map +1 -1
  384. package/dist/notifications/use-push-device.js +4 -1
  385. package/dist/notifications/use-push-device.js.map +1 -1
  386. package/dist/offline/pwa-update-prompt.d.ts +1 -1
  387. package/dist/offline/pwa-update-prompt.js +7 -1
  388. package/dist/offline/pwa-update-prompt.js.map +1 -1
  389. package/dist/offline/query-persistence.js.map +1 -1
  390. package/dist/offline.d.ts +1 -1
  391. package/dist/offline.js +6 -1
  392. package/dist/offline.js.map +1 -1
  393. package/dist/pay/pay.css +8 -1
  394. package/dist/rhf/fields.d.ts +1 -2
  395. package/dist/rhf/fields.js +1 -10
  396. package/dist/rhf/fields.js.map +1 -1
  397. package/dist/rhf/form-core.js +1 -4
  398. package/dist/rhf/form-core.js.map +1 -1
  399. package/dist/rhf/line-items.js.map +1 -1
  400. package/dist/rhf/use-rhf-wizard-step.js.map +1 -1
  401. package/dist/search/command-palette.js +71 -62
  402. package/dist/search/command-palette.js.map +1 -1
  403. package/dist/search/global-search.js +34 -5
  404. package/dist/search/global-search.js.map +1 -1
  405. package/dist/search/search-index.js.map +1 -1
  406. package/dist/settings/device-reset-setting.js +1 -6
  407. package/dist/settings/device-reset-setting.js.map +1 -1
  408. package/dist/settings/settings-heading.js.map +1 -1
  409. package/dist/settings/settings-layout.js +9 -20
  410. package/dist/settings/settings-layout.js.map +1 -1
  411. package/dist/settings/use-settings-route.js.map +1 -1
  412. package/dist/shell/app-shell.js +62 -31
  413. package/dist/shell/app-shell.js.map +1 -1
  414. package/dist/shell/auth-layout.js +1 -10
  415. package/dist/shell/auth-layout.js.map +1 -1
  416. package/dist/shell/dev-menu.js +12 -6
  417. package/dist/shell/dev-menu.js.map +1 -1
  418. package/dist/shell/option-switcher-menu.js.map +1 -1
  419. package/dist/shell/sync-status-indicator.js +7 -6
  420. package/dist/shell/sync-status-indicator.js.map +1 -1
  421. package/dist/shell/top-bar-parts-labels.js.map +1 -1
  422. package/dist/shell/topbar-action-menu.js.map +1 -1
  423. package/dist/shell/topbar-controls.js +1 -10
  424. package/dist/shell/topbar-controls.js.map +1 -1
  425. package/dist/shell/tour-menu.js +9 -1
  426. package/dist/shell/tour-menu.js.map +1 -1
  427. package/dist/sync/db.js.map +1 -1
  428. package/dist/sync/engine.js +24 -6
  429. package/dist/sync/engine.js.map +1 -1
  430. package/dist/sync.d.ts +2 -2
  431. package/dist/sync.js +7 -1
  432. package/dist/sync.js.map +1 -1
  433. package/dist/testing/css-variables.js.map +1 -1
  434. package/dist/testing/index.d.ts +1 -1
  435. package/dist/testing/index.js +1 -3
  436. package/dist/testing/index.js.map +1 -1
  437. package/dist/testing/react.js.map +1 -1
  438. package/dist/testing/viewport.js +7 -4
  439. package/dist/testing/viewport.js.map +1 -1
  440. package/dist/theme/contrast-tokens.js +13 -2
  441. package/dist/theme/contrast-tokens.js.map +1 -1
  442. package/dist/theme/contrast.d.ts +2 -2
  443. package/dist/theme/palette-derive.d.ts +1 -1
  444. package/dist/theme/palette-derive.js +18 -29
  445. package/dist/theme/palette-derive.js.map +1 -1
  446. package/dist/theme/palette-presets.js.map +1 -1
  447. package/dist/theme/palette-store.js.map +1 -1
  448. package/dist/theme/text-size.js.map +1 -1
  449. package/dist/theme/theme-store.js +1 -3
  450. package/dist/theme/theme-store.js.map +1 -1
  451. package/dist/tour/tour-catalogue.js.map +1 -1
  452. package/dist/tour/tour-dock.js +5 -1
  453. package/dist/tour/tour-dock.js.map +1 -1
  454. package/dist/tour/tour-engine.js +1 -4
  455. package/dist/tour/tour-engine.js.map +1 -1
  456. package/dist/tour/tour.js +21 -12
  457. package/dist/tour/tour.js.map +1 -1
  458. package/dist/tour/use-tour-progress.js.map +1 -1
  459. package/dist/tour/use-tour-url-sync.js.map +1 -1
  460. package/dist/wizard/stepper-nav.js +3 -24
  461. package/dist/wizard/stepper-nav.js.map +1 -1
  462. package/dist/wizard/types.js.map +1 -1
  463. package/dist/wizard/use-wizard.js +24 -28
  464. package/dist/wizard/use-wizard.js.map +1 -1
  465. package/dist/wizard/validation.js.map +1 -1
  466. package/dist/wizard/wizard-context.js.map +1 -1
  467. package/dist/wizard/wizard-step.d.ts +1 -1
  468. package/dist/wizard/wizard-step.js +1 -8
  469. package/dist/wizard/wizard-step.js.map +1 -1
  470. package/dist/wizard/wizard-summary.js.map +1 -1
  471. package/package.json +5 -2
  472. package/src/account/account-settings-labels.ts +1 -2
  473. package/src/account/account-settings.tsx +11 -17
  474. package/src/account/delete-account-setting.tsx +1 -6
  475. package/src/account/email-change-setting-labels.ts +1 -2
  476. package/src/account/email-change-setting.tsx +3 -1
  477. package/src/account/passkeys-setting.tsx +1 -3
  478. package/src/account/sessions-setting.tsx +4 -2
  479. package/src/admin/admin-action-confirm.tsx +4 -7
  480. package/src/admin/admin-action-log.tsx +29 -29
  481. package/src/admin/admin-area-labels.ts +4 -1
  482. package/src/admin/admin-overview.tsx +8 -2
  483. package/src/admin/admin-sections.tsx +3 -1
  484. package/src/admin/admin-tool-links.tsx +7 -1
  485. package/src/admin/invitations-panel.tsx +5 -11
  486. package/src/admin/mail-test-card.tsx +1 -2
  487. package/src/admin/reviewer-scope-editor.tsx +4 -9
  488. package/src/admin/role-select.tsx +4 -2
  489. package/src/admin/user-roster.tsx +2 -11
  490. package/src/auth/accept-invitation.tsx +1 -7
  491. package/src/auth/auth-errors.ts +1 -6
  492. package/src/auth/forgot-password-form.tsx +2 -7
  493. package/src/auth/register-form.tsx +7 -8
  494. package/src/auth/reset-password-form.tsx +2 -5
  495. package/src/auth/sign-in-form.tsx +15 -14
  496. package/src/auth/verify-email.tsx +2 -7
  497. package/src/billing/billing-banner.tsx +3 -7
  498. package/src/billing/billing-labels.ts +6 -4
  499. package/src/billing/checkout-processing.ts +0 -1
  500. package/src/billing/plan-card.tsx +9 -8
  501. package/src/billing/plan-limit-toast.tsx +1 -2
  502. package/src/billing/plan-limit.ts +1 -2
  503. package/src/billing/plan-price.ts +1 -4
  504. package/src/billing/plan-switch.tsx +1 -2
  505. package/src/billing/subscription-actions.tsx +5 -2
  506. package/src/components/account-chips.tsx +1 -7
  507. package/src/components/alert-banner.tsx +2 -8
  508. package/src/components/amount-input.tsx +206 -178
  509. package/src/components/authed-image.tsx +7 -4
  510. package/src/components/autocomplete.tsx +7 -9
  511. package/src/components/bulk-action-bar.tsx +2 -7
  512. package/src/components/button-group.tsx +1 -2
  513. package/src/components/button-look.ts +6 -17
  514. package/src/components/button.tsx +1 -4
  515. package/src/components/calculator.tsx +6 -9
  516. package/src/components/calendar-heatmap.tsx +5 -10
  517. package/src/components/card.tsx +9 -13
  518. package/src/components/chart-zoom-core.tsx +6 -33
  519. package/src/components/chart.tsx +8 -31
  520. package/src/components/checkbox-group.tsx +1 -4
  521. package/src/components/chip-input.tsx +6 -6
  522. package/src/components/chip.tsx +14 -26
  523. package/src/components/choice-card.tsx +4 -18
  524. package/src/components/column-mapper-labels.ts +3 -10
  525. package/src/components/column-mapper.tsx +33 -122
  526. package/src/components/combobox-core.tsx +12 -42
  527. package/src/components/combobox.tsx +2 -6
  528. package/src/components/confirm-dialog.tsx +1 -3
  529. package/src/components/copy-button.tsx +2 -4
  530. package/src/components/country-select.tsx +9 -21
  531. package/src/components/currency-option-list.tsx +13 -14
  532. package/src/components/currency-select.tsx +2 -7
  533. package/src/components/danger-confirm.tsx +8 -9
  534. package/src/components/data-table-cells.tsx +1 -2
  535. package/src/components/data-table-column-settings.tsx +1 -3
  536. package/src/components/data-table-filter-popover.tsx +5 -19
  537. package/src/components/data-table-filters.ts +1 -6
  538. package/src/components/data-table-fit.ts +1 -3
  539. package/src/components/data-table-groups.tsx +3 -1
  540. package/src/components/data-table-head.tsx +27 -45
  541. package/src/components/data-table-mobile.tsx +99 -108
  542. package/src/components/data-table-pagination.tsx +2 -6
  543. package/src/components/data-table-row-actions.tsx +25 -24
  544. package/src/components/data-table-row.tsx +16 -17
  545. package/src/components/data-table-shared.tsx +10 -16
  546. package/src/components/data-table-sort.ts +1 -2
  547. package/src/components/data-table-virtual.ts +9 -4
  548. package/src/components/data-table.tsx +489 -501
  549. package/src/components/date-picker.tsx +1 -7
  550. package/src/components/date-range-picker.tsx +3 -13
  551. package/src/components/description-list.tsx +7 -13
  552. package/src/components/dialog-frame.tsx +12 -3
  553. package/src/components/disclosure.tsx +8 -12
  554. package/src/components/dropdown.tsx +3 -11
  555. package/src/components/empty-state.tsx +1 -3
  556. package/src/components/entity-combobox.tsx +2 -6
  557. package/src/components/error-boundary.tsx +7 -7
  558. package/src/components/field-base.tsx +8 -14
  559. package/src/components/field-parts.tsx +12 -23
  560. package/src/components/field-sync.tsx +7 -11
  561. package/src/components/file-button.tsx +7 -3
  562. package/src/components/file-dropzone.tsx +7 -12
  563. package/src/components/floating-panel.tsx +44 -51
  564. package/src/components/focus-ring.ts +1 -2
  565. package/src/components/form-actions.tsx +1 -4
  566. package/src/components/grouped-picker.tsx +6 -8
  567. package/src/components/hover-menu.tsx +1 -4
  568. package/src/components/iban-input-labels.ts +1 -2
  569. package/src/components/icon-button.tsx +46 -48
  570. package/src/components/icon-picker.tsx +4 -17
  571. package/src/components/image-grid.tsx +1 -6
  572. package/src/components/inline-edit-field.tsx +1 -5
  573. package/src/components/inline-entity-combobox.tsx +6 -21
  574. package/src/components/input.tsx +14 -2
  575. package/src/components/jump-calendar.tsx +2 -6
  576. package/src/components/legal-labels.ts +1 -2
  577. package/src/components/legal-page.tsx +18 -7
  578. package/src/components/legal.tsx +14 -5
  579. package/src/components/lightbox.tsx +1 -3
  580. package/src/components/line-items.tsx +7 -15
  581. package/src/components/list.tsx +29 -25
  582. package/src/components/measured-grid.tsx +8 -30
  583. package/src/components/menu-item.tsx +1 -3
  584. package/src/components/mini-calendar.tsx +129 -159
  585. package/src/components/money-field.tsx +4 -2
  586. package/src/components/month-picker.tsx +14 -21
  587. package/src/components/multi-entity-combobox.tsx +6 -26
  588. package/src/components/multi-select.tsx +5 -9
  589. package/src/components/nav-pills.tsx +10 -2
  590. package/src/components/number-field.tsx +18 -15
  591. package/src/components/number-input.tsx +3 -19
  592. package/src/components/numpad-sheet.tsx +9 -13
  593. package/src/components/one-time-code-input.tsx +6 -11
  594. package/src/components/page-contents.tsx +2 -9
  595. package/src/components/page-header.tsx +5 -10
  596. package/src/components/password-strength-labels.ts +1 -2
  597. package/src/components/password-strength.tsx +6 -9
  598. package/src/components/phone-input.tsx +2 -13
  599. package/src/components/picker-sheet.tsx +2 -5
  600. package/src/components/pie-chart.tsx +6 -12
  601. package/src/components/popover.tsx +2 -1
  602. package/src/components/progress-bar.tsx +16 -25
  603. package/src/components/qr-code.tsx +2 -9
  604. package/src/components/row-actions.tsx +9 -1
  605. package/src/components/search-field.tsx +4 -5
  606. package/src/components/select.tsx +2 -10
  607. package/src/components/separator.tsx +1 -5
  608. package/src/components/series-chart-axes.ts +5 -5
  609. package/src/components/series-chart-budget.ts +1 -4
  610. package/src/components/series-chart-ticks.ts +1 -4
  611. package/src/components/series-chart.tsx +43 -83
  612. package/src/components/settings-fields.tsx +20 -15
  613. package/src/components/share-card.tsx +6 -14
  614. package/src/components/sign-chip.tsx +16 -16
  615. package/src/components/signature-pad.tsx +21 -13
  616. package/src/components/signed-amount.tsx +6 -14
  617. package/src/components/skeleton.tsx +2 -13
  618. package/src/components/slider.tsx +9 -20
  619. package/src/components/sparkline.tsx +2 -13
  620. package/src/components/stat-tile.tsx +13 -24
  621. package/src/components/swatch-picker.tsx +8 -3
  622. package/src/components/swipeable-row.tsx +2 -11
  623. package/src/components/table-skeleton.tsx +4 -1
  624. package/src/components/table.tsx +12 -8
  625. package/src/components/tabs.tsx +24 -39
  626. package/src/components/text-link.tsx +6 -6
  627. package/src/components/text.tsx +1 -2
  628. package/src/components/tile-radio.tsx +6 -19
  629. package/src/components/time-input.tsx +4 -5
  630. package/src/components/toast.tsx +3 -12
  631. package/src/components/toggle-group.tsx +9 -9
  632. package/src/components/toggle-legend.tsx +4 -16
  633. package/src/components/tooltip.tsx +9 -48
  634. package/src/components/translation-review-editor.tsx +4 -4
  635. package/src/components/translation-review-parts.tsx +7 -1
  636. package/src/components/translation-review.tsx +15 -16
  637. package/src/components/tree-view.tsx +17 -20
  638. package/src/components/treemap.tsx +59 -9
  639. package/src/components/trigger-aria.ts +1 -4
  640. package/src/components/use-table-state.ts +16 -17
  641. package/src/components/user-avatar.tsx +4 -21
  642. package/src/demo/demo-start.tsx +8 -4
  643. package/src/feedback/feedback-attachment-labels.ts +2 -1
  644. package/src/feedback/feedback-attachment.tsx +16 -29
  645. package/src/feedback/feedback-capture.ts +3 -1
  646. package/src/feedback/feedback-comment-thread.tsx +9 -6
  647. package/src/feedback/feedback-context.tsx +1 -4
  648. package/src/feedback/feedback-dialog.tsx +3 -4
  649. package/src/feedback/feedback-inbox.tsx +3 -9
  650. package/src/feedback/feedback-public-list.tsx +7 -1
  651. package/src/feedback/feedback-record.ts +6 -14
  652. package/src/feedback/feedback-replies.tsx +10 -5
  653. package/src/feedback/feedback-row-detail.tsx +2 -5
  654. package/src/feedback/feedback-status-undo.ts +1 -4
  655. package/src/feedback/feedback-submit-dialog.tsx +4 -4
  656. package/src/feedback/feedback-table.tsx +12 -8
  657. package/src/feedback/feedback-thread.tsx +4 -16
  658. package/src/feedback/feedback-vocabulary.ts +72 -82
  659. package/src/feedback/feedback-vote-button.tsx +9 -8
  660. package/src/hooks/use-anchored-rect.ts +1 -4
  661. package/src/hooks/use-document-title.ts +3 -1
  662. package/src/hooks/use-file-drop.ts +1 -3
  663. package/src/hooks/use-file-picker-labels.ts +1 -2
  664. package/src/hooks/use-file-picker.tsx +1 -5
  665. package/src/hooks/use-focus-trap.ts +1 -2
  666. package/src/hooks/use-overlay-history.ts +10 -5
  667. package/src/hooks/use-row-swipe.ts +1 -6
  668. package/src/i18n/defaults.ts +1 -4
  669. package/src/i18n/german.ts +33 -49
  670. package/src/i18n/kit-labels.tsx +5 -20
  671. package/src/i18n/languages.ts +2 -8
  672. package/src/i18n/locales/en.ts +11 -31
  673. package/src/i18n/locales/es.ts +35 -49
  674. package/src/i18n/locales/fr.ts +34 -51
  675. package/src/i18n/locales/hu.ts +26 -37
  676. package/src/i18n/locales/it.ts +35 -52
  677. package/src/i18n/locales/zh.ts +14 -32
  678. package/src/i18n/plurals.ts +4 -1
  679. package/src/i18n/review.ts +18 -7
  680. package/src/i18n/shared-labels.ts +1 -2
  681. package/src/index.ts +106 -32
  682. package/src/landing/access.ts +2 -7
  683. package/src/landing/landing-sections.tsx +14 -15
  684. package/src/landing/page-seo.ts +1 -3
  685. package/src/lib/calc.ts +4 -1
  686. package/src/lib/clipboard-minus.ts +4 -1
  687. package/src/lib/dates.ts +2 -10
  688. package/src/lib/decimal-marks.ts +1 -3
  689. package/src/lib/device-settings.ts +2 -1
  690. package/src/lib/direction.ts +1 -3
  691. package/src/lib/iban.ts +89 -9
  692. package/src/lib/logger.ts +1 -5
  693. package/src/lib/person-name.ts +1 -3
  694. package/src/lib/phone.ts +5 -8
  695. package/src/lib/qr-encode.ts +32 -8
  696. package/src/lib/session-refresh.ts +5 -6
  697. package/src/lib/table-text.ts +24 -6
  698. package/src/lib/text-match.ts +15 -3
  699. package/src/lib/translation-review.ts +1 -3
  700. package/src/notifications/notification-inbox.tsx +17 -4
  701. package/src/notifications/notification-parts.tsx +1 -2
  702. package/src/notifications/notification-types-setting.tsx +19 -18
  703. package/src/notifications/notifications-labels.ts +1 -2
  704. package/src/notifications/push-device-setting.tsx +7 -1
  705. package/src/notifications/push-devices-setting.tsx +7 -3
  706. package/src/notifications/push-worker.ts +10 -2
  707. package/src/notifications/quiet-hours-setting.tsx +4 -1
  708. package/src/notifications/use-push-device.ts +4 -1
  709. package/src/offline/pwa-update-prompt.tsx +7 -1
  710. package/src/offline/query-persistence.ts +9 -6
  711. package/src/offline.ts +6 -1
  712. package/src/rhf/fields.tsx +50 -19
  713. package/src/rhf/form-core.tsx +2 -6
  714. package/src/rhf/line-items.tsx +5 -7
  715. package/src/rhf/use-rhf-wizard-step.ts +3 -12
  716. package/src/search/command-palette.tsx +15 -23
  717. package/src/search/global-search.tsx +38 -8
  718. package/src/search/search-index.ts +5 -1
  719. package/src/settings/device-reset-setting.tsx +5 -8
  720. package/src/settings/settings-heading.tsx +3 -1
  721. package/src/settings/settings-layout.tsx +6 -13
  722. package/src/settings/use-settings-route.ts +4 -3
  723. package/src/shell/app-shell.tsx +48 -24
  724. package/src/shell/auth-layout.tsx +1 -6
  725. package/src/shell/dev-menu.tsx +12 -6
  726. package/src/shell/option-switcher-menu.tsx +1 -3
  727. package/src/shell/sync-status-indicator.tsx +14 -12
  728. package/src/shell/top-bar-parts-labels.ts +1 -3
  729. package/src/shell/topbar-action-menu.tsx +9 -8
  730. package/src/shell/topbar-controls.tsx +5 -19
  731. package/src/shell/tour-menu.tsx +9 -1
  732. package/src/sync/db.ts +5 -1
  733. package/src/sync/engine.ts +44 -12
  734. package/src/sync.ts +16 -2
  735. package/src/testing/css-variables.ts +1 -2
  736. package/src/testing/index.ts +1 -6
  737. package/src/testing/react.ts +1 -2
  738. package/src/testing/viewport.ts +9 -9
  739. package/src/theme/contrast-tokens.ts +13 -2
  740. package/src/theme/palette-derive.ts +24 -50
  741. package/src/theme/palette-presets.ts +0 -1
  742. package/src/theme/palette-store.ts +1 -4
  743. package/src/theme/text-size.ts +1 -1
  744. package/src/theme/theme-store.ts +2 -6
  745. package/src/tour/tour-catalogue.tsx +4 -2
  746. package/src/tour/tour-dock.ts +5 -1
  747. package/src/tour/tour-engine.ts +2 -6
  748. package/src/tour/tour.tsx +28 -12
  749. package/src/tour/use-tour-progress.ts +8 -2
  750. package/src/tour/use-tour-url-sync.ts +3 -1
  751. package/src/vite-env.d.ts +1 -4
  752. package/src/wizard/stepper-nav.tsx +10 -35
  753. package/src/wizard/types.ts +1 -4
  754. package/src/wizard/use-wizard.ts +28 -43
  755. package/src/wizard/validation.ts +1 -5
  756. package/src/wizard/wizard-context.tsx +2 -6
  757. package/src/wizard/wizard-step.tsx +1 -8
  758. package/src/wizard/wizard-summary.tsx +2 -6
  759. package/tokens.css +393 -152
@@ -37,15 +37,7 @@ import type { LucideIcon } from "lucide-react";
37
37
  * implementation", and nobody works an OPEN row. `REWORK` joined in 0.40 (§10.2
38
38
  * decisions 2, 4): "sent back, released for work again" — a READY that came back. */
39
39
  export type FeedbackStatus =
40
- | "OPEN"
41
- | "READY"
42
- | "REWORK"
43
- | "IN_PROGRESS"
44
- | "IN_EVALUATION"
45
- | "NEEDS_LIVE_TEST"
46
- | "POSTPONED"
47
- | "DONE"
48
- | "WONT_DO";
40
+ "OPEN" | "READY" | "REWORK" | "IN_PROGRESS" | "IN_EVALUATION" | "NEEDS_LIVE_TEST" | "POSTPONED" | "DONE" | "WONT_DO";
49
41
 
50
42
  /** What a report is about. `CRASH` is filed by an error boundary and never
51
43
  * chosen, which is exactly why it is loud below and absent from every picker. */
@@ -61,79 +53,77 @@ export type FeedbackCategory = "CRASH" | "BUG" | "IDEA" | "QUESTION" | "OTHER";
61
53
  * a restated list cannot be checked for exhaustiveness: an eighth status would
62
54
  * break the build here and leave a literal eight long (as READY did in 0.31).
63
55
  */
64
- export const FEEDBACK_STATUS_META: Record<
65
- FeedbackStatus,
66
- { icon: LucideIcon; activeBg: string; activeText: string }
67
- > = {
68
- OPEN: {
69
- icon: Inbox,
70
- activeBg: "bg-active",
71
- activeText: "text-primary",
72
- },
73
- // Triaged and released for implementation (feedback contract §8.2, keksdose live
74
- // #396): OPEN is "filed, nobody has looked yet", READY is "go". The brand tint at full
75
- // strength, so it reads as the go-ahead beside OPEN's neutral fill and
76
- // NEEDS_LIVE_TEST's muted brand.
77
- READY: {
78
- icon: ClipboardCheck,
79
- activeBg: "bg-brand-soft",
80
- activeText: "text-brand",
81
- },
82
- // Sent back by its author or an admin and released for work again (0.40, feedback
83
- // contract §10.2 decision 4): the Rework button's `RotateCcw`, in the danger tint so the
84
- // queue shows reworks apart from new reports. Not IN_PROGRESS's warning tint — that is
85
- // where a REWORK row moves next — and WONT_DO, the only other red, sits at the far end
86
- // with `Ban`.
87
- REWORK: {
88
- icon: RotateCcw,
89
- activeBg: "bg-danger-soft",
90
- activeText: "text-danger",
91
- },
92
- IN_PROGRESS: {
93
- icon: Wrench,
94
- activeBg: "bg-warning-soft",
95
- activeText: "text-warning",
96
- },
97
- // Where solved work is parked, waiting on the person who reported it. Its own
98
- // colour, because "somebody has to check this" is a state you want to find by
99
- // scanning rather than by reading.
100
- IN_EVALUATION: {
101
- icon: Eye,
102
- activeBg: "bg-info-soft",
103
- activeText: "text-info",
104
- },
105
- // Resolved but only checkable on a deployed build — the SOFT brand tint, so it
106
- // reads as "waiting on something" rather than as a done or a refusal, and it
107
- // follows whatever the consumer's brand is instead of pinning an indigo island
108
- // beside it.
109
- NEEDS_LIVE_TEST: {
110
- icon: CloudUpload,
111
- activeBg: "bg-brand-soft",
112
- activeText: "text-brand-muted",
113
- },
114
- // Parked on purpose. Muted, not `--danger`: it is not a refusal.
115
- POSTPONED: {
116
- icon: PauseCircle,
117
- activeBg: "bg-active",
118
- activeText: "text-secondary",
119
- },
120
- // The one status with nowhere to move to: the vocabulary has a brand, an info, a
121
- // warning and a danger, and nothing that means "succeeded". Deliberately NOT
122
- // borrowed from a family that means something else — `--status-synced` is a
123
- // FIELD's trip to the database rather than an outcome, and tokens.css says so in
124
- // as many words. Green beside WONT_DO's red is the classic CVD-unsafe pair, which
125
- // is why both carry a glyph and neither leans on colour alone.
126
- DONE: {
127
- icon: CheckCircle2,
128
- activeBg: "bg-success-soft",
129
- activeText: "text-success",
130
- },
131
- WONT_DO: {
132
- icon: Ban,
133
- activeBg: "bg-danger-soft",
134
- activeText: "text-danger",
135
- },
136
- };
56
+ export const FEEDBACK_STATUS_META: Record<FeedbackStatus, { icon: LucideIcon; activeBg: string; activeText: string }> =
57
+ {
58
+ OPEN: {
59
+ icon: Inbox,
60
+ activeBg: "bg-active",
61
+ activeText: "text-primary",
62
+ },
63
+ // Triaged and released for implementation (feedback contract §8.2, keksdose live
64
+ // #396): OPEN is "filed, nobody has looked yet", READY is "go". The brand tint at full
65
+ // strength, so it reads as the go-ahead beside OPEN's neutral fill and
66
+ // NEEDS_LIVE_TEST's muted brand.
67
+ READY: {
68
+ icon: ClipboardCheck,
69
+ activeBg: "bg-brand-soft",
70
+ activeText: "text-brand",
71
+ },
72
+ // Sent back by its author or an admin and released for work again (0.40, feedback
73
+ // contract §10.2 decision 4): the Rework button's `RotateCcw`, in the danger tint so the
74
+ // queue shows reworks apart from new reports. Not IN_PROGRESS's warning tint — that is
75
+ // where a REWORK row moves next — and WONT_DO, the only other red, sits at the far end
76
+ // with `Ban`.
77
+ REWORK: {
78
+ icon: RotateCcw,
79
+ activeBg: "bg-danger-soft",
80
+ activeText: "text-danger",
81
+ },
82
+ IN_PROGRESS: {
83
+ icon: Wrench,
84
+ activeBg: "bg-warning-soft",
85
+ activeText: "text-warning",
86
+ },
87
+ // Where solved work is parked, waiting on the person who reported it. Its own
88
+ // colour, because "somebody has to check this" is a state you want to find by
89
+ // scanning rather than by reading.
90
+ IN_EVALUATION: {
91
+ icon: Eye,
92
+ activeBg: "bg-info-soft",
93
+ activeText: "text-info",
94
+ },
95
+ // Resolved but only checkable on a deployed build — the SOFT brand tint, so it
96
+ // reads as "waiting on something" rather than as a done or a refusal, and it
97
+ // follows whatever the consumer's brand is instead of pinning an indigo island
98
+ // beside it.
99
+ NEEDS_LIVE_TEST: {
100
+ icon: CloudUpload,
101
+ activeBg: "bg-brand-soft",
102
+ activeText: "text-brand-muted",
103
+ },
104
+ // Parked on purpose. Muted, not `--danger`: it is not a refusal.
105
+ POSTPONED: {
106
+ icon: PauseCircle,
107
+ activeBg: "bg-active",
108
+ activeText: "text-secondary",
109
+ },
110
+ // The one status with nowhere to move to: the vocabulary has a brand, an info, a
111
+ // warning and a danger, and nothing that means "succeeded". Deliberately NOT
112
+ // borrowed from a family that means something else — `--status-synced` is a
113
+ // FIELD's trip to the database rather than an outcome, and tokens.css says so in
114
+ // as many words. Green beside WONT_DO's red is the classic CVD-unsafe pair, which
115
+ // is why both carry a glyph and neither leans on colour alone.
116
+ DONE: {
117
+ icon: CheckCircle2,
118
+ activeBg: "bg-success-soft",
119
+ activeText: "text-success",
120
+ },
121
+ WONT_DO: {
122
+ icon: Ban,
123
+ activeBg: "bg-danger-soft",
124
+ activeText: "text-danger",
125
+ },
126
+ };
137
127
 
138
128
  /** Chain order, then the three off it. The order a picker offers, and the rank a
139
129
  * status column sorts by — so a list sorted by status reads as a queue rather
@@ -74,8 +74,7 @@ export function FeedbackVoteButton({
74
74
  // pressed against: a refetch that brings new numbers is the truth.
75
75
  const [shown, setShown] = useState<{ base: FeedbackVoteState; state: FeedbackVoteState } | null>(null);
76
76
  const busy = useRef(false);
77
- const current =
78
- shown && shown.base.votes === votes && shown.base.voted === voted ? shown.state : { votes, voted };
77
+ const current = shown && shown.base.votes === votes && shown.base.voted === voted ? shown.state : { votes, voted };
79
78
  const pressed = own || current.voted;
80
79
 
81
80
  const press = () => {
@@ -85,12 +84,14 @@ export function FeedbackVoteButton({
85
84
  const next = !before.voted;
86
85
  busy.current = true;
87
86
  setShown({ base, state: { votes: Math.max(0, before.votes + (next ? 1 : -1)), voted: next } });
88
- onVote(next).then(
89
- (answer) => setShown({ base, state: { votes: answer.votes, voted: answer.voted } }),
90
- () => setShown({ base, state: before }),
91
- ).finally(() => {
92
- busy.current = false;
93
- });
87
+ onVote(next)
88
+ .then(
89
+ (answer) => setShown({ base, state: { votes: answer.votes, voted: answer.voted } }),
90
+ () => setShown({ base, state: before }),
91
+ )
92
+ .finally(() => {
93
+ busy.current = false;
94
+ });
94
95
  };
95
96
 
96
97
  const count = formatNumber(current.votes, { locale });
@@ -36,10 +36,7 @@ export function sameRect<R extends { top: number; left: number; width: number; h
36
36
  * Measured in a layout effect so the position is ready before paint (no flicker
37
37
  * on open).
38
38
  */
39
- export function useAnchoredRect<T extends HTMLElement>(
40
- ref: RefObject<T | null>,
41
- open: boolean,
42
- ): AnchorRect | null {
39
+ export function useAnchoredRect<T extends HTMLElement>(ref: RefObject<T | null>, open: boolean): AnchorRect | null {
43
40
  const [rect, setRect] = useState<AnchorRect | null>(null);
44
41
 
45
42
  useLayoutEffect(() => {
@@ -19,7 +19,9 @@ export function useDocumentTitle(parts: ReadonlyArray<string | null | undefined
19
19
  const { format, appName } = useKitDocumentTitle();
20
20
  const [page, section, app] = parts.map((p) => (typeof p === "string" && p.trim() !== "" ? p : undefined));
21
21
  const any = parts.some((p) => typeof p === "string" && p.trim() !== "");
22
- const title = any ? formatDocumentTitle(format ?? DEFAULT_DOCUMENT_TITLE_FORMAT, { page, section, app: app ?? appName }) : null;
22
+ const title = any
23
+ ? formatDocumentTitle(format ?? DEFAULT_DOCUMENT_TITLE_FORMAT, { page, section, app: app ?? appName })
24
+ : null;
23
25
  useEffect(() => {
24
26
  if (title === null || title === "") return;
25
27
  const before = document.title;
@@ -111,9 +111,7 @@ export function useDragTarget<E extends Element = Element>({
111
111
  return { dropProps, isOver: over && !disabled };
112
112
  }
113
113
 
114
- export function useFileDrop<E extends Element = Element>(
115
- options: UseFileDropOptions,
116
- ): UseFileDropReturn<E> {
114
+ export function useFileDrop<E extends Element = Element>(options: UseFileDropOptions): UseFileDropReturn<E> {
117
115
  const picker = useFilePicker(options);
118
116
  const { dropProps, isOver } = useDragTarget<E>({
119
117
  disabled: options.disabled,
@@ -13,8 +13,7 @@ export const DEFAULT_FILE_PICKER_LABELS: FilePickerLabels = {
13
13
  `“${name}” was not added: at most ${maxFiles} ${maxFiles === 1 ? "file" : "files"}`,
14
14
  rejectedInvalid: (name) => `“${name}” cannot be used here`,
15
15
  rejectedMany: (count) => `${count} files were not added`,
16
- rejectedPick: (count) =>
17
- count === 1 ? "The file was not added" : `None of the ${count} files were added`,
16
+ rejectedPick: (count) => (count === 1 ? "The file was not added" : `None of the ${count} files were added`),
18
17
  selected: (count, firstName) => (count === 1 ? `“${firstName}” selected` : `${count} files selected`),
19
18
  remove: (name) => `Remove “${name}”`,
20
19
  clearAll: "Remove all files",
@@ -215,11 +215,7 @@ export type FilePickHandler = (accepted: File[], rejected: FileRejection[]) => b
215
215
  /** @internal The shared tail of both pickers: run `onPick`, and say whether the pick
216
216
  * stands. A pick with nothing accepted has nothing to refuse, so `false` there is
217
217
  * treated as no verdict and the usual per-file messages are kept. */
218
- export function judgePick(
219
- onPick: FilePickHandler | undefined,
220
- accepted: File[],
221
- rejected: FileRejection[],
222
- ): boolean {
218
+ export function judgePick(onPick: FilePickHandler | undefined, accepted: File[], rejected: FileRejection[]): boolean {
223
219
  if (!onPick) return true;
224
220
  return onPick(accepted, rejected) !== false || accepted.length === 0;
225
221
  }
@@ -56,8 +56,7 @@ const FOCUSABLE =
56
56
  * reaches, so no correct order changes. `visibility: hidden` and closed `<details>` are
57
57
  * still not walked — they need layout, which this list has never read.
58
58
  */
59
- const isTabStop = (el: HTMLElement): boolean =>
60
- el.tabIndex >= 0 && !el.closest("[hidden],[inert]");
59
+ const isTabStop = (el: HTMLElement): boolean => el.tabIndex >= 0 && !el.closest("[hidden],[inert]");
61
60
 
62
61
  /**
63
62
  * Marks a container whose trap is currently active.
@@ -408,10 +408,7 @@ function taggedSentinel(): string | null {
408
408
  * written there — we are a passenger in that object, not its owner. */
409
409
  function retag(id: string): void {
410
410
  const prev = window.history.state;
411
- window.history.replaceState(
412
- { ...(prev && typeof prev === "object" ? prev : {}), [SENTINEL_KEY]: id },
413
- "",
414
- );
411
+ window.history.replaceState({ ...(prev && typeof prev === "object" ? prev : {}), [SENTINEL_KEY]: id }, "");
415
412
  }
416
413
 
417
414
  function currentSentinel(): string | null {
@@ -571,7 +568,15 @@ export function useOverlayHistory(open: boolean, onClose: () => void): void {
571
568
  // The abandoned ones beneath come back owed; ours takes the top slot.
572
569
  for (const owed of inherited.slice(0, -1)) pushed.push({ ...owed, dead: true });
573
570
  const was = inherited[inherited.length - 1];
574
- pushed.push({ id, href: currentHref(), seen: currentHref(), dead: false, idx: was.idx, key: was.key, route: was.route });
571
+ pushed.push({
572
+ id,
573
+ href: currentHref(),
574
+ seen: currentHref(),
575
+ dead: false,
576
+ idx: was.idx,
577
+ key: was.key,
578
+ route: was.route,
579
+ });
575
580
  standing = id;
576
581
  } else {
577
582
  // A push DESTROYS every entry ahead of the one we are on, so anything we
@@ -83,12 +83,7 @@ function lastArmed(stages: SwipeStage[] | undefined, magnitude: number): number
83
83
  return idx;
84
84
  }
85
85
 
86
- export function useRowSwipe({
87
- enabled,
88
- leftStages,
89
- rightStages,
90
- maxDrag = 252,
91
- }: RowSwipeOptions): RowSwipeReturn {
86
+ export function useRowSwipe({ enabled, leftStages, rightStages, maxDrag = 252 }: RowSwipeOptions): RowSwipeReturn {
92
87
  const [dx, setDx] = useState(0);
93
88
  const [dragging, setDragging] = useState(false);
94
89
  const startX = useRef(0);
@@ -33,10 +33,7 @@ import { DEFAULT_CONFIRM_DIALOG_LABELS } from "../components/confirm-dialog-labe
33
33
  import { DEFAULT_FLOATING_PANEL_LABELS } from "../components/floating-panel-labels";
34
34
  import { DEFAULT_FEEDBACK_ATTACHMENT_LABELS } from "../feedback/feedback-attachment-labels";
35
35
  import { DEFAULT_FEEDBACK_DIALOG_LABELS } from "../feedback/feedback-dialog-labels";
36
- import {
37
- DEFAULT_FEEDBACK_COMPOSER_LABELS,
38
- DEFAULT_FEEDBACK_THREAD_LABELS,
39
- } from "../feedback/feedback-thread-labels";
36
+ import { DEFAULT_FEEDBACK_COMPOSER_LABELS, DEFAULT_FEEDBACK_THREAD_LABELS } from "../feedback/feedback-thread-labels";
40
37
  import {
41
38
  DEFAULT_FEEDBACK_CATEGORY_LABELS,
42
39
  DEFAULT_FEEDBACK_STATUS_LABELS,
@@ -20,16 +20,14 @@ export function germanLabels(numberLocale: string): UiKitLabels {
20
20
  // 0.30.0 — a throttled request (HTTP 429), as `englishRateLimited` in
21
21
  // src/auth/auth-errors.ts: no wait → "einen Moment", under a minute → seconds, else
22
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`;
23
+ const wait = (seconds: number) => (seconds < 60 ? `${n(Math.ceil(seconds))} s` : `${n(Math.ceil(seconds / 60))} min`);
25
24
  const rateLimited = (seconds?: number) =>
26
25
  !seconds || seconds <= 0
27
26
  ? "Zu viele Versuche. Bitte warten Sie einen Moment und versuchen Sie es dann noch einmal."
28
27
  : `Zu viele Versuche. Versuchen Sie es in ${wait(seconds)} erneut.`;
29
28
  // 0.32.0 — when a trial or a grant ends, as `inDays` in src/billing/billing-labels.ts:
30
29
  // 0 (or less) is today, 1 tomorrow.
31
- const inDays = (days: number) =>
32
- days <= 0 ? "heute" : days === 1 ? "morgen" : `in ${n(days)} Tagen`;
30
+ const inDays = (days: number) => (days <= 0 ? "heute" : days === 1 ? "morgen" : `in ${n(days)} Tagen`);
33
31
 
34
32
  return {
35
33
  feedbackAttachment: {
@@ -281,7 +279,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
281
279
  passkeys: {
282
280
  title: "Passkeys",
283
281
  description: "Mit Fingerabdruck, Gesichtserkennung oder Geräte-PIN statt Passwort anmelden.",
284
- descriptionAlongside: "Mit Fingerabdruck, Gesichtserkennung oder Geräte-PIN anmelden. Das Passwort funktioniert weiterhin.",
282
+ descriptionAlongside:
283
+ "Mit Fingerabdruck, Gesichtserkennung oder Geräte-PIN anmelden. Das Passwort funktioniert weiterhin.",
285
284
  empty: "Noch keine Passkeys",
286
285
  loading: "Passkeys werden geladen…",
287
286
  list: "Registrierte Passkeys",
@@ -318,8 +317,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
318
317
  "Pfeiltasten wechseln zwischen Zellen. Tippen ersetzt eine Zelle, F2 bearbeitet sie, Escape macht die Bearbeitung rückgängig. Enter geht nach unten und fügt am Ende eine Zeile hinzu.",
319
318
  lineError: (line) => `Zeile ${line} konnte nicht gelesen werden`,
320
319
  points: (count) => (count === 1 ? "1 Punkt" : `${n(count)} Punkte`),
321
- problems: (count) =>
322
- count === 1 ? "1 Zelle ist keine Zahl" : `${n(count)} Zellen sind keine Zahlen`,
320
+ problems: (count) => (count === 1 ? "1 Zelle ist keine Zahl" : `${n(count)} Zellen sind keine Zahlen`),
323
321
  },
324
322
  pageContents: { title: "Auf dieser Seite" },
325
323
  common: {
@@ -388,8 +386,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
388
386
  last_year: "Letztes Jahr",
389
387
  },
390
388
  table: "Datentabelle",
391
- filterResults: (shown, total) =>
392
- `${n(shown)} von ${n(total)} ${total === 1 ? "Zeile" : "Zeilen"}`,
389
+ filterResults: (shown, total) => `${n(shown)} von ${n(total)} ${total === 1 ? "Zeile" : "Zeilen"}`,
393
390
  sortedAscending: (column) => `Sortiert nach ${column}, aufsteigend`,
394
391
  sortedDescending: (column) => `Sortiert nach ${column}, absteigend`,
395
392
  sortCleared: (column) => `Sortierung nach ${column} aufgehoben`,
@@ -420,8 +417,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
420
417
  chooseStart: "Startdatum wählen",
421
418
  chooseEnd: "Enddatum wählen",
422
419
  startSelected: (date) => `${date} als Startdatum gewählt. Wählen Sie jetzt ein Enddatum.`,
423
- rangeSelected: (from, to) =>
424
- `Zeitraum ${from} bis ${to} gewählt. Wählen Sie ein Startdatum, um neu zu beginnen.`,
420
+ rangeSelected: (from, to) => `Zeitraum ${from} bis ${to} gewählt. Wählen Sie ein Startdatum, um neu zu beginnen.`,
425
421
  },
426
422
  calendarHeatmap: {
427
423
  grid: "Tageswerte",
@@ -587,9 +583,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
587
583
  hint: (accept) => (accept ? `Erlaubt: ${accept}` : "Beliebiger Dateityp"),
588
584
  busy: "Wird hochgeladen…",
589
585
  rejectedPick: (count) =>
590
- count === 1
591
- ? "Die Datei wurde nicht hinzugefügt"
592
- : `Keine der ${n(count)} Dateien wurde hinzugefügt`,
586
+ count === 1 ? "Die Datei wurde nicht hinzugefügt" : `Keine der ${n(count)} Dateien wurde hinzugefügt`,
593
587
  rejectedType: (name) => `„${name}“ hat einen nicht unterstützten Dateityp`,
594
588
  rejectedTypeOnly: (accept) => `Nur ${accept}-Dateien`,
595
589
  rejectedSize: (name, maxSize) => `„${name}“ ist größer als ${maxSize}`,
@@ -597,11 +591,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
597
591
  `„${name}“ wurde nicht hinzugefügt: höchstens ${n(maxFiles)} ${maxFiles === 1 ? "Datei" : "Dateien"}`,
598
592
  rejectedInvalid: (name) => `„${name}“ kann hier nicht verwendet werden`,
599
593
  rejectedMany: (count) =>
600
- count === 1
601
- ? "1 Datei wurde nicht hinzugefügt"
602
- : `${n(count)} Dateien wurden nicht hinzugefügt`,
603
- selected: (count, firstName) =>
604
- count === 1 ? `„${firstName}“ ausgewählt` : `${n(count)} Dateien ausgewählt`,
594
+ count === 1 ? "1 Datei wurde nicht hinzugefügt" : `${n(count)} Dateien wurden nicht hinzugefügt`,
595
+ selected: (count, firstName) => (count === 1 ? `„${firstName}“ ausgewählt` : `${n(count)} Dateien ausgewählt`),
605
596
  remove: (name) => `„${name}“ entfernen`,
606
597
  clearAll: "Alle Dateien entfernen",
607
598
  removed: (name) => `„${name}“ entfernt`,
@@ -745,8 +736,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
745
736
  optional: (rule) => `${rule} (optional)`,
746
737
  met: "Erfüllt:",
747
738
  notMet: "Nicht erfüllt:",
748
- tooLong: (maxBytes) =>
749
- `Höchstens ${n(maxBytes)} Zeichen (Buchstaben mit Akzent und Emojis zählen mehrfach).`,
739
+ tooLong: (maxBytes) => `Höchstens ${n(maxBytes)} Zeichen (Buchstaben mit Akzent und Emojis zählen mehrfach).`,
750
740
  },
751
741
  seriesChart: {
752
742
  resetZoom: "Zoom zurücksetzen",
@@ -827,9 +817,11 @@ export function germanLabels(numberLocale: string): UiKitLabels {
827
817
  details: "Fehlerdetails",
828
818
  reload: "Neu laden",
829
819
  updateTitle: "Eine neue Version ist verfügbar",
830
- updateMessage: "Ein Teil der App hat sich seit dem Laden dieser Seite geändert. Zum Aktualisieren die Seite neu laden.",
820
+ updateMessage:
821
+ "Ein Teil der App hat sich seit dem Laden dieser Seite geändert. Zum Aktualisieren die Seite neu laden.",
831
822
  offlineTitle: "Keine Internetverbindung",
832
- offlineMessage: "Diese Seite konnte ohne Verbindung nicht geladen werden. Nach dem Wiederherstellen der Verbindung die Seite neu laden.",
823
+ offlineMessage:
824
+ "Diese Seite konnte ohne Verbindung nicht geladen werden. Nach dem Wiederherstellen der Verbindung die Seite neu laden.",
833
825
  copyReport: "Fehlerbericht kopieren",
834
826
  reported: "Der Fehler wurde automatisch gemeldet.",
835
827
  reportedAs: (reference) => `Gemeldet unter ${reference}`,
@@ -1030,8 +1022,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1030
1022
  failed: "Anmeldung fehlgeschlagen. Bitte versuchen Sie es erneut.",
1031
1023
  passkeyFailed: "Passkey-Anmeldung fehlgeschlagen.",
1032
1024
  deactivatedHint: "Konto deaktiviert? Schreiben Sie an {contact}.",
1033
- tagHint: (taggedAddress) =>
1034
- `Mit ${taggedAddress} registriert? Verwenden Sie diese Adresse.`,
1025
+ tagHint: (taggedAddress) => `Mit ${taggedAddress} registriert? Verwenden Sie diese Adresse.`,
1035
1026
  twoFactorTitle: "Zwei-Faktor-Authentifizierung",
1036
1027
  twoFactorIntro: "Geben Sie den Code aus Ihrer Authenticator-App ein.",
1037
1028
  code: "2FA-Code",
@@ -1264,10 +1255,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1264
1255
  "Der Service Worker der App ist nicht erreichbar. Laden Sie die Seite neu und versuchen Sie es erneut.",
1265
1256
  pushTimeout:
1266
1257
  "Der Push-Dienst des Browsers antwortet nicht. Prüfen Sie Ihre Verbindung und versuchen Sie es erneut.",
1267
- testSent: (count) =>
1268
- count === 1 ? `Test an ${n(count)} Gerät gesendet` : `Test an ${n(count)} Geräte gesendet`,
1269
- testNone:
1270
- "Kein Gerät hat den Test angenommen. Schalten Sie zuerst die Benachrichtigungen für dieses Gerät ein.",
1258
+ testSent: (count) => (count === 1 ? `Test an ${n(count)} Gerät gesendet` : `Test an ${n(count)} Geräte gesendet`),
1259
+ testNone: "Kein Gerät hat den Test angenommen. Schalten Sie zuerst die Benachrichtigungen für dieses Gerät ein.",
1271
1260
  testFailed: "Die Test-Benachrichtigung konnte nicht gesendet werden.",
1272
1261
  explainerTitle: "Benachrichtigungen einschalten?",
1273
1262
  explainerBody: (app) =>
@@ -1417,8 +1406,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1417
1406
  lastAdmin:
1418
1407
  "Dies ist das letzte aktive Konto mit Administratorrechten. Geben Sie zuerst einem anderen Konto Administratorrechte.",
1419
1408
  self: "Mit Ihrem eigenen Konto ist das nicht möglich.",
1420
- confirmationMismatch:
1421
- "Die Adresse passt nicht zu diesem Konto. Prüfen Sie, bei welchem Konto Sie sind.",
1409
+ confirmationMismatch: "Die Adresse passt nicht zu diesem Konto. Prüfen Sie, bei welchem Konto Sie sind.",
1422
1410
  otherCompanies:
1423
1411
  "Dieses Konto gehört auch zu anderen Unternehmen, deshalb kann nur der Plattformbetreiber das tun. Sie können es stattdessen aus diesem Unternehmen entfernen.",
1424
1412
  removeFromCompany: "Aus dem Unternehmen entfernen",
@@ -1542,8 +1530,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1542
1530
  consoleHint:
1543
1531
  "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.",
1544
1532
  linkReady: (email) => `Der Einladungslink für ${email}, nur dieses eine Mal angezeigt:`,
1545
- notSent: (email) =>
1546
- `${email} ist eingeladen, aber die Mail konnte nicht gesendet werden. Senden Sie sie erneut.`,
1533
+ notSent: (email) => `${email} ist eingeladen, aber die Mail konnte nicht gesendet werden. Senden Sie sie erneut.`,
1547
1534
  failed: "Das hat nicht geklappt. Bitte erneut versuchen.",
1548
1535
  },
1549
1536
  characterCount: {
@@ -1565,8 +1552,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1565
1552
  ibanInput: {
1566
1553
  format: "Eine IBAN beginnt mit einem Ländercode aus zwei Buchstaben und zwei Prüfziffern.",
1567
1554
  country: (code) => `„${code}“ ist kein Ländercode einer IBAN.`,
1568
- length: (actual, expected) =>
1569
- `Eine IBAN aus diesem Land hat ${n(expected)} Zeichen – diese hat ${n(actual)}.`,
1555
+ length: (actual, expected) => `Eine IBAN aus diesem Land hat ${n(expected)} Zeichen – diese hat ${n(actual)}.`,
1570
1556
  checksum: "Die Prüfziffern stimmen nicht – vermutlich ist ein Zeichen falsch eingegeben.",
1571
1557
  qrRequired: "Dies ist eine reguläre IBAN. Eine QR-Rechnung braucht die QR-IBAN des Kontos.",
1572
1558
  qrNotAllowed:
@@ -1600,9 +1586,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1600
1586
  decimalComma: "Dezimalkomma (1,5)",
1601
1587
  decimalPoint: "Dezimalpunkt (1.5)",
1602
1588
  unreadCount: (count) =>
1603
- count === 1
1604
- ? "1 Zeile konnte nicht gelesen werden"
1605
- : `${n(count)} Zeilen konnten nicht gelesen werden`,
1589
+ count === 1 ? "1 Zeile konnte nicht gelesen werden" : `${n(count)} Zeilen konnten nicht gelesen werden`,
1606
1590
  // A line number is a position, not a count: unformatted, as `measuredGrid.lineError`.
1607
1591
  unreadLine: (line) => `Zeile ${line} konnte nicht gelesen werden`,
1608
1592
  unreadMore: (count) => `…und ${n(count)} weitere`,
@@ -1614,9 +1598,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1614
1598
  requiredRole: (role) => `${role} (erforderlich)`,
1615
1599
  requiredRoleShort: (role) => `${role} *`,
1616
1600
  previewOf: (shown, total) =>
1617
- shown === 1
1618
- ? `Die erste von ${n(total)} Zeilen`
1619
- : `Die ersten ${n(shown)} von ${n(total)} Zeilen`,
1601
+ shown === 1 ? `Die erste von ${n(total)} Zeilen` : `Die ersten ${n(shown)} von ${n(total)} Zeilen`,
1620
1602
  // `roles` arrives joined with "oder" ("Soll oder Haben").
1621
1603
  oneOf: (roles) => `entweder ${roles}`,
1622
1604
  missing: (roles) => `Noch erforderlich: ${roles}.`,
@@ -1672,7 +1654,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1672
1654
  exportCorrections: (count) => `Korrekturen exportieren (${n(count)})`,
1673
1655
  failed: "Das hat nicht geklappt. Bitte erneut versuchen.",
1674
1656
  approvedToast: (count) => (count === 1 ? "Text bestätigt" : `${n(count)} Texte bestätigt`),
1675
- clearedToast: (count) => (count === 1 ? "Text als ungeprüft markiert" : `${n(count)} Texte als ungeprüft markiert`),
1657
+ clearedToast: (count) =>
1658
+ count === 1 ? "Text als ungeprüft markiert" : `${n(count)} Texte als ungeprüft markiert`,
1676
1659
  groupCount: (unreviewed, total) => `${n(unreviewed)} ungeprüft / ${n(total)}`,
1677
1660
  approveGroup: (count) => `Ungeprüfte bestätigen (${n(count)})`,
1678
1661
  // The group's name quoted, as `columnMapper.roleOf`'s column: it is often a key
@@ -1874,9 +1857,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1874
1857
  "Ihr kostenloser Zugang hat kein Enddatum. Solange er läuft, ändert ein Kauf Ihren Tarif nicht: Sie würden für einen Tarif bezahlen, der nicht gilt.",
1875
1858
  grantWarningAction: "Trotzdem kaufen",
1876
1859
  waitingChanges: (count) =>
1877
- count === 1
1878
- ? `${n(count)} Änderung wartet auf einen Tarif`
1879
- : `${n(count)} Änderungen warten auf einen Tarif`,
1860
+ count === 1 ? `${n(count)} Änderung wartet auf einen Tarif` : `${n(count)} Änderungen warten auf einen Tarif`,
1880
1861
  // "Verwerfen", as `wizard.cancelConfirmLabel`.
1881
1862
  discardWaiting: "Wartende Änderungen verwerfen",
1882
1863
  notConfigured: "Zahlungen sind noch nicht eingerichtet. Bitte versuchen Sie es später noch einmal.",
@@ -1888,8 +1869,7 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1888
1869
  planNotSold:
1889
1870
  "Dieser Tarif ist für diesen Abrechnungszeitraum oder diese Währung nicht erhältlich. Bitte wählen Sie einen anderen.",
1890
1871
  // 0.39 (§15.2.10): the plan switch's refusals.
1891
- notSubscribed:
1892
- "Es läuft kein Abonnement, das sich ändern ließe. Wählen Sie einen Tarif, um eines abzuschließen.",
1872
+ notSubscribed: "Es läuft kein Abonnement, das sich ändern ließe. Wählen Sie einen Tarif, um eines abzuschließen.",
1893
1873
  planUnchanged: "Das ist bereits Ihr Tarif. Wählen Sie einen anderen Tarif oder Abrechnungszeitraum.",
1894
1874
  },
1895
1875
  // 0.33.0 — docs/billing-harmonization.md §14.12: the operator's plan parts, "Tarif" as
@@ -1965,7 +1945,8 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1965
1945
  // Administratoren", which would give the reader a gender (as `transferOwnership`).
1966
1946
  mailTestCard: {
1967
1947
  title: "Testmail",
1968
- description: "Sendet eine Mail an Ihre eigene Adresse, über den Versand, mit dem diese Installation alle Mails verschickt.",
1948
+ description:
1949
+ "Sendet eine Mail an Ihre eigene Adresse, über den Versand, mit dem diese Installation alle Mails verschickt.",
1969
1950
  transport: (backend) => `Versand: ${backend}`,
1970
1951
  action: "Testmail an mich senden",
1971
1952
  sent: (address) => `An ${address} gesendet. Bitte prüfen Sie den Posteingang.`,
@@ -1985,7 +1966,10 @@ export function germanLabels(numberLocale: string): UiKitLabels {
1985
1966
  sections: {
1986
1967
  overview: { title: "Übersicht", help: "Was gerade wartet, auf einen Blick." },
1987
1968
  users: { title: "Benutzer", help: "Wer ein Konto hat und was jede Person darf." },
1988
- invitations: { title: "Einladungen", help: "Laden Sie Personen per E-Mail in ihrer Sprache ein; senden Sie offene Einladungen erneut oder widerrufen Sie sie." },
1969
+ invitations: {
1970
+ title: "Einladungen",
1971
+ help: "Laden Sie Personen per E-Mail in ihrer Sprache ein; senden Sie offene Einladungen erneut oder widerrufen Sie sie.",
1972
+ },
1989
1973
  billing: { title: "Abrechnung", help: "Tarif, Zahlung und Rechnungen." },
1990
1974
  activity: { title: "Aktivität", help: "Was in der Verwaltung getan wurde, das Neueste zuerst." },
1991
1975
  },
@@ -46,11 +46,7 @@ import type { MeasuredGridLabels } from "../components/measured-grid";
46
46
  import type { FeedbackAttachmentFieldLabels } from "../feedback/feedback-attachment";
47
47
  import type { FeedbackDialogTextLabels } from "../feedback/feedback-dialog";
48
48
  import type { FeedbackComposerLabels, FeedbackThreadLabels } from "../feedback/feedback-thread";
49
- import type {
50
- FeedbackCategoryLabels,
51
- FeedbackStatusLabels,
52
- FeedbackToastLabels,
53
- } from "../feedback/feedback-labels";
49
+ import type { FeedbackCategoryLabels, FeedbackStatusLabels, FeedbackToastLabels } from "../feedback/feedback-labels";
54
50
  import type { FeedbackMenuLabels } from "../feedback/feedback-menu";
55
51
  import type { FeedbackPublicLabels } from "../feedback/feedback-public-labels";
56
52
  import type { FeedbackNotificationTypesLabels } from "../notifications/feedback-notification-types-labels";
@@ -893,9 +889,7 @@ function mergeOverrides(
893
889
  * `columnsCount` from `columns`): merge the component's prop over it — a record key by
894
890
  * key — and feed the result to that resolver.
895
891
  */
896
- export function useKitLabelOverrides<K extends keyof UiKitLabels>(
897
- ns: K,
898
- ): LabelOverride<UiKitLabels[K]> | undefined {
892
+ export function useKitLabelOverrides<K extends keyof UiKitLabels>(ns: K): LabelOverride<UiKitLabels[K]> | undefined {
899
893
  return useContext(KitI18nContext).labels?.[ns];
900
894
  }
901
895
 
@@ -912,10 +906,7 @@ export function useKitLabels<K extends keyof UiKitLabels>(
912
906
  prop?: LabelOverride<UiKitLabels[K]>,
913
907
  ): UiKitLabels[K] {
914
908
  const fromProvider = useKitLabelOverrides(ns);
915
- return useMemo(
916
- () => mergeNamespace(mergeNamespace(defaults, fromProvider), prop),
917
- [defaults, fromProvider, prop],
918
- );
909
+ return useMemo(() => mergeNamespace(mergeNamespace(defaults, fromProvider), prop), [defaults, fromProvider, prop]);
919
910
  }
920
911
 
921
912
  /** The component's own `locale` prop, else the provider's, else `undefined` (which
@@ -973,10 +964,7 @@ export function useKitDocumentTitle(): { format: string | undefined; appName: st
973
964
  /** {@link DEFAULT_FILE_LABELS}, but formatting in the provider's locale. */
974
965
  export function useKitFileLabels(prop?: Partial<FileLabels>): FileLabels {
975
966
  const locale = useKitLocale();
976
- const defaults = useMemo<FileLabels>(
977
- () => ({ size: (bytes) => formatFileSize(bytes, locale) }),
978
- [locale],
979
- );
967
+ const defaults = useMemo<FileLabels>(() => ({ size: (bytes) => formatFileSize(bytes, locale) }), [locale]);
980
968
  return useKitLabels("file", defaults, prop);
981
969
  }
982
970
 
@@ -992,10 +980,7 @@ export function useKitFileLabels(prop?: Partial<FileLabels>): FileLabels {
992
980
  * those components. Left out (a test file is not type-checked), it throws saying so
993
981
  * rather than "Cannot convert undefined or null to object" (keksdose, 0.18).
994
982
  */
995
- export function missingKitLabels(
996
- labels: UiKitLabelOverrides | undefined,
997
- reference: UiKitLabels,
998
- ): string[] {
983
+ export function missingKitLabels(labels: UiKitLabelOverrides | undefined, reference: UiKitLabels): string[] {
999
984
  if (!isRecord(reference)) {
1000
985
  throw new TypeError(
1001
986
  "missingKitLabels(labels, reference): pass DEFAULT_UI_KIT_LABELS as the reference — " +