@microbit/ui 0.1.0-alpha.9 → 0.1.1

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 (113) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +171 -20
  3. package/lang/ui.ar.json +62 -0
  4. package/lang/ui.ca.json +43 -3
  5. package/lang/ui.cy.json +62 -0
  6. package/lang/ui.de.json +44 -4
  7. package/lang/ui.en-us.json +40 -0
  8. package/lang/ui.en.json +40 -0
  9. package/lang/ui.es-es.json +43 -3
  10. package/lang/ui.fr.json +44 -4
  11. package/lang/ui.ga-ie.json +43 -3
  12. package/lang/ui.it.json +62 -0
  13. package/lang/ui.ja.json +44 -4
  14. package/lang/ui.ko.json +44 -4
  15. package/lang/ui.lo.json +62 -0
  16. package/lang/ui.lol.json +40 -0
  17. package/lang/ui.nl.json +44 -4
  18. package/lang/ui.pl.json +44 -4
  19. package/lang/ui.pt-br.json +44 -4
  20. package/lang/ui.vi.json +62 -0
  21. package/lang/ui.zh-cn.json +44 -4
  22. package/lang/ui.zh-tw.json +44 -4
  23. package/package.json +13 -11
  24. package/src/Avatar.recipe.ts +191 -0
  25. package/src/Avatar.tsx +278 -0
  26. package/src/Breadcrumb.recipe.ts +45 -0
  27. package/src/Breadcrumb.tsx +114 -0
  28. package/src/Button.recipe.ts +88 -50
  29. package/src/Button.tsx +67 -14
  30. package/src/ButtonGroup.tsx +37 -15
  31. package/src/Card.recipe.ts +1 -2
  32. package/src/Card.tsx +2 -1
  33. package/src/Checkbox.recipe.ts +13 -12
  34. package/src/Checkbox.tsx +103 -34
  35. package/src/CheckboxGroup.tsx +70 -0
  36. package/src/CloseButton.tsx +3 -3
  37. package/src/CloseIcon.tsx +6 -4
  38. package/src/Code.tsx +1 -1
  39. package/src/Collapse.tsx +13 -14
  40. package/src/ComboBox.tsx +246 -0
  41. package/src/Divider.tsx +40 -7
  42. package/src/Drawer.recipe.ts +21 -10
  43. package/src/Drawer.tsx +3 -4
  44. package/src/ExternalLink.tsx +43 -0
  45. package/src/Fade.tsx +18 -4
  46. package/src/Field.recipe.ts +114 -0
  47. package/src/Field.tsx +187 -0
  48. package/src/GridList.recipe.ts +57 -0
  49. package/src/GridList.tsx +81 -0
  50. package/src/Heading.recipe.ts +20 -1
  51. package/src/Heading.tsx +3 -3
  52. package/src/Icon.tsx +23 -7
  53. package/src/IconButton.tsx +8 -18
  54. package/src/Image.tsx +1 -1
  55. package/src/Input.recipe.ts +30 -26
  56. package/src/Input.tsx +16 -7
  57. package/src/InputGroup.tsx +9 -9
  58. package/src/Kbd.tsx +1 -1
  59. package/src/Link.tsx +3 -3
  60. package/src/LinkBox.tsx +2 -3
  61. package/src/LinkButton.tsx +14 -13
  62. package/src/List.tsx +5 -7
  63. package/src/ListBox.recipe.ts +43 -0
  64. package/src/ListBox.tsx +88 -0
  65. package/src/Menu.recipe.ts +22 -19
  66. package/src/Menu.tsx +54 -28
  67. package/src/Modal.recipe.ts +17 -9
  68. package/src/Modal.tsx +123 -24
  69. package/src/MoreMenuButton.tsx +63 -0
  70. package/src/NativeSelect.tsx +37 -14
  71. package/src/NativeSelectField.tsx +84 -0
  72. package/src/NumberField.recipe.ts +56 -15
  73. package/src/NumberField.tsx +74 -22
  74. package/src/PopoverArrow.tsx +1 -2
  75. package/src/ProgressBar.tsx +3 -5
  76. package/src/Radio.recipe.ts +13 -12
  77. package/src/Radio.tsx +2 -29
  78. package/src/RadioGroup.tsx +68 -0
  79. package/src/Select.recipe.ts +211 -0
  80. package/src/Select.tsx +194 -0
  81. package/src/SharedUIProvider.tsx +63 -7
  82. package/src/Skeleton.tsx +146 -0
  83. package/src/Slide.tsx +2 -2
  84. package/src/Slider.recipe.ts +27 -16
  85. package/src/Slider.tsx +20 -12
  86. package/src/Spinner.tsx +11 -9
  87. package/src/Svg.tsx +2 -3
  88. package/src/Switch.recipe.ts +40 -21
  89. package/src/Switch.tsx +35 -5
  90. package/src/Text.recipe.ts +26 -0
  91. package/src/Text.tsx +6 -2
  92. package/src/TextField.tsx +35 -38
  93. package/src/Toast.recipe.ts +52 -15
  94. package/src/Toast.tsx +147 -48
  95. package/src/Tooltip.recipe.ts +32 -0
  96. package/src/Tooltip.tsx +68 -28
  97. package/src/TooltipButton.tsx +229 -0
  98. package/src/UnmountCallback.tsx +2 -2
  99. package/src/VisuallyHidden.tsx +1 -1
  100. package/src/base-preset.ts +323 -84
  101. package/src/base-tokens.ts +0 -3
  102. package/src/button-icon.ts +4 -5
  103. package/src/data-attrs.ts +16 -0
  104. package/src/dense-preset.ts +107 -0
  105. package/src/hooks/useBreakpointValue.ts +4 -4
  106. package/src/hooks/useClipboard.ts +5 -6
  107. package/src/hooks/useDisclosure.ts +31 -0
  108. package/src/hooks/useMediaQuery.ts +3 -4
  109. package/src/hooks/usePrevious.ts +1 -4
  110. package/src/index.ts +19 -3
  111. package/src/rac-locale.ts +33 -0
  112. package/src/system.ts +22 -1
  113. package/src/TextField.recipe.ts +0 -54
package/LICENSE.md CHANGED
@@ -51,3 +51,11 @@ Chakra UI is used under the MIT License:
51
51
  > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
52
52
  > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
53
53
  > SOFTWARE.
54
+
55
+ This package's `lang/ui.<locale>.json` catalogs include translations of a few
56
+ user-interface strings copied from
57
+ [React Spectrum](https://github.com/adobe/react-spectrum) — from react-aria at
58
+ tag `react-aria-components@1.19.0`, and from the Spectrum 2 InlineAlert
59
+ component's catalogs (see the README's "Strings" section for which). React
60
+ Spectrum is copyright Adobe and its contributors, and is used under the Apache
61
+ License, Version 2.0: <https://www.apache.org/licenses/LICENSE-2.0>.
package/README.md CHANGED
@@ -13,14 +13,15 @@ PostCSS plugin for the CSS).
13
13
 
14
14
  ## App-side installation
15
15
 
16
- This package's own Storybook (`.storybook/` + `panda.config.ts`) is a
17
- worked example of the setup below, minus the app/brand presets. Everything
18
- an app must do:
16
+ The repo's Storybook harness (`apps/storybook`) is a worked example of the
17
+ setup below, minus the app/brand presets. Everything an app must do:
19
18
 
20
19
  1. **Panda preset stack** (`panda.config.ts`): `@pandacss/preset-base`, then
21
20
  the **base preset** (`@microbit/ui/base-preset` — the complete micro:bit
22
- design system), then optionally the app's own preset, then optionally a
23
- **private brand preset** (Foundation colours, licensed fonts).
21
+ design system), then optionally `@microbit/ui/dense-preset` (the × 0.88
22
+ spacing / × 0.9 font-size density the information-dense apps use), then
23
+ optionally the app's own preset, then optionally a **private brand
24
+ preset** (Foundation colours, licensed fonts).
24
25
 
25
26
  Later presets override earlier ones token-by-token — the base recipes and
26
27
  semantic tokens reference the brand tokens, which is how a brand swap
@@ -40,7 +41,7 @@ an app must do:
40
41
  3. **Resolve `styled-system/*` onto the generated output** for all
41
42
  importers, this package's source included — a `styled-system` alias in
42
43
  both `tsconfig.json` `paths` and the bundler config (see the
43
- `viteFinal` in `.storybook/main.ts`).
44
+ `viteFinal` in `apps/storybook`'s `.storybook/main.ts`).
44
45
  4. **Generate and load the CSS** with Panda's PostCSS plugin. Keep Vite's
45
46
  default transformer — do **not** set `css.transformer: "lightningcss"`,
46
47
  which disables PostCSS. Add a `postcss.config.cjs`:
@@ -62,16 +63,17 @@ an app must do:
62
63
  @import "@microbit/ui/reset.css" layer(reset);
63
64
  ```
64
65
 
65
- The `reset.css` import is **required**: it carries the Chakra-parity
66
+ The `reset.css` import is **required**: it carries the
66
67
  `* { border-color; word-wrap }` defaults, which must sit in the bottom
67
68
  layer (the legacy-Safari cascade-layer flattening specificity-boosts
68
69
  higher layers above CSS it can't see — runtime-injected styles, other
69
- files; playbook gotcha #28). Without it, elements that set a border
70
+ files). Without it, elements that set a border
70
71
  width but no colour render `currentColor` borders.
71
72
  The `vendor` layer is for third-party stylesheets: import any vendor CSS
72
73
  with `@import "..." layer(vendor)` so it beats the preflight reset but
73
- loses to app styling. See `.storybook/{layers.css,preview.tsx,main.ts}` +
74
- `postcss.config.cjs` for the worked example.
74
+ loses to app styling. See `apps/storybook`'s
75
+ `.storybook/{layers.css,preview.tsx,main.ts}` + `postcss.config.cjs` for
76
+ the worked example.
75
77
 
76
78
  5. **react-intl**: an `IntlProvider` above any shared-ui usage. English
77
79
  works with no setup (components carry inline `defaultMessage`); for
@@ -82,10 +84,50 @@ node_modules/@microbit/ui/lang/ui.fr.json --ast --out-file ...` (multiple
82
84
  input files merge; ids are `ui.`-namespaced so they can't collide). This
83
85
  keeps the strings in the app's lazily loaded locale chunks rather than
84
86
  an eagerly bundled catalog-of-all-locales.
85
- 6. **`ToastProvider`** once near the root, inside the `IntlProvider`.
86
- 7. Optionally **`SharedUIProvider`** with an overlay-close registrar so the
87
- app can dismiss open menus from outside the tree (e.g. the Android
88
- hardware back button). Apps without one can omit the provider.
87
+
88
+ The `locale` you pass must be the language the app actually renders in,
89
+ which is not always the user's language setting: apps that list languages
90
+ only an embedded product (e.g. MakeCode) is translated into fall back to
91
+ their English catalog for those, and should then pass `en`, keeping the
92
+ chosen language in their own settings for the embed. Everything downstream
93
+ reads this locale as a statement about the rendered page — `<html lang>`
94
+ and `<html dir>` via `SharedUIProvider`, react-aria's text direction and
95
+ built-in strings, `Intl` number/date formatting and plural rules. A catalog
96
+ that loads but has per-message gaps (an incomplete translation) is still
97
+ that language; only a wholesale fallback to the English catalog should
98
+ claim `en`.
99
+
100
+ 6. **`SharedUIProvider`** inside the `IntlProvider`, wrapping the app. It
101
+ passes the locale on to react-aria, which translates its own built-in
102
+ strings (see [Strings](#strings)); without it those follow the browser
103
+ rather than the app's language setting. It also keeps `<html lang>` and
104
+ `<html dir>` in step with the locale, so assistive tech announces the page
105
+ in the app's language and an RTL language lays out the right way round —
106
+ pass `setDocumentLang={false}` where the app doesn't own the document it's
107
+ mounted in (an embedded widget). Also takes an optional overlay-close
108
+ registrar, so the app can dismiss open menus from outside the tree (e.g.
109
+ the Android hardware back button).
110
+
111
+ An app that passes `setDocumentLang={false}` **must set `dir` itself**,
112
+ on whatever element it mounts into, if it offers an RTL language. The two
113
+ halves of mirroring read the direction from different places: react-aria
114
+ takes it from the provider locale in JS and mirrors regardless of the DOM,
115
+ while logical properties and Panda's `_rtl` rules match on `dir`. With one
116
+ side mirrored and the other not, components that combine both come apart —
117
+ `Slider`'s thumb moves to the mirrored end while its filled track stays.
118
+
119
+ 7. **`ToastProvider`** once near the root, inside the two providers above.
120
+
121
+ ## Upgrading in an app
122
+
123
+ After bumping the `@microbit/ui` version:
124
+
125
+ 1. `npm install` — the apps' postinstall runs `panda codegen`, but incremental
126
+ codegen does not detect external preset changes, so regenerate clean:
127
+ `rm -rf styled-system && npm run panda`.
128
+ 2. `npm run i18n:compile` — recompiles the app's per-locale catalogs so new
129
+ and retranslated `ui.*` strings ship (otherwise they fall back to English,
130
+ or stay missing).
89
131
 
90
132
  ## Legacy browser support (Safari < 15) — temporary
91
133
 
@@ -145,6 +187,18 @@ To drop it all: raise `BUILD_TARGETS`/`browserslist` past the affected
145
187
  browsers, then remove the two PostCSS plugins (and this package's
146
188
  `postcss-legacy-safari` export).
147
189
 
190
+ RTL is fine at this floor, with one thing to know. Panda's `_rtl` condition
191
+ emits `:where([dir=rtl], :dir(rtl))`, and `:dir()` is Safari 16.4. At the
192
+ pinned targets lightningcss rewrites that arm into a `:lang()` list, leaving
193
+ the `[dir=rtl]` arm — which is the one `SharedUIProvider` sets — intact. So
194
+ the legacy build matches on `dir` as intended, and additionally on
195
+ `lang="ar"` and friends, which modern builds don't. Everything else the
196
+ mirroring uses (logical longhands, `text-align: start`, custom properties in
197
+ `calc()`) passes through untouched; only logical _shorthands_ need the shim,
198
+ as before. `:where()` contributes no specificity, so the RTL rules win on
199
+ source order — de-layering preserves it, since it pads later layers rather
200
+ than reordering within one.
201
+
148
202
  ## The CSS-variable contract
149
203
 
150
204
  Panda emits every token as a CSS custom property with its default naming —
@@ -162,16 +216,59 @@ keep them stable:
162
216
  - Brand/app presets may change token _values_, never token _names_.
163
217
 
164
218
  Semantic tokens (`languageText`, `statusBarBg`, `danger.*`, `toast*Bg`,
165
- `controlCheckedBg`, `focusBorder`, …) are the extension points brand presets
166
- override; they resolve through var indirection, so overrides apply wherever
167
- the token is consumed.
219
+ `button.*`, `controlCheckedBg`, `focusBorder`, …) are the extension points
220
+ brand presets override; they resolve through var indirection, so overrides
221
+ apply wherever the token is consumed.
222
+
223
+ `focusRing` and `focusBorder` need more care: their values are condition
224
+ objects and a merge replaces a value wholesale, so the flat form drops the
225
+ on-dark flip below. Keep the shape:
226
+
227
+ ```ts
228
+ focusBorder: { value: { base: "{colors.brand.700}", _onDark: "{colors.white}" } };
229
+ ```
230
+
231
+ ## Dark surfaces
232
+
233
+ Focus indicators are surface-aware through one tag. The default focus ring
234
+ is ink; on a dark surface it must be white, so tag the surface element by
235
+ spreading the exported constant:
236
+
237
+ ```tsx
238
+ import { darkSurface } from "@microbit/ui";
239
+
240
+ <header {...darkSurface}>…</header>; // a black toolbar, a coloured sidebar bar
241
+ ```
242
+
243
+ Custom properties inherit, so tagging the bar covers the bar itself and
244
+ every control inside it — including ones added later. If the tagged element
245
+ is focusable, tag one level in instead: its own ring is drawn _outside_ it,
246
+ on whatever is behind it. (The Toast does this — the card is dark and
247
+ focusable, so the tag sits on its close button.) Portalled overlays (a
248
+ modal opened from a dark toolbar) escape the tag with the DOM, which is
249
+ correct. Under the hood it is `data-surface="dark"`, which the preset's
250
+ `onDark` condition scopes the `focusRing`/`focusBorder` token flips to.
251
+
252
+ Two rules:
253
+
254
+ - **Dark surfaces must tag** — the ink ring is near-invisible on them, and
255
+ there is no automatic detection.
256
+ - **Tag surfaces, not themes**: "dark" describes the surface's own
257
+ luminance, so tag surfaces that are dark by design (a black toolbar, a
258
+ coloured sidebar bar) rather than anything relative to the app's overall
259
+ look. This is what will let the tag survive a dark mode if we ship one:
260
+ designed-dark surfaces stay dark and keep their tags; everything else
261
+ stays untagged, and a dark mode would flip the untagged defaults via
262
+ token conditions, never via markup.
263
+
264
+ Rule of thumb for coloured bars: tag when the surface lacks 3:1 contrast
265
+ against ink — roughly, darker than the grey ramp's 500.
168
266
 
169
267
  ## Runtime token lookups
170
268
 
171
269
  For values that feed _computation_ rather than stylesheets (canvas painting,
172
- colour math, inline `style` for data-driven values see gotcha #9 in the
173
- repo's [migration playbook](../../docs/migration-playbook.md)), import the
174
- runtime lookup:
270
+ colour math, inline `style` for data-driven values that Panda's static
271
+ extraction can't see), import the runtime lookup:
175
272
 
176
273
  ```ts
177
274
  import { token } from "@microbit/ui"; // re-exports styled-system/tokens
@@ -205,6 +302,60 @@ Crowdin ZIP>` (config-driven over packages in
205
302
  `bin/update-translations.cjs`), after which you run `npm run i18n:tidy`
206
303
  from the root.
207
304
 
305
+ `bin/i18n-packages.cjs` lists every locale a consuming app ships, so a string
306
+ translated for one app is in place for the next. `i18n:tidy` backfills anything
307
+ missing from English, so an untranslated string renders English rather than
308
+ blank.
309
+
310
+ Until this package's Crowdin project is wired up, the non-English catalogs are
311
+ pre-Crowdin seeds — some strings AI-drafted, all of them for Crowdin to review
312
+ — credited as follows. Translations of the same strings elsewhere in the
313
+ micro:bit translation programme: ml-trainer, python-editor-v3 and classroom,
314
+ and MakeCode's editor strings, which are not in the pxt repo but can be fetched
315
+ per locale from
316
+ `https://makecode.microbit.org/api/translations?lang=<locale>&filename=strings.json&approved=true`.
317
+ The `ui.toast-status-*` words come from Spectrum 2's InlineAlert catalogs
318
+ (`@react-spectrum/s2/intl/*.json`, keys `inlinealert.informative` / `notice` /
319
+ `negative` / `positive`), under the same licence and notice as the react-aria
320
+ seed below.
321
+
322
+ ### react-aria's own strings
323
+
324
+ Separately from all of the above, react-aria has built-in strings of its own
325
+ and translates them from catalogs it bundles, nothing to do with react-intl.
326
+ `SharedUIProvider` hands it the app's locale so the two agree. It bundles 34
327
+ locales; of ours, ca, cy, ga-IE, lo and vi (and the `lol` pseudo-locale) are not
328
+ among them and fall back to English, and there is no supported way to teach it
329
+ more (the rest resolve, including where our id is less specific than
330
+ react-aria's — `fr` finds its fr-FR).
331
+
332
+ Where react-aria lets a prop replace one of those strings, the component
333
+ passes our own react-intl message instead, so the string rides `lang/` and
334
+ Crowdin like everything else and the missing locales can catch up:
335
+
336
+ - `ui.numberfield-increase` / `ui.numberfield-decrease` — NumberField's
337
+ stepper button labels
338
+ - `ui.toast-region` — the toast region's landmark label (counts the visible
339
+ toasts, as react-aria's does)
340
+ - `ui.combobox-trigger` / `ui.combobox-listbox` — the button that opens a
341
+ ComboBox and its popup list
342
+ - `ui.select-placeholder` — Select's placeholder when the caller passes none
343
+ - `ui.select-row-action` — the name of a `slot="selection"` checkbox in a
344
+ GridList row, read together with the row's content. (A future Table's
345
+ select-all header checkbox shares the slot name and will need its own
346
+ message.)
347
+
348
+ Their non-English translations were pre-seeded from react-aria's own catalogs
349
+ ([adobe/react-spectrum](https://github.com/adobe/react-spectrum) at tag
350
+ `react-aria-components@1.19.0`, Apache 2.0 — see the notice in
351
+ [LICENSE.md](LICENSE.md)) for the locales both sides cover; the five above had
352
+ no such source. That provenance is recorded here rather than in `lang/` because
353
+ Crowdin roundtrips rewrite those files.
354
+
355
+ What react-aria does not expose as a prop — live announcements ("2 items
356
+ selected"), its hidden dismiss buttons — still comes from its bundled catalogs
357
+ and falls back to English in the locales above.
358
+
208
359
  ## Chakra UI heritage and license
209
360
 
210
361
  This package's design language began as a faithful port of
@@ -0,0 +1,62 @@
1
+ {
2
+ "ui.breadcrumb": {
3
+ "defaultMessage": "مسار التنقل",
4
+ "description": "Accessible label for the breadcrumb navigation trail (the WAI-ARIA APG's conventional name)"
5
+ },
6
+ "ui.close-action": {
7
+ "defaultMessage": "إغلاق",
8
+ "description": "Close button text or label"
9
+ },
10
+ "ui.combobox-listbox": {
11
+ "defaultMessage": "مقترحات",
12
+ "description": "Accessible label for a ComboBox's dropdown list of suggestions"
13
+ },
14
+ "ui.combobox-trigger": {
15
+ "defaultMessage": "عرض المقترحات",
16
+ "description": "Accessible label for the button that opens a ComboBox's suggestions dropdown"
17
+ },
18
+ "ui.loading": {
19
+ "defaultMessage": "جاري التحميل",
20
+ "description": "Announced by screen readers for a button showing a loading spinner"
21
+ },
22
+ "ui.new-tab-notice": {
23
+ "defaultMessage": "يفتح في علامة تبويب جديدة",
24
+ "description": "Visually hidden suffix on links that open a new tab, announced by screen readers"
25
+ },
26
+ "ui.numberfield-decrease": {
27
+ "defaultMessage": "خفض {fieldLabel}",
28
+ "description": "Accessible label for a number field's decrement stepper; fieldLabel is the field's label and may be empty"
29
+ },
30
+ "ui.numberfield-increase": {
31
+ "defaultMessage": "زيادة {fieldLabel}",
32
+ "description": "Accessible label for a number field's increment stepper; fieldLabel is the field's label and may be empty"
33
+ },
34
+ "ui.select-placeholder": {
35
+ "defaultMessage": "حدد عنصرًا",
36
+ "description": "Shown in a Select's trigger while nothing is chosen and the app supplies no placeholder"
37
+ },
38
+ "ui.select-row-action": {
39
+ "defaultMessage": "تحديد",
40
+ "description": "Accessible label for a row-selection checkbox in a list or table; screen readers read it together with the row's content"
41
+ },
42
+ "ui.toast-region": {
43
+ "defaultMessage": "{count, plural, zero {لا إشعارات} one {إشعار واحد} two {إشعاران} few {# إشعارات} many {# إشعارًا} other {# إشعار}}.",
44
+ "description": "Accessible label for the notifications area; count is the number of notifications showing"
45
+ },
46
+ "ui.toast-status-error": {
47
+ "defaultMessage": "خطأ",
48
+ "description": "Announced by screen readers before an error notification"
49
+ },
50
+ "ui.toast-status-info": {
51
+ "defaultMessage": "معلومات",
52
+ "description": "Announced by screen readers before an informational notification"
53
+ },
54
+ "ui.toast-status-success": {
55
+ "defaultMessage": "تم بنجاح",
56
+ "description": "Announced by screen readers before a success notification"
57
+ },
58
+ "ui.toast-status-warning": {
59
+ "defaultMessage": "تحذير",
60
+ "description": "Announced by screen readers before a warning notification"
61
+ }
62
+ }
package/lang/ui.ca.json CHANGED
@@ -1,22 +1,62 @@
1
1
  {
2
+ "ui.breadcrumb": {
3
+ "defaultMessage": "Rastres de navegació",
4
+ "description": "Accessible label for the breadcrumb navigation trail (the WAI-ARIA APG's conventional name)"
5
+ },
2
6
  "ui.close-action": {
3
7
  "defaultMessage": "Tanca ",
4
8
  "description": "Close button text or label"
5
9
  },
10
+ "ui.combobox-listbox": {
11
+ "defaultMessage": "Suggeriments",
12
+ "description": "Accessible label for a ComboBox's dropdown list of suggestions"
13
+ },
14
+ "ui.combobox-trigger": {
15
+ "defaultMessage": "Mostra els suggeriments",
16
+ "description": "Accessible label for the button that opens a ComboBox's suggestions dropdown"
17
+ },
18
+ "ui.loading": {
19
+ "defaultMessage": "S'està carregant",
20
+ "description": "Announced by screen readers for a button showing a loading spinner"
21
+ },
22
+ "ui.new-tab-notice": {
23
+ "defaultMessage": "opens in a new tab",
24
+ "description": "Visually hidden suffix on links that open a new tab, announced by screen readers"
25
+ },
26
+ "ui.numberfield-decrease": {
27
+ "defaultMessage": "Decrementa {fieldLabel}",
28
+ "description": "Accessible label for a number field's decrement stepper; fieldLabel is the field's label and may be empty"
29
+ },
30
+ "ui.numberfield-increase": {
31
+ "defaultMessage": "Incrementa {fieldLabel}",
32
+ "description": "Accessible label for a number field's increment stepper; fieldLabel is the field's label and may be empty"
33
+ },
34
+ "ui.select-placeholder": {
35
+ "defaultMessage": "Selecciona un element",
36
+ "description": "Shown in a Select's trigger while nothing is chosen and the app supplies no placeholder"
37
+ },
38
+ "ui.select-row-action": {
39
+ "defaultMessage": "Selecciona",
40
+ "description": "Accessible label for a row-selection checkbox in a list or table; screen readers read it together with the row's content"
41
+ },
42
+ "ui.toast-region": {
43
+ "defaultMessage": "{count, plural, one {# notificació} other {# notificacions}}.",
44
+ "description": "Accessible label for the notifications area; count is the number of notifications showing"
45
+ },
6
46
  "ui.toast-status-error": {
7
47
  "defaultMessage": "Error",
8
48
  "description": "Announced by screen readers before an error notification"
9
49
  },
10
50
  "ui.toast-status-info": {
11
- "defaultMessage": "Information",
51
+ "defaultMessage": "Informació",
12
52
  "description": "Announced by screen readers before an informational notification"
13
53
  },
14
54
  "ui.toast-status-success": {
15
- "defaultMessage": "Success",
55
+ "defaultMessage": "Completat amb èxit",
16
56
  "description": "Announced by screen readers before a success notification"
17
57
  },
18
58
  "ui.toast-status-warning": {
19
- "defaultMessage": "Warning",
59
+ "defaultMessage": "Advertència",
20
60
  "description": "Announced by screen readers before a warning notification"
21
61
  }
22
62
  }
@@ -0,0 +1,62 @@
1
+ {
2
+ "ui.breadcrumb": {
3
+ "defaultMessage": "Briwsionyn Bara",
4
+ "description": "Accessible label for the breadcrumb navigation trail (the WAI-ARIA APG's conventional name)"
5
+ },
6
+ "ui.close-action": {
7
+ "defaultMessage": "Cau",
8
+ "description": "Close button text or label"
9
+ },
10
+ "ui.combobox-listbox": {
11
+ "defaultMessage": "Suggestions",
12
+ "description": "Accessible label for a ComboBox's dropdown list of suggestions"
13
+ },
14
+ "ui.combobox-trigger": {
15
+ "defaultMessage": "Show suggestions",
16
+ "description": "Accessible label for the button that opens a ComboBox's suggestions dropdown"
17
+ },
18
+ "ui.loading": {
19
+ "defaultMessage": "Wrthi'n Llwytho",
20
+ "description": "Announced by screen readers for a button showing a loading spinner"
21
+ },
22
+ "ui.new-tab-notice": {
23
+ "defaultMessage": "opens in a new tab",
24
+ "description": "Visually hidden suffix on links that open a new tab, announced by screen readers"
25
+ },
26
+ "ui.numberfield-decrease": {
27
+ "defaultMessage": "Decrease {fieldLabel}",
28
+ "description": "Accessible label for a number field's decrement stepper; fieldLabel is the field's label and may be empty"
29
+ },
30
+ "ui.numberfield-increase": {
31
+ "defaultMessage": "Increase {fieldLabel}",
32
+ "description": "Accessible label for a number field's increment stepper; fieldLabel is the field's label and may be empty"
33
+ },
34
+ "ui.select-placeholder": {
35
+ "defaultMessage": "Select an item",
36
+ "description": "Shown in a Select's trigger while nothing is chosen and the app supplies no placeholder"
37
+ },
38
+ "ui.select-row-action": {
39
+ "defaultMessage": "Dewis",
40
+ "description": "Accessible label for a row-selection checkbox in a list or table; screen readers read it together with the row's content"
41
+ },
42
+ "ui.toast-region": {
43
+ "defaultMessage": "{count, plural, one {# notification} other {# notifications}}.",
44
+ "description": "Accessible label for the notifications area; count is the number of notifications showing"
45
+ },
46
+ "ui.toast-status-error": {
47
+ "defaultMessage": "Gwall",
48
+ "description": "Announced by screen readers before an error notification"
49
+ },
50
+ "ui.toast-status-info": {
51
+ "defaultMessage": "Information",
52
+ "description": "Announced by screen readers before an informational notification"
53
+ },
54
+ "ui.toast-status-success": {
55
+ "defaultMessage": "Llwyddiant",
56
+ "description": "Announced by screen readers before a success notification"
57
+ },
58
+ "ui.toast-status-warning": {
59
+ "defaultMessage": "Rhybudd",
60
+ "description": "Announced by screen readers before a warning notification"
61
+ }
62
+ }
package/lang/ui.de.json CHANGED
@@ -1,22 +1,62 @@
1
1
  {
2
+ "ui.breadcrumb": {
3
+ "defaultMessage": "Navigationspfad",
4
+ "description": "Accessible label for the breadcrumb navigation trail (the WAI-ARIA APG's conventional name)"
5
+ },
2
6
  "ui.close-action": {
3
7
  "defaultMessage": "Schließen",
4
8
  "description": "Close button text or label"
5
9
  },
10
+ "ui.combobox-listbox": {
11
+ "defaultMessage": "Empfehlungen",
12
+ "description": "Accessible label for a ComboBox's dropdown list of suggestions"
13
+ },
14
+ "ui.combobox-trigger": {
15
+ "defaultMessage": "Empfehlungen anzeigen",
16
+ "description": "Accessible label for the button that opens a ComboBox's suggestions dropdown"
17
+ },
18
+ "ui.loading": {
19
+ "defaultMessage": "Laden",
20
+ "description": "Announced by screen readers for a button showing a loading spinner"
21
+ },
22
+ "ui.new-tab-notice": {
23
+ "defaultMessage": "opens in a new tab",
24
+ "description": "Visually hidden suffix on links that open a new tab, announced by screen readers"
25
+ },
26
+ "ui.numberfield-decrease": {
27
+ "defaultMessage": "{fieldLabel} verringern",
28
+ "description": "Accessible label for a number field's decrement stepper; fieldLabel is the field's label and may be empty"
29
+ },
30
+ "ui.numberfield-increase": {
31
+ "defaultMessage": "{fieldLabel} erhöhen",
32
+ "description": "Accessible label for a number field's increment stepper; fieldLabel is the field's label and may be empty"
33
+ },
34
+ "ui.select-placeholder": {
35
+ "defaultMessage": "Element wählen",
36
+ "description": "Shown in a Select's trigger while nothing is chosen and the app supplies no placeholder"
37
+ },
38
+ "ui.select-row-action": {
39
+ "defaultMessage": "Auswählen",
40
+ "description": "Accessible label for a row-selection checkbox in a list or table; screen readers read it together with the row's content"
41
+ },
42
+ "ui.toast-region": {
43
+ "defaultMessage": "{count, plural, one {# Benachrichtigung} other {# Benachrichtigungen}}.",
44
+ "description": "Accessible label for the notifications area; count is the number of notifications showing"
45
+ },
6
46
  "ui.toast-status-error": {
7
- "defaultMessage": "Error",
47
+ "defaultMessage": "Fehler",
8
48
  "description": "Announced by screen readers before an error notification"
9
49
  },
10
50
  "ui.toast-status-info": {
11
- "defaultMessage": "Information",
51
+ "defaultMessage": "Informationen",
12
52
  "description": "Announced by screen readers before an informational notification"
13
53
  },
14
54
  "ui.toast-status-success": {
15
- "defaultMessage": "Success",
55
+ "defaultMessage": "Erfolg",
16
56
  "description": "Announced by screen readers before a success notification"
17
57
  },
18
58
  "ui.toast-status-warning": {
19
- "defaultMessage": "Warning",
59
+ "defaultMessage": "Warnung",
20
60
  "description": "Announced by screen readers before a warning notification"
21
61
  }
22
62
  }
@@ -1,8 +1,48 @@
1
1
  {
2
+ "ui.breadcrumb": {
3
+ "defaultMessage": "Breadcrumb",
4
+ "description": "Accessible label for the breadcrumb navigation trail (the WAI-ARIA APG's conventional name)"
5
+ },
2
6
  "ui.close-action": {
3
7
  "defaultMessage": "Close",
4
8
  "description": "Close button text or label"
5
9
  },
10
+ "ui.combobox-listbox": {
11
+ "defaultMessage": "Suggestions",
12
+ "description": "Accessible label for a ComboBox's dropdown list of suggestions"
13
+ },
14
+ "ui.combobox-trigger": {
15
+ "defaultMessage": "Show suggestions",
16
+ "description": "Accessible label for the button that opens a ComboBox's suggestions dropdown"
17
+ },
18
+ "ui.loading": {
19
+ "defaultMessage": "Loading",
20
+ "description": "Announced by screen readers for a button showing a loading spinner"
21
+ },
22
+ "ui.new-tab-notice": {
23
+ "defaultMessage": "opens in a new tab",
24
+ "description": "Visually hidden suffix on links that open a new tab, announced by screen readers"
25
+ },
26
+ "ui.numberfield-decrease": {
27
+ "defaultMessage": "Decrease {fieldLabel}",
28
+ "description": "Accessible label for a number field's decrement stepper; fieldLabel is the field's label and may be empty"
29
+ },
30
+ "ui.numberfield-increase": {
31
+ "defaultMessage": "Increase {fieldLabel}",
32
+ "description": "Accessible label for a number field's increment stepper; fieldLabel is the field's label and may be empty"
33
+ },
34
+ "ui.select-placeholder": {
35
+ "defaultMessage": "Select an item",
36
+ "description": "Shown in a Select's trigger while nothing is chosen and the app supplies no placeholder"
37
+ },
38
+ "ui.select-row-action": {
39
+ "defaultMessage": "Select",
40
+ "description": "Accessible label for a row-selection checkbox in a list or table; screen readers read it together with the row's content"
41
+ },
42
+ "ui.toast-region": {
43
+ "defaultMessage": "{count, plural, one {# notification} other {# notifications}}.",
44
+ "description": "Accessible label for the notifications area; count is the number of notifications showing"
45
+ },
6
46
  "ui.toast-status-error": {
7
47
  "defaultMessage": "Error",
8
48
  "description": "Announced by screen readers before an error notification"
package/lang/ui.en.json CHANGED
@@ -1,8 +1,48 @@
1
1
  {
2
+ "ui.breadcrumb": {
3
+ "defaultMessage": "Breadcrumb",
4
+ "description": "Accessible label for the breadcrumb navigation trail (the WAI-ARIA APG's conventional name)"
5
+ },
2
6
  "ui.close-action": {
3
7
  "defaultMessage": "Close",
4
8
  "description": "Close button text or label"
5
9
  },
10
+ "ui.combobox-listbox": {
11
+ "defaultMessage": "Suggestions",
12
+ "description": "Accessible label for a ComboBox's dropdown list of suggestions"
13
+ },
14
+ "ui.combobox-trigger": {
15
+ "defaultMessage": "Show suggestions",
16
+ "description": "Accessible label for the button that opens a ComboBox's suggestions dropdown"
17
+ },
18
+ "ui.loading": {
19
+ "defaultMessage": "Loading",
20
+ "description": "Announced by screen readers for a button showing a loading spinner"
21
+ },
22
+ "ui.new-tab-notice": {
23
+ "defaultMessage": "opens in a new tab",
24
+ "description": "Visually hidden suffix on links that open a new tab, announced by screen readers"
25
+ },
26
+ "ui.numberfield-decrease": {
27
+ "defaultMessage": "Decrease {fieldLabel}",
28
+ "description": "Accessible label for a number field's decrement stepper; fieldLabel is the field's label and may be empty"
29
+ },
30
+ "ui.numberfield-increase": {
31
+ "defaultMessage": "Increase {fieldLabel}",
32
+ "description": "Accessible label for a number field's increment stepper; fieldLabel is the field's label and may be empty"
33
+ },
34
+ "ui.select-placeholder": {
35
+ "defaultMessage": "Select an item",
36
+ "description": "Shown in a Select's trigger while nothing is chosen and the app supplies no placeholder"
37
+ },
38
+ "ui.select-row-action": {
39
+ "defaultMessage": "Select",
40
+ "description": "Accessible label for a row-selection checkbox in a list or table; screen readers read it together with the row's content"
41
+ },
42
+ "ui.toast-region": {
43
+ "defaultMessage": "{count, plural, one {# notification} other {# notifications}}.",
44
+ "description": "Accessible label for the notifications area; count is the number of notifications showing"
45
+ },
6
46
  "ui.toast-status-error": {
7
47
  "defaultMessage": "Error",
8
48
  "description": "Announced by screen readers before an error notification"