@eifi1/ui-kit 0.20.1 → 0.22.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 (286) hide show
  1. package/dist/chart.d.ts +10 -8
  2. package/dist/components/account-chips.d.ts +10 -3
  3. package/dist/components/account-chips.js +5 -2
  4. package/dist/components/account-chips.js.map +1 -1
  5. package/dist/components/account-settings.d.ts +33 -2
  6. package/dist/components/account-settings.js +43 -21
  7. package/dist/components/account-settings.js.map +1 -1
  8. package/dist/components/amount-input.d.ts +27 -8
  9. package/dist/components/amount-input.js +15 -28
  10. package/dist/components/amount-input.js.map +1 -1
  11. package/dist/components/autocomplete.d.ts +8 -0
  12. package/dist/components/autocomplete.js +9 -4
  13. package/dist/components/autocomplete.js.map +1 -1
  14. package/dist/components/button-group.d.ts +10 -8
  15. package/dist/components/calculator.d.ts +10 -8
  16. package/dist/components/checkbox-group.d.ts +104 -0
  17. package/dist/components/checkbox-group.js +111 -0
  18. package/dist/components/checkbox-group.js.map +1 -0
  19. package/dist/components/checkbox.d.ts +19 -0
  20. package/dist/components/checkbox.js +30 -7
  21. package/dist/components/checkbox.js.map +1 -1
  22. package/dist/components/chip.d.ts +18 -0
  23. package/dist/components/chip.js +47 -10
  24. package/dist/components/chip.js.map +1 -1
  25. package/dist/components/combobox.d.ts +13 -2
  26. package/dist/components/combobox.js +17 -8
  27. package/dist/components/combobox.js.map +1 -1
  28. package/dist/components/confirm-dialog.d.ts +66 -161
  29. package/dist/components/copy-button.d.ts +10 -8
  30. package/dist/components/country-select.d.ts +124 -0
  31. package/dist/components/country-select.js +237 -0
  32. package/dist/components/country-select.js.map +1 -0
  33. package/dist/components/currency-select.d.ts +17 -1
  34. package/dist/components/currency-select.js +56 -23
  35. package/dist/components/currency-select.js.map +1 -1
  36. package/dist/components/danger-confirm.d.ts +66 -166
  37. package/dist/components/danger-confirm.js +133 -49
  38. package/dist/components/danger-confirm.js.map +1 -1
  39. package/dist/components/data-table-cells.d.ts +1 -2
  40. package/dist/components/data-table-filter-popover.d.ts +1 -2
  41. package/dist/components/data-table-filters.d.ts +1 -2
  42. package/dist/components/data-table-labels.d.ts +4 -97
  43. package/dist/components/data-table-labels.js +9 -1
  44. package/dist/components/data-table-labels.js.map +1 -1
  45. package/dist/components/data-table-pagination.d.ts +3 -1
  46. package/dist/components/data-table.d.ts +1 -2
  47. package/dist/components/data-table.js +98 -3
  48. package/dist/components/data-table.js.map +1 -1
  49. package/dist/components/date-picker.d.ts +25 -5
  50. package/dist/components/date-picker.js +110 -59
  51. package/dist/components/date-picker.js.map +1 -1
  52. package/dist/components/entity-combobox.d.ts +8 -1
  53. package/dist/components/entity-combobox.js +9 -4
  54. package/dist/components/entity-combobox.js.map +1 -1
  55. package/dist/components/facing-pair.d.ts +10 -8
  56. package/dist/components/field-anatomy.d.ts +95 -0
  57. package/dist/components/field-anatomy.js +84 -0
  58. package/dist/components/field-anatomy.js.map +1 -0
  59. package/dist/components/field-parts.d.ts +114 -0
  60. package/dist/components/field-parts.js +72 -0
  61. package/dist/components/field-parts.js.map +1 -0
  62. package/dist/components/file-button.d.ts +10 -8
  63. package/dist/components/file-button.js +13 -3
  64. package/dist/components/file-button.js.map +1 -1
  65. package/dist/components/file-dropzone.d.ts +32 -9
  66. package/dist/components/file-dropzone.js +57 -34
  67. package/dist/components/file-dropzone.js.map +1 -1
  68. package/dist/components/form-actions.d.ts +10 -8
  69. package/dist/components/form-actions.js +61 -3
  70. package/dist/components/form-actions.js.map +1 -1
  71. package/dist/components/hover-menu.d.ts +3 -0
  72. package/dist/components/hover-menu.js +2 -2
  73. package/dist/components/hover-menu.js.map +1 -1
  74. package/dist/components/iban-input.d.ts +66 -0
  75. package/dist/components/iban-input.js +125 -0
  76. package/dist/components/iban-input.js.map +1 -0
  77. package/dist/components/icon-picker.d.ts +12 -2
  78. package/dist/components/icon-picker.js +9 -2
  79. package/dist/components/icon-picker.js.map +1 -1
  80. package/dist/components/inline-edit-field.d.ts +167 -0
  81. package/dist/components/inline-edit-field.js +293 -0
  82. package/dist/components/inline-edit-field.js.map +1 -0
  83. package/dist/components/language-select.d.ts +127 -0
  84. package/dist/components/language-select.js +18 -0
  85. package/dist/components/language-select.js.map +1 -0
  86. package/dist/components/line-items.d.ts +25 -3
  87. package/dist/components/line-items.js +55 -46
  88. package/dist/components/line-items.js.map +1 -1
  89. package/dist/components/list.d.ts +25 -0
  90. package/dist/components/list.js +16 -5
  91. package/dist/components/list.js.map +1 -1
  92. package/dist/components/money-field.d.ts +20 -8
  93. package/dist/components/money-field.js.map +1 -1
  94. package/dist/components/month-picker.d.ts +52 -4
  95. package/dist/components/month-picker.js +290 -86
  96. package/dist/components/month-picker.js.map +1 -1
  97. package/dist/components/multi-select.d.ts +8 -1
  98. package/dist/components/multi-select.js +9 -4
  99. package/dist/components/multi-select.js.map +1 -1
  100. package/dist/components/number-field.d.ts +25 -13
  101. package/dist/components/number-field.js +6 -20
  102. package/dist/components/number-field.js.map +1 -1
  103. package/dist/components/number-input.d.ts +70 -13
  104. package/dist/components/number-input.js +90 -38
  105. package/dist/components/number-input.js.map +1 -1
  106. package/dist/components/numpad-sheet.d.ts +10 -8
  107. package/dist/components/one-time-code-input.d.ts +100 -0
  108. package/dist/components/one-time-code-input.js +137 -0
  109. package/dist/components/one-time-code-input.js.map +1 -0
  110. package/dist/components/phone-input.d.ts +66 -0
  111. package/dist/components/phone-input.js +171 -0
  112. package/dist/components/phone-input.js.map +1 -0
  113. package/dist/components/series-chart.d.ts +10 -8
  114. package/dist/components/settings-fields.d.ts +10 -8
  115. package/dist/components/share-card.d.ts +8 -6
  116. package/dist/components/sign-chip.d.ts +66 -0
  117. package/dist/components/sign-chip.js +39 -0
  118. package/dist/components/sign-chip.js.map +1 -0
  119. package/dist/components/swatch-picker.d.ts +27 -2
  120. package/dist/components/swatch-picker.js +73 -31
  121. package/dist/components/swatch-picker.js.map +1 -1
  122. package/dist/components/switch.d.ts +19 -0
  123. package/dist/components/switch.js +24 -6
  124. package/dist/components/switch.js.map +1 -1
  125. package/dist/components/text-link.d.ts +10 -8
  126. package/dist/components/tile-radio.d.ts +68 -13
  127. package/dist/components/tile-radio.js +3 -3
  128. package/dist/components/tile-radio.js.map +1 -1
  129. package/dist/components/time-input.d.ts +15 -9
  130. package/dist/components/time-input.js.map +1 -1
  131. package/dist/components/toggle-group.d.ts +47 -1
  132. package/dist/components/toggle-group.js +110 -69
  133. package/dist/components/toggle-group.js.map +1 -1
  134. package/dist/components/ui.d.ts +10 -8
  135. package/dist/components/ui.js +280 -78
  136. package/dist/components/ui.js.map +1 -1
  137. package/dist/components/use-table-state.d.ts +1 -2
  138. package/dist/{data-table-3mi2R3so.d.ts → data-table-labels-B7OdnM0S.d.ts} +140 -3
  139. package/dist/data-table.d.ts +1 -2
  140. package/dist/data-table.js +2 -1
  141. package/dist/data-table.js.map +1 -1
  142. package/dist/feedback/feedback-attachment.d.ts +1 -1
  143. package/dist/feedback/feedback-attachment.js +210 -3
  144. package/dist/feedback/feedback-attachment.js.map +1 -1
  145. package/dist/feedback/feedback-dialog.d.ts +1 -1
  146. package/dist/feedback/feedback-dialog.js.map +1 -1
  147. package/dist/feedback/feedback-inbox.d.ts +1 -1
  148. package/dist/feedback/feedback-thread.d.ts +37 -3
  149. package/dist/feedback/feedback-thread.js +38 -9
  150. package/dist/feedback/feedback-thread.js.map +1 -1
  151. package/dist/{feedback-attachment-WFiXJ8We.d.ts → feedback-attachment-NhUm7Zga.d.ts} +70 -5
  152. package/dist/feedback.d.ts +2 -2
  153. package/dist/hooks/use-file-drop.d.ts +10 -8
  154. package/dist/i18n/defaults.d.ts +10 -8
  155. package/dist/i18n/defaults.js +17 -2
  156. package/dist/i18n/defaults.js.map +1 -1
  157. package/dist/i18n/german.d.ts +10 -8
  158. package/dist/i18n/german.js +50 -5
  159. package/dist/i18n/german.js.map +1 -1
  160. package/dist/i18n/kit-labels.d.ts +10 -8
  161. package/dist/i18n/kit-labels.js +8 -2
  162. package/dist/i18n/kit-labels.js.map +1 -1
  163. package/dist/i18n/languages.d.ts +10 -8
  164. package/dist/i18n/locales/de-CH.d.ts +10 -8
  165. package/dist/i18n/locales/en.d.ts +10 -8
  166. package/dist/i18n/locales/en.js +9 -0
  167. package/dist/i18n/locales/en.js.map +1 -1
  168. package/dist/i18n/locales/es.d.ts +10 -8
  169. package/dist/i18n/locales/es.js +48 -5
  170. package/dist/i18n/locales/es.js.map +1 -1
  171. package/dist/i18n/locales/fr.d.ts +10 -8
  172. package/dist/i18n/locales/fr.js +48 -5
  173. package/dist/i18n/locales/fr.js.map +1 -1
  174. package/dist/i18n/locales/hu.d.ts +10 -8
  175. package/dist/i18n/locales/hu.js +49 -5
  176. package/dist/i18n/locales/hu.js.map +1 -1
  177. package/dist/i18n/locales/it.d.ts +10 -8
  178. package/dist/i18n/locales/it.js +49 -5
  179. package/dist/i18n/locales/it.js.map +1 -1
  180. package/dist/i18n/locales/zh.d.ts +10 -8
  181. package/dist/i18n/locales/zh.js +48 -5
  182. package/dist/i18n/locales/zh.js.map +1 -1
  183. package/dist/i18n/review.d.ts +10 -8
  184. package/dist/i18n/review.js +8 -1
  185. package/dist/i18n/review.js.map +1 -1
  186. package/dist/index.d.ts +17 -10
  187. package/dist/index.js +57 -2
  188. package/dist/index.js.map +1 -1
  189. package/dist/{kit-labels-D1J2_jyD.d.ts → kit-labels-R8mIAc9N.d.ts} +811 -8
  190. package/dist/lib/countries.d.ts +43 -0
  191. package/dist/lib/countries.js +39 -0
  192. package/dist/lib/countries.js.map +1 -0
  193. package/dist/lib/decimal-marks.d.ts +46 -0
  194. package/dist/lib/decimal-marks.js +40 -0
  195. package/dist/lib/decimal-marks.js.map +1 -0
  196. package/dist/lib/iban.d.ts +98 -0
  197. package/dist/lib/iban.js +154 -0
  198. package/dist/lib/iban.js.map +1 -0
  199. package/dist/lib/isin.d.ts +30 -0
  200. package/dist/lib/isin.js +36 -0
  201. package/dist/lib/isin.js.map +1 -0
  202. package/dist/lib/phone.d.ts +69 -0
  203. package/dist/lib/phone.js +121 -0
  204. package/dist/lib/phone.js.map +1 -0
  205. package/dist/rhf/fields.d.ts +148 -11
  206. package/dist/rhf/fields.js +332 -3
  207. package/dist/rhf/fields.js.map +1 -1
  208. package/dist/rhf/form.d.ts +10 -8
  209. package/dist/rhf.d.ts +13 -9
  210. package/dist/rhf.js.map +1 -1
  211. package/dist/shell/app-shell.d.ts +10 -8
  212. package/dist/shell/top-bar-brand.d.ts +10 -8
  213. package/dist/shell/topbar-action-menu.d.ts +13 -1
  214. package/dist/shell/topbar-action-menu.js +31 -28
  215. package/dist/shell/topbar-action-menu.js.map +1 -1
  216. package/dist/shell.d.ts +10 -8
  217. package/dist/tour/tour.js +20 -24
  218. package/dist/tour/tour.js.map +1 -1
  219. package/dist/wizard/stepper-nav.d.ts +10 -8
  220. package/dist/wizard.d.ts +10 -8
  221. package/package.json +1 -1
  222. package/src/components/account-chips.tsx +17 -3
  223. package/src/components/account-settings.tsx +92 -26
  224. package/src/components/amount-input.tsx +49 -56
  225. package/src/components/autocomplete.tsx +133 -110
  226. package/src/components/checkbox-group.tsx +229 -0
  227. package/src/components/checkbox.tsx +72 -8
  228. package/src/components/chip.tsx +80 -10
  229. package/src/components/combobox.tsx +292 -253
  230. package/src/components/country-select.tsx +443 -0
  231. package/src/components/currency-select.tsx +109 -33
  232. package/src/components/danger-confirm.tsx +345 -77
  233. package/src/components/data-table-labels.ts +16 -1
  234. package/src/components/data-table.tsx +175 -6
  235. package/src/components/date-picker.tsx +173 -62
  236. package/src/components/entity-combobox.tsx +107 -87
  237. package/src/components/field-anatomy.tsx +190 -0
  238. package/src/components/field-parts.tsx +184 -0
  239. package/src/components/file-button.tsx +36 -3
  240. package/src/components/file-dropzone.tsx +106 -38
  241. package/src/components/form-actions.tsx +115 -2
  242. package/src/components/hover-menu.tsx +7 -4
  243. package/src/components/iban-input.tsx +231 -0
  244. package/src/components/icon-picker.tsx +26 -4
  245. package/src/components/inline-edit-field.tsx +533 -0
  246. package/src/components/language-select.tsx +78 -0
  247. package/src/components/line-items.tsx +35 -2
  248. package/src/components/list.tsx +55 -6
  249. package/src/components/money-field.tsx +10 -0
  250. package/src/components/month-picker.tsx +399 -63
  251. package/src/components/multi-select.tsx +80 -58
  252. package/src/components/number-field.tsx +28 -46
  253. package/src/components/number-input.tsx +210 -43
  254. package/src/components/one-time-code-input.tsx +288 -0
  255. package/src/components/phone-input.tsx +299 -0
  256. package/src/components/sign-chip.tsx +103 -0
  257. package/src/components/swatch-picker.tsx +118 -30
  258. package/src/components/switch.tsx +58 -7
  259. package/src/components/tile-radio.tsx +71 -16
  260. package/src/components/time-input.tsx +8 -1
  261. package/src/components/toggle-group.tsx +206 -73
  262. package/src/components/ui.tsx +472 -105
  263. package/src/data-table.ts +2 -1
  264. package/src/feedback/feedback-attachment.tsx +313 -9
  265. package/src/feedback/feedback-dialog.tsx +2 -0
  266. package/src/feedback/feedback-thread.tsx +66 -5
  267. package/src/i18n/defaults.ts +16 -1
  268. package/src/i18n/german.ts +47 -0
  269. package/src/i18n/kit-labels.tsx +78 -2
  270. package/src/i18n/locales/en.ts +10 -0
  271. package/src/i18n/locales/es.ts +46 -0
  272. package/src/i18n/locales/fr.ts +45 -0
  273. package/src/i18n/locales/hu.ts +46 -0
  274. package/src/i18n/locales/it.ts +47 -0
  275. package/src/i18n/locales/zh.ts +44 -0
  276. package/src/i18n/review.ts +7 -0
  277. package/src/index.ts +53 -3
  278. package/src/lib/countries.ts +91 -0
  279. package/src/lib/decimal-marks.ts +99 -0
  280. package/src/lib/iban.ts +171 -0
  281. package/src/lib/isin.ts +62 -0
  282. package/src/lib/phone.ts +211 -0
  283. package/src/rhf/fields.tsx +606 -9
  284. package/src/rhf.ts +2 -1
  285. package/src/shell/topbar-action-menu.tsx +53 -29
  286. package/src/tour/tour.tsx +66 -28
@@ -7,7 +7,7 @@ import type { CalendarHeatmapLabels } from "../components/calendar-heatmap";
7
7
  import type { PopoverLabels } from "../components/popover";
8
8
  import type { ChipInputLabels } from "../components/chip";
9
9
  import type { FieldSyncLabels } from "../components/field-sync";
10
- import type { PasswordRevealLabels, TabsLabels } from "../components/ui";
10
+ import type { CharacterCountLabels, PasswordRevealLabels, TabsLabels } from "../components/ui";
11
11
  import type { WizardLabels } from "../wizard/types";
12
12
  import type { TourLabels } from "../tour/tour";
13
13
  import type { CommandPaletteLabels } from "../search/command-palette";
@@ -53,6 +53,11 @@ import type { ShareCardLabels } from "../components/share-card";
53
53
  import type { ReauthDialogLabels } from "../components/reauth-dialog";
54
54
  import type { ServerWakeLabels } from "../components/server-wake";
55
55
  import type { TranslationReviewLabels } from "../components/translation-review-labels";
56
+ import type { CountrySelectLabels } from "../components/country-select";
57
+ import type { InlineEditLabels } from "../components/inline-edit-field";
58
+ import type { IbanInputLabels } from "../components/iban-input";
59
+ import type { PhoneInputLabels } from "../components/phone-input";
60
+ import type { SignChipLabels } from "../components/sign-chip";
56
61
 
57
62
  /**
58
63
  * EVERY string the kit renders, as one typed tree — and an optional provider that
@@ -294,6 +299,18 @@ export interface UiKitLabels {
294
299
  translationReview: TranslationReviewLabels;
295
300
  /** 0.19.0: `LegalLinks`' navigation name — the legal pages' shell, for every app. */
296
301
  legal: LegalLabels;
302
+ /** 0.22.0: the screen-reader words of `Input` / `Textarea`'s `showCount` counter. */
303
+ characterCount: CharacterCountLabels;
304
+ /** 0.22.0: `CountrySelect`. Its list's "no results" and counts are `combobox`'s. */
305
+ countrySelect: CountrySelectLabels;
306
+ /** 0.22.0: `InlineEditField` — keksdose K9. */
307
+ inlineEdit: InlineEditLabels;
308
+ /** 0.22.0: `IbanInput`'s messages, one per problem. */
309
+ ibanInput: IbanInputLabels;
310
+ /** 0.22.0: `PhoneInput`'s country-code select. */
311
+ phoneInput: PhoneInputLabels;
312
+ /** 0.22.0: `SignChip` — the outflow / inflow toggle beside an amount. */
313
+ signChip: SignChipLabels;
297
314
  }
298
315
 
299
316
  /**
@@ -438,8 +455,40 @@ interface KitI18n {
438
455
  weekStartsOn?: WeekDay;
439
456
  linkComponent?: KitLinkComponent;
440
457
  chartTooltipPlacement?: ChartTooltipPlacement;
458
+ formatDate?: KitDateFormatter;
441
459
  }
442
460
 
461
+ /** What a {@link KitDateFormatter} is told about the date it is formatting. */
462
+ export interface KitDateFormatContext {
463
+ /**
464
+ * How much of a date the string is: `"day"` — the `iso` is `"YYYY-MM-DD"`; `"month"` —
465
+ * `"YYYY-MM"` (a `MonthPicker`); `"year"` — `"YYYY"` (`MonthPicker mode="year"`).
466
+ */
467
+ unit: "day" | "month" | "year";
468
+ /** Which kit surface asks: the trigger of a `DatePicker`, of a `DateRangePicker`
469
+ * (called once per end), of a `MonthPicker`, or a `DateMark`. */
470
+ source: "datePicker" | "dateRangePicker" | "monthPicker" | "dateMark";
471
+ /** The locale the kit would have formatted in — the component's `locale` prop, else
472
+ * the provider's — or `undefined` for the runtime's. */
473
+ locale: string | undefined;
474
+ /**
475
+ * The kit's suggestion: whether this date stands alone where the day of the week
476
+ * helps — `true` for a `DatePicker`'s trigger and a `DateMark`, `false` for the two
477
+ * ends of a range (twice the width, in a sentence-like "from – to") and for a month
478
+ * or a year. keksdose's rule, which this follows: *"A date in a COLUMN carries the
479
+ * weekday. A date in a SENTENCE does not."* (date-cell.tsx, dev#546). A formatter
480
+ * is free to ignore it.
481
+ */
482
+ weekday: boolean;
483
+ }
484
+
485
+ /**
486
+ * The app's ONE answer to "what does a date look like here" — keksdose K12. Returns the
487
+ * text for an ISO date (see {@link KitDateFormatContext.unit} for the three shapes).
488
+ * Return `""` to fall back to the kit's own formatting for that date.
489
+ */
490
+ export type KitDateFormatter = (iso: string, context: KitDateFormatContext) => string;
491
+
443
492
  /** Where a chart shows the values under the pointer — see `SeriesChartTooltip.placement`. */
444
493
  export type ChartTooltipPlacement = "cursor" | "above" | "below" | "auto";
445
494
 
@@ -506,6 +555,25 @@ export interface UiKitProviderProps {
506
555
  * pointer, as before.
507
556
  */
508
557
  chartTooltipPlacement?: ChartTooltipPlacement;
558
+ /**
559
+ * How every kit date below is written, when the component is not told otherwise —
560
+ * keksdose K12. keksdose has a date-format preference (Settings ▸ date format, feedback
561
+ * #180) that is not the UI language, and a weekday in the UI language beside digits
562
+ * in the preference's order (live #246, dev#546): two locales in one string, which
563
+ * no `locale` + `Intl` options can say. Its `DateField` wraps every `DatePicker` to
564
+ * pass `formatValue`, and its report range field formats both ends by hand; with this
565
+ * set once on the provider, those wrappers thin to nothing.
566
+ *
567
+ * Used for the trigger text of `DatePicker`, `DateRangePicker` and `MonthPicker`
568
+ * (month and year mode), and for `DateMark display="date"`. A component's own
569
+ * `formatValue` or `formatOptions` (`dateStyle` on a DateMark) wins: prop >
570
+ * provider > the kit's `Intl` default, the order every kit setting resolves in. Left
571
+ * out (or returning `""`), everything formats exactly as before.
572
+ *
573
+ * Keep it stable (`useCallback`, or a module function): it is in the provider's
574
+ * context value, so a new function every render re-renders every consumer.
575
+ */
576
+ formatDate?: KitDateFormatter;
509
577
  children: ReactNode;
510
578
  }
511
579
 
@@ -523,6 +591,7 @@ export function UiKitProvider({
523
591
  weekStartsOn,
524
592
  linkComponent,
525
593
  chartTooltipPlacement,
594
+ formatDate,
526
595
  children,
527
596
  }: UiKitProviderProps) {
528
597
  const outer = useContext(KitI18nContext);
@@ -533,8 +602,9 @@ export function UiKitProvider({
533
602
  labels: mergeOverrides(outer.labels, labels),
534
603
  linkComponent: linkComponent ?? outer.linkComponent,
535
604
  chartTooltipPlacement: chartTooltipPlacement ?? outer.chartTooltipPlacement,
605
+ formatDate: formatDate ?? outer.formatDate,
536
606
  }),
537
- [outer, labels, locale, weekStartsOn, linkComponent, chartTooltipPlacement],
607
+ [outer, labels, locale, weekStartsOn, linkComponent, chartTooltipPlacement, formatDate],
538
608
  );
539
609
  return <KitI18nContext.Provider value={value}>{children}</KitI18nContext.Provider>;
540
610
  }
@@ -627,6 +697,12 @@ export function useKitChartTooltipPlacement(): ChartTooltipPlacement | undefined
627
697
  return useContext(KitI18nContext).chartTooltipPlacement;
628
698
  }
629
699
 
700
+ /** The nearest provider's `formatDate`, or `undefined` — a component's own
701
+ * `formatValue` / `formatOptions` wins over it. See {@link KitDateFormatter}. */
702
+ export function useKitDateFormatter(): KitDateFormatter | undefined {
703
+ return useContext(KitI18nContext).formatDate;
704
+ }
705
+
630
706
  /** {@link DEFAULT_FILE_LABELS}, but formatting in the provider's locale. */
631
707
  export function useKitFileLabels(prop?: Partial<FileLabels>): FileLabels {
632
708
  const locale = useKitLocale();
@@ -120,5 +120,15 @@ export function uiKitLabelsEn(numberLocale = "en-US"): UiKitLabels {
120
120
  localeProgress: (approved, total) => `${n(approved)}/${n(total)}`,
121
121
  exportCorrections: (count) => `Export corrections (${n(count)})`,
122
122
  },
123
+ characterCount: {
124
+ ...d.characterCount,
125
+ count: (used, max) => `${n(used)} of ${n(max)} characters`,
126
+ remaining: (left) => (left === 1 ? "1 character left" : `${n(left)} characters left`),
127
+ },
128
+ ibanInput: {
129
+ ...d.ibanInput,
130
+ length: (actual, expected) =>
131
+ `An IBAN from this country has ${n(expected)} characters — this one has ${n(actual)}.`,
132
+ },
123
133
  };
124
134
  }
@@ -25,6 +25,7 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
25
25
  attachmentScreenshot: "Captura de pantalla",
26
26
  attachmentRemoveFile: (name) => `Quitar ${name}`,
27
27
  attachmentLimit: (max) => `Máximo ${n(max)} ${max === 1 ? "adjunto" : "adjuntos"}: quite uno para añadir otro.`,
28
+ attachmentUploading: "Subiendo…",
28
29
  },
29
30
  feedbackDialog: {
30
31
  title: "Enviar comentarios",
@@ -201,6 +202,10 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
201
202
  booleanTrue: "Sí",
202
203
  booleanFalse: "No",
203
204
  booleanUnset: "Sin definir",
205
+ sortBy: "Ordenar por",
206
+ sortDefault: "Orden predeterminado",
207
+ sortAscending: "Ascendente",
208
+ sortDescending: "Descendente",
204
209
  },
205
210
  miniCalendar: {
206
211
  previousMonth: "Mes anterior",
@@ -223,6 +228,10 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
223
228
  previousMonth: "Mes anterior",
224
229
  nextMonth: "Mes siguiente",
225
230
  today: "Hoy",
231
+ yearPanel: "Elegir un año",
232
+ earlierYears: "Años anteriores",
233
+ laterYears: "Años posteriores",
234
+ thisYear: "Este año",
226
235
  },
227
236
  calendarHeatmap: {
228
237
  grid: "Valores diarios",
@@ -320,6 +329,7 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
320
329
  prompt: "Esta acción no se puede deshacer.",
321
330
  password: "Contraseña",
322
331
  phrase: (phrase) => `Escriba «${phrase}» para confirmar`,
332
+ acknowledge: "He leído lo que hace esta acción y deseo continuar.",
323
333
  },
324
334
  tabs: {
325
335
  add: "Añadir pestaña",
@@ -526,6 +536,7 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
526
536
  form: {
527
537
  save: "Guardar",
528
538
  cancel: "Cancelar",
539
+ submitShortcut: (apple) => (apple ? "⌘ Intro" : "Ctrl+Intro"),
529
540
  },
530
541
  descriptionList: {
531
542
  empty: "—",
@@ -634,6 +645,41 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
634
645
  legal: {
635
646
  navLabel: "Información legal",
636
647
  },
648
+ characterCount: {
649
+ count: (used, max) => `${n(used)} de ${n(max)} ${plural(max, "carácter", "caracteres")}`,
650
+ remaining: (left) =>
651
+ left === 1 ? "Queda 1 carácter" : `Quedan ${n(left)} caracteres`,
652
+ limitReached: "Límite de caracteres alcanzado",
653
+ },
654
+ countrySelect: {
655
+ country: "País",
656
+ search: "Buscar país",
657
+ others: "Otros países",
658
+ },
659
+ inlineEdit: {
660
+ edit: (label) => `Editar ${label}`,
661
+ failed: "No se ha podido guardar el cambio.",
662
+ empty: "Vacío",
663
+ },
664
+ ibanInput: {
665
+ format: "Un IBAN empieza por un código de país de dos letras y dos dígitos de control.",
666
+ country: (code) => `«${code}» no es el código de país de un IBAN.`,
667
+ length: (actual, expected) =>
668
+ `Un IBAN de este país tiene ${n(expected)} caracteres; este tiene ${n(actual)}.`,
669
+ checksum: "Los dígitos de control no coinciden: probablemente hay un carácter mal escrito.",
670
+ qrRequired: "Este es un IBAN normal. Una factura QR requiere el QR-IBAN de la cuenta.",
671
+ qrNotAllowed:
672
+ "Este es un QR-IBAN, que solo recibe pagos de facturas QR. Introduzca el IBAN normal de la cuenta.",
673
+ },
674
+ phoneInput: {
675
+ countryCode: "Prefijo del país",
676
+ other: "Otro",
677
+ },
678
+ signChip: {
679
+ outflow: "Salida",
680
+ inflow: "Entrada",
681
+ direction: (current, next) => `Dirección: ${current} — cambiar a ${next}`,
682
+ },
637
683
  translationReview: {
638
684
  statusMissing: "Falta",
639
685
  statusUnreviewed: "Sin revisar",
@@ -25,6 +25,7 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
25
25
  attachmentScreenshot: "Capture d’écran",
26
26
  attachmentRemoveFile: (name) => `Retirer ${name}`,
27
27
  attachmentLimit: (max) => `${n(max)} ${max === 1 ? "pièce jointe" : "pièces jointes"} au maximum — retirez-en une pour en ajouter une autre.`,
28
+ attachmentUploading: "Envoi en cours…",
28
29
  },
29
30
  feedbackDialog: {
30
31
  title: "Envoyer un retour",
@@ -208,6 +209,10 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
208
209
  booleanTrue: "Oui",
209
210
  booleanFalse: "Non",
210
211
  booleanUnset: "Non défini",
212
+ sortBy: "Trier par",
213
+ sortDefault: "Ordre par défaut",
214
+ sortAscending: "Croissant",
215
+ sortDescending: "Décroissant",
211
216
  },
212
217
  miniCalendar: {
213
218
  previousMonth: "Mois précédent",
@@ -249,6 +254,10 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
249
254
  previousMonth: "Mois précédent",
250
255
  nextMonth: "Mois suivant",
251
256
  today: "Aujourd’hui",
257
+ yearPanel: "Choisir une année",
258
+ earlierYears: "Années précédentes",
259
+ laterYears: "Années suivantes",
260
+ thisYear: "Cette année",
252
261
  },
253
262
  popover: {
254
263
  panel: "Fenêtre contextuelle",
@@ -329,6 +338,7 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
329
338
  prompt: "Cette action est irréversible.",
330
339
  password: "Mot de passe",
331
340
  phrase: (phrase) => `Saisissez «\u202f${phrase}\u202f» pour confirmer`,
341
+ acknowledge: "J’ai lu ce que fait cette action et je souhaite continuer.",
332
342
  },
333
343
  tabs: {
334
344
  add: "Ajouter un onglet",
@@ -543,6 +553,7 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
543
553
  form: {
544
554
  save: "Enregistrer",
545
555
  cancel: "Annuler",
556
+ submitShortcut: (apple) => (apple ? "⌘ Entrée" : "Ctrl+Entrée"),
546
557
  },
547
558
  descriptionList: {
548
559
  empty: "—",
@@ -651,6 +662,40 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
651
662
  legal: {
652
663
  navLabel: "Informations légales",
653
664
  },
665
+ characterCount: {
666
+ count: (used, max) => `${n(used)} sur ${n(max)} ${plural(max, "caractère", "caractères")}`,
667
+ remaining: (left) => `${n(left)} ${plural(left, "caractère restant", "caractères restants")}`,
668
+ limitReached: "Limite de caractères atteinte",
669
+ },
670
+ countrySelect: {
671
+ country: "Pays",
672
+ search: "Rechercher un pays",
673
+ others: "Autres pays",
674
+ },
675
+ inlineEdit: {
676
+ edit: (label) => `Modifier ${label}`,
677
+ failed: "La modification n’a pas pu être enregistrée.",
678
+ empty: "Vide",
679
+ },
680
+ ibanInput: {
681
+ format: "Un IBAN commence par un code pays de deux lettres et deux chiffres de contrôle.",
682
+ country: (code) => `«\u202f${code}\u202f» n’est pas le code pays d’un IBAN.`,
683
+ length: (actual, expected) =>
684
+ `Un IBAN de ce pays compte ${n(expected)} caractères — celui-ci en compte ${n(actual)}.`,
685
+ checksum: "Les chiffres de contrôle ne correspondent pas — un caractère est sans doute mal saisi.",
686
+ qrRequired: "Ceci est un IBAN ordinaire. Une QR-facture exige le QR-IBAN du compte.",
687
+ qrNotAllowed:
688
+ "Ceci est un QR-IBAN, qui ne reçoit que des paiements par QR-facture. Saisissez l’IBAN ordinaire du compte.",
689
+ },
690
+ phoneInput: {
691
+ countryCode: "Indicatif du pays",
692
+ other: "Autre",
693
+ },
694
+ signChip: {
695
+ outflow: "Sortie",
696
+ inflow: "Entrée",
697
+ direction: (current, next) => `Sens\u00a0: ${current} — passer à ${next}`,
698
+ },
654
699
  translationReview: {
655
700
  statusMissing: "Manquant",
656
701
  statusUnreviewed: "Non relu",
@@ -24,6 +24,7 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
24
24
  attachmentScreenshot: "Képernyőkép",
25
25
  attachmentRemoveFile: (name) => `${name} eltávolítása`,
26
26
  attachmentLimit: (max) => `Legfeljebb ${n(max)} melléklet – egy újabbhoz távolítson el egyet.`,
27
+ attachmentUploading: "Feltöltés…",
27
28
  },
28
29
  feedbackDialog: {
29
30
  title: "Visszajelzés küldése",
@@ -201,6 +202,10 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
201
202
  booleanTrue: "Igen",
202
203
  booleanFalse: "Nem",
203
204
  booleanUnset: "Nincs megadva",
205
+ sortBy: "Rendezés alapja",
206
+ sortDefault: "Alapértelmezett sorrend",
207
+ sortAscending: "Növekvő",
208
+ sortDescending: "Csökkenő",
204
209
  },
205
210
  miniCalendar: {
206
211
  previousMonth: "Előző hónap",
@@ -221,6 +226,10 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
221
226
  previousMonth: "Előző hónap",
222
227
  nextMonth: "Következő hónap",
223
228
  today: "Ma",
229
+ yearPanel: "Év kiválasztása",
230
+ earlierYears: "Korábbi évek",
231
+ laterYears: "Későbbi évek",
232
+ thisYear: "Ez az év",
224
233
  },
225
234
  calendarHeatmap: {
226
235
  grid: "Napi értékek",
@@ -320,6 +329,7 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
320
329
  password: "Jelszó",
321
330
  // Phrase after a colon, so no article has to agree with it.
322
331
  phrase: (phrase) => `A megerősítéshez írja be: „${phrase}”`,
332
+ acknowledge: "Elolvastam, mit eredményez ez a művelet, és folytatni szeretném.",
323
333
  },
324
334
  tabs: {
325
335
  add: "Lap hozzáadása",
@@ -529,6 +539,7 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
529
539
  form: {
530
540
  save: "Mentés",
531
541
  cancel: "Mégse",
542
+ submitShortcut: (apple) => (apple ? "⌘ Enter" : "Ctrl+Enter"),
532
543
  },
533
544
  descriptionList: {
534
545
  empty: "—",
@@ -640,6 +651,41 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
640
651
  legal: {
641
652
  navLabel: "Jogi információk",
642
653
  },
654
+ characterCount: {
655
+ // A noun after a numeral stays singular: "80 karakter".
656
+ count: (used, max) => `${n(used)} / ${n(max)} karakter`,
657
+ remaining: (left) => `Még ${n(left)} karakter írható`,
658
+ limitReached: "Elérte a karakterkorlátot",
659
+ },
660
+ countrySelect: {
661
+ country: "Ország",
662
+ search: "Ország keresése",
663
+ others: "További országok",
664
+ },
665
+ inlineEdit: {
666
+ edit: (label) => `${label} szerkesztése`,
667
+ failed: "A módosítást nem sikerült menteni.",
668
+ empty: "Üres",
669
+ },
670
+ ibanInput: {
671
+ format: "Az IBAN kétbetűs országkóddal és két ellenőrző számjeggyel kezdődik.",
672
+ country: (code) => `„${code}” nem IBAN-országkód.`,
673
+ length: (actual, expected) =>
674
+ `Ebben az országban az IBAN ${n(expected)} karakterből áll, ez ${n(actual)} karakterből.`,
675
+ checksum: "Az ellenőrző számjegyek nem egyeznek – valószínűleg elgépelt egy karaktert.",
676
+ qrRequired: "Ez egy normál IBAN. QR-számlához a bankszámla QR-IBAN-ja kell.",
677
+ qrNotAllowed:
678
+ "Ez egy QR-IBAN, amelyre csak QR-számlás befizetés érkezhet. Adja meg a bankszámla normál IBAN-ját.",
679
+ },
680
+ phoneInput: {
681
+ countryCode: "Országhívó szám",
682
+ other: "Egyéb",
683
+ },
684
+ signChip: {
685
+ outflow: "Kiadás",
686
+ inflow: "Bevétel",
687
+ direction: (current, next) => `Irány: ${current} – váltás erre: ${next}`,
688
+ },
643
689
  translationReview: {
644
690
  statusMissing: "Hiányzik",
645
691
  statusUnreviewed: "Nincs ellenőrizve",
@@ -25,6 +25,7 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
25
25
  attachmentScreenshot: "Screenshot",
26
26
  attachmentRemoveFile: (name) => `Rimuovi ${name}`,
27
27
  attachmentLimit: (max) => `Massimo ${n(max)} ${max === 1 ? "allegato" : "allegati"}: ne rimuova uno per aggiungerne un altro.`,
28
+ attachmentUploading: "Caricamento…",
28
29
  },
29
30
  feedbackDialog: {
30
31
  title: "Invia feedback",
@@ -202,6 +203,10 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
202
203
  booleanTrue: "Sì",
203
204
  booleanFalse: "No",
204
205
  booleanUnset: "Non impostato",
206
+ sortBy: "Ordina per",
207
+ sortDefault: "Ordine predefinito",
208
+ sortAscending: "Crescente",
209
+ sortDescending: "Decrescente",
205
210
  },
206
211
  miniCalendar: {
207
212
  previousMonth: "Mese precedente",
@@ -224,6 +229,10 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
224
229
  previousMonth: "Mese precedente",
225
230
  nextMonth: "Mese successivo",
226
231
  today: "Oggi",
232
+ yearPanel: "Scegli un anno",
233
+ earlierYears: "Anni precedenti",
234
+ laterYears: "Anni successivi",
235
+ thisYear: "Quest’anno",
227
236
  },
228
237
  calendarHeatmap: {
229
238
  grid: "Valori giornalieri",
@@ -322,6 +331,7 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
322
331
  prompt: "Questa operazione non può essere annullata.",
323
332
  password: "Password",
324
333
  phrase: (phrase) => `Digiti «${phrase}» per confermare`,
334
+ acknowledge: "Ho letto cosa comporta questa operazione e desidero continuare.",
325
335
  },
326
336
  tabs: {
327
337
  add: "Aggiungi scheda",
@@ -529,6 +539,7 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
529
539
  form: {
530
540
  save: "Salva",
531
541
  cancel: "Annulla",
542
+ submitShortcut: (apple) => (apple ? "⌘ Invio" : "Ctrl+Invio"),
532
543
  },
533
544
  descriptionList: {
534
545
  empty: "—",
@@ -637,6 +648,42 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
637
648
  legal: {
638
649
  navLabel: "Note legali",
639
650
  },
651
+ characterCount: {
652
+ count: (used, max) => `${n(used)} di ${n(max)} ${plural(max, "carattere", "caratteri")}`,
653
+ remaining: (left) =>
654
+ left === 1 ? "Resta 1 carattere" : `Restano ${n(left)} caratteri`,
655
+ limitReached: "Limite di caratteri raggiunto",
656
+ },
657
+ countrySelect: {
658
+ country: "Paese",
659
+ search: "Cerca paese",
660
+ others: "Altri paesi",
661
+ },
662
+ inlineEdit: {
663
+ edit: (label) => `Modifica ${label}`,
664
+ failed: "Non è stato possibile salvare la modifica.",
665
+ empty: "Vuoto",
666
+ },
667
+ ibanInput: {
668
+ format: "Un IBAN inizia con un codice paese di due lettere e due cifre di controllo.",
669
+ country: (code) => `«${code}» non è il codice paese di un IBAN.`,
670
+ length: (actual, expected) =>
671
+ `Un IBAN di questo paese ha ${n(expected)} caratteri, questo ne ha ${n(actual)}.`,
672
+ checksum: "Le cifre di controllo non corrispondono: probabilmente un carattere è stato digitato male.",
673
+ qrRequired: "Questo è un IBAN normale. Una QR-fattura richiede il QR-IBAN del conto.",
674
+ qrNotAllowed:
675
+ "Questo è un QR-IBAN, che riceve solo pagamenti con QR-fattura. Inserisca l’IBAN normale del conto.",
676
+ },
677
+ phoneInput: {
678
+ countryCode: "Prefisso internazionale",
679
+ other: "Altro",
680
+ },
681
+ signChip: {
682
+ outflow: "Uscita",
683
+ inflow: "Entrata",
684
+ // "premere per…": an instruction without a tu imperative, as the kit's Italian is formal.
685
+ direction: (current, next) => `Direzione: ${current} – premere per passare a ${next}`,
686
+ },
640
687
  translationReview: {
641
688
  statusMissing: "Mancante",
642
689
  statusUnreviewed: "Non rivisto",
@@ -24,6 +24,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
24
24
  attachmentScreenshot: "截图",
25
25
  attachmentRemoveFile: (name) => `移除 ${name}`,
26
26
  attachmentLimit: (max) => `最多 ${n(max)} 个附件,请先移除一个再添加。`,
27
+ attachmentUploading: "正在上传…",
27
28
  },
28
29
  feedbackDialog: {
29
30
  title: "发送反馈",
@@ -199,6 +200,10 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
199
200
  booleanTrue: "是",
200
201
  booleanFalse: "否",
201
202
  booleanUnset: "未设置",
203
+ sortBy: "排序依据",
204
+ sortDefault: "默认顺序",
205
+ sortAscending: "升序",
206
+ sortDescending: "降序",
202
207
  },
203
208
  miniCalendar: {
204
209
  previousMonth: "上个月",
@@ -218,6 +223,10 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
218
223
  previousMonth: "上个月",
219
224
  nextMonth: "下个月",
220
225
  today: "今天",
226
+ yearPanel: "选择年份",
227
+ earlierYears: "更早的年份",
228
+ laterYears: "更晚的年份",
229
+ thisYear: "今年",
221
230
  },
222
231
  calendarHeatmap: {
223
232
  grid: "每日数值",
@@ -314,6 +323,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
314
323
  prompt: "此操作无法撤销。",
315
324
  password: "密码",
316
325
  phrase: (phrase) => `输入“${phrase}”以确认`,
326
+ acknowledge: "我已了解此操作的作用,并希望继续。",
317
327
  },
318
328
  tabs: {
319
329
  add: "添加标签页",
@@ -516,6 +526,7 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
516
526
  form: {
517
527
  save: "保存",
518
528
  cancel: "取消",
529
+ submitShortcut: (apple) => (apple ? "⌘ Enter" : "Ctrl+Enter"),
519
530
  },
520
531
  descriptionList: {
521
532
  empty: "—",
@@ -623,6 +634,39 @@ export function uiKitLabelsZh(numberLocale = "zh-CN"): UiKitLabels {
623
634
  legal: {
624
635
  navLabel: "法律信息",
625
636
  },
637
+ characterCount: {
638
+ count: (used, max) => `已输入 ${n(used)}/${n(max)} 个字符`,
639
+ remaining: (left) => `还可输入 ${n(left)} 个字符`,
640
+ limitReached: "已达到字符数上限",
641
+ },
642
+ countrySelect: {
643
+ country: "国家/地区",
644
+ search: "搜索国家/地区",
645
+ others: "其他国家/地区",
646
+ },
647
+ inlineEdit: {
648
+ edit: (label) => `编辑“${label}”`,
649
+ failed: "无法保存更改。",
650
+ empty: "空",
651
+ },
652
+ ibanInput: {
653
+ format: "IBAN 以两个字母的国家代码和两位校验码开头。",
654
+ country: (code) => `“${code}”不是 IBAN 的国家代码。`,
655
+ length: (actual, expected) =>
656
+ `该国家的 IBAN 应为 ${n(expected)} 个字符,当前为 ${n(actual)} 个。`,
657
+ checksum: "校验码不匹配,可能有字符输入错误。",
658
+ qrRequired: "这是普通 IBAN。QR 账单需要该账户的 QR-IBAN。",
659
+ qrNotAllowed: "这是 QR-IBAN,只能接收 QR 账单付款。请输入该账户的普通 IBAN。",
660
+ },
661
+ phoneInput: {
662
+ countryCode: "国家/地区代码",
663
+ other: "其他",
664
+ },
665
+ signChip: {
666
+ outflow: "支出",
667
+ inflow: "收入",
668
+ direction: (current, next) => `方向:${current},切换为${next}`,
669
+ },
626
670
  translationReview: {
627
671
  statusMissing: "缺失",
628
672
  statusUnreviewed: "未审校",
@@ -157,6 +157,7 @@ export const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unkno
157
157
  "confirmDialog.typed": [["{{text}}"]],
158
158
  "floatingPanel.badge": one,
159
159
  "bulkActionBar.selected": one,
160
+ "form.submitShortcut": [[true], [false]],
160
161
  "lineItems.remove": [[3]],
161
162
  "lineItems.confirmRemove": [[3]],
162
163
  "lineItems.row": [[3]],
@@ -190,4 +191,10 @@ export const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unkno
190
191
  "translationReview.lastFlagged": [["{{name}}", "{{date}}"]],
191
192
  "translationReview.scope": [["{{areas}}"]],
192
193
  "translationReview.exportCorrections": [[0], [1], [3]],
194
+ "characterCount.count": [[12, 80]],
195
+ "characterCount.remaining": one,
196
+ "inlineEdit.edit": [["{{label}}"]],
197
+ "ibanInput.country": [["{{code}}"]],
198
+ "ibanInput.length": [[20, 21]],
199
+ "signChip.direction": [["{{current}}", "{{next}}"]],
193
200
  };