@microbit/ui 0.0.0-gray.ramp.90

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 (102) hide show
  1. package/LICENSE.md +53 -0
  2. package/README.md +222 -0
  3. package/lang/ui.ca.json +22 -0
  4. package/lang/ui.cy.json +22 -0
  5. package/lang/ui.de.json +22 -0
  6. package/lang/ui.en-us.json +22 -0
  7. package/lang/ui.en.json +22 -0
  8. package/lang/ui.es-es.json +22 -0
  9. package/lang/ui.fr.json +22 -0
  10. package/lang/ui.ga-ie.json +22 -0
  11. package/lang/ui.it.json +22 -0
  12. package/lang/ui.ja.json +22 -0
  13. package/lang/ui.ko.json +22 -0
  14. package/lang/ui.lol.json +22 -0
  15. package/lang/ui.nl.json +22 -0
  16. package/lang/ui.pl.json +22 -0
  17. package/lang/ui.pt-br.json +22 -0
  18. package/lang/ui.zh-cn.json +22 -0
  19. package/lang/ui.zh-tw.json +22 -0
  20. package/package.json +66 -0
  21. package/postcss-legacy-safari.cjs +96 -0
  22. package/reset.css +35 -0
  23. package/src/Avatar.recipe.ts +168 -0
  24. package/src/Avatar.tsx +276 -0
  25. package/src/Button.recipe.ts +192 -0
  26. package/src/Button.tsx +69 -0
  27. package/src/ButtonGroup.tsx +70 -0
  28. package/src/Card.recipe.ts +49 -0
  29. package/src/Card.tsx +56 -0
  30. package/src/Checkbox.recipe.ts +111 -0
  31. package/src/Checkbox.tsx +106 -0
  32. package/src/CloseButton.tsx +87 -0
  33. package/src/CloseIcon.tsx +40 -0
  34. package/src/Code.tsx +20 -0
  35. package/src/Collapse.tsx +180 -0
  36. package/src/ComboBox.tsx +192 -0
  37. package/src/Divider.tsx +85 -0
  38. package/src/Drawer.recipe.ts +98 -0
  39. package/src/Drawer.tsx +138 -0
  40. package/src/Fade.tsx +48 -0
  41. package/src/GridList.recipe.ts +58 -0
  42. package/src/GridList.tsx +81 -0
  43. package/src/Heading.recipe.ts +52 -0
  44. package/src/Heading.tsx +14 -0
  45. package/src/Icon.tsx +75 -0
  46. package/src/IconButton.tsx +44 -0
  47. package/src/Image.tsx +11 -0
  48. package/src/Input.recipe.ts +75 -0
  49. package/src/Input.tsx +44 -0
  50. package/src/InputGroup.tsx +62 -0
  51. package/src/Kbd.tsx +26 -0
  52. package/src/Link.tsx +23 -0
  53. package/src/LinkBox.tsx +88 -0
  54. package/src/LinkButton.tsx +80 -0
  55. package/src/List.tsx +31 -0
  56. package/src/ListBox.recipe.ts +43 -0
  57. package/src/ListBox.tsx +88 -0
  58. package/src/Menu.recipe.ts +124 -0
  59. package/src/Menu.tsx +291 -0
  60. package/src/Modal.recipe.ts +163 -0
  61. package/src/Modal.tsx +377 -0
  62. package/src/NativeSelect.tsx +94 -0
  63. package/src/NumberField.recipe.ts +67 -0
  64. package/src/NumberField.tsx +86 -0
  65. package/src/PopoverArrow.tsx +67 -0
  66. package/src/ProgressBar.tsx +61 -0
  67. package/src/Radio.recipe.ts +112 -0
  68. package/src/Radio.tsx +89 -0
  69. package/src/Select.recipe.ts +210 -0
  70. package/src/Select.tsx +153 -0
  71. package/src/SharedUIProvider.tsx +55 -0
  72. package/src/Skeleton.tsx +146 -0
  73. package/src/Slide.tsx +54 -0
  74. package/src/Slider.recipe.ts +102 -0
  75. package/src/Slider.tsx +163 -0
  76. package/src/Spinner.tsx +74 -0
  77. package/src/Svg.tsx +23 -0
  78. package/src/Switch.recipe.ts +107 -0
  79. package/src/Switch.tsx +62 -0
  80. package/src/Text.recipe.ts +29 -0
  81. package/src/Text.tsx +16 -0
  82. package/src/TextField.recipe.ts +54 -0
  83. package/src/TextField.tsx +91 -0
  84. package/src/Toast.recipe.ts +98 -0
  85. package/src/Toast.tsx +173 -0
  86. package/src/Tooltip.recipe.ts +37 -0
  87. package/src/Tooltip.tsx +76 -0
  88. package/src/UnmountCallback.tsx +18 -0
  89. package/src/VisuallyHidden.tsx +14 -0
  90. package/src/base-preset.ts +371 -0
  91. package/src/base-tokens.ts +1017 -0
  92. package/src/button-icon.ts +23 -0
  93. package/src/data-attrs.ts +16 -0
  94. package/src/dense-preset.ts +108 -0
  95. package/src/hooks/useBreakpointValue.ts +63 -0
  96. package/src/hooks/useClipboard.ts +64 -0
  97. package/src/hooks/useDisclosure.ts +32 -0
  98. package/src/hooks/useMediaQuery.ts +28 -0
  99. package/src/hooks/usePrevious.ts +18 -0
  100. package/src/index.ts +63 -0
  101. package/src/messages.ts +17 -0
  102. package/src/system.ts +45 -0
package/LICENSE.md ADDED
@@ -0,0 +1,53 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Micro:bit Educational Foundation and contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ ## Third-party notices
26
+
27
+ This package includes design tokens and component styling derived from
28
+ [Chakra UI](https://github.com/chakra-ui/chakra-ui) v2: the token scales in
29
+ `src/base-tokens.ts` were snapshotted from `@chakra-ui/theme`'s default
30
+ values, and the component recipes were ported from Chakra's component styles.
31
+ Chakra UI is used under the MIT License:
32
+
33
+ > MIT License
34
+ >
35
+ > Copyright (c) 2019 Segun Adebayo
36
+ >
37
+ > Permission is hereby granted, free of charge, to any person obtaining a copy
38
+ > of this software and associated documentation files (the "Software"), to deal
39
+ > in the Software without restriction, including without limitation the rights
40
+ > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
41
+ > copies of the Software, and to permit persons to whom the Software is
42
+ > furnished to do so, subject to the following conditions:
43
+ >
44
+ > The above copyright notice and this permission notice shall be included in all
45
+ > copies or substantial portions of the Software.
46
+ >
47
+ > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
48
+ > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
49
+ > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
50
+ > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
51
+ > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
52
+ > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
53
+ > SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,222 @@
1
+ # @microbit/ui
2
+
3
+ react-aria-components + Panda CSS primitives with a design language ported from
4
+ the Micro:bit Educational Foundation apps' original
5
+ [Chakra UI](https://chakra-ui.com/) v2 themes (see
6
+ [Chakra UI heritage](#chakra-ui-heritage-and-license)).
7
+
8
+ The package **ships as source**: components import `styled-system/*`, which
9
+ each consumer generates with its own Panda preset stack. There is no build
10
+ step and no CSS shipped — the consumer's Panda run produces exactly the styles
11
+ its tree uses (`panda codegen` for the `styled-system/*` helpers, the Panda
12
+ PostCSS plugin for the CSS).
13
+
14
+ ## App-side installation
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:
19
+
20
+ 1. **Panda preset stack** (`panda.config.ts`): `@pandacss/preset-base`, then
21
+ the **base preset** (`@microbit/ui/base-preset` — the complete micro:bit
22
+ design system), then optionally `@microbit/ui/dense-preset` (the × 0.88
23
+ spacing / × 0.9 font-size density the information-dense apps use), then
24
+ optionally the app's own preset, then optionally a **private brand
25
+ preset** (Foundation colours, licensed fonts).
26
+
27
+ Later presets override earlier ones token-by-token — the base recipes and
28
+ semantic tokens reference the brand tokens, which is how a brand swap
29
+ restyles everything without touching recipes. Set `eject: true` (the stack
30
+ supplies the full token system). After changing an _external_ preset
31
+ dependency, regenerate clean: `rm -rf styled-system && npm run panda` —
32
+ incremental codegen does not detect external preset changes.
33
+
34
+ 2. **Include this package's source** in `panda.config.ts` so Panda extracts
35
+ the styles the components use:
36
+ ```ts
37
+ include: [
38
+ "./src/**/*.{ts,tsx}",
39
+ "./node_modules/@microbit/ui/src/**/*.{ts,tsx}",
40
+ ],
41
+ ```
42
+ 3. **Resolve `styled-system/*` onto the generated output** for all
43
+ importers, this package's source included — a `styled-system` alias in
44
+ both `tsconfig.json` `paths` and the bundler config (see the
45
+ `viteFinal` in `.storybook/main.ts`).
46
+ 4. **Generate and load the CSS** with Panda's PostCSS plugin. Keep Vite's
47
+ default transformer — do **not** set `css.transformer: "lightningcss"`,
48
+ which disables PostCSS. Add a `postcss.config.cjs`:
49
+
50
+ ```js
51
+ module.exports = { plugins: { "@pandacss/dev/postcss": {} } };
52
+ ```
53
+
54
+ Run `panda codegen` as a `prepare`/`predev` step so the `styled-system/*`
55
+ helpers exist before `tsc`; the plugin generates the CSS during the bundle.
56
+ Import **one** entry stylesheet — first, before app styles — that declares
57
+ the cascade-layer order; the plugin injects the generated CSS into it (the
58
+ declaration must list all of Panda's layers, hence ≥5 names):
59
+
60
+ ```css
61
+ /* e.g. src/layers.css, imported once at the app root */
62
+ @layer reset, vendor, base, tokens, recipes, utilities;
63
+
64
+ @import "@microbit/ui/reset.css" layer(reset);
65
+ ```
66
+
67
+ The `reset.css` import is **required**: it carries the Chakra-parity
68
+ `* { border-color; word-wrap }` defaults, which must sit in the bottom
69
+ layer (the legacy-Safari cascade-layer flattening specificity-boosts
70
+ higher layers above CSS it can't see — runtime-injected styles, other
71
+ files; playbook gotcha #28). Without it, elements that set a border
72
+ width but no colour render `currentColor` borders.
73
+ The `vendor` layer is for third-party stylesheets: import any vendor CSS
74
+ with `@import "..." layer(vendor)` so it beats the preflight reset but
75
+ loses to app styling. See `.storybook/{layers.css,preview.tsx,main.ts}` +
76
+ `postcss.config.cjs` for the worked example.
77
+
78
+ 5. **react-intl**: an `IntlProvider` above any shared-ui usage. English
79
+ works with no setup (components carry inline `defaultMessage`); for
80
+ other locales compile this package's `lang/ui.<locale>.json` into the
81
+ app's per-locale catalogs as part of the app's formatjs compile step,
82
+ e.g. `formatjs compile lang/ui.fr.json
83
+ node_modules/@microbit/ui/lang/ui.fr.json --ast --out-file ...` (multiple
84
+ input files merge; ids are `ui.`-namespaced so they can't collide). This
85
+ keeps the strings in the app's lazily loaded locale chunks rather than
86
+ an eagerly bundled catalog-of-all-locales.
87
+ 6. **`ToastProvider`** once near the root, inside the `IntlProvider`.
88
+ 7. Optionally **`SharedUIProvider`** with an overlay-close registrar so the
89
+ app can dismiss open menus from outside the tree (e.g. the Android
90
+ hardware back button). Apps without one can omit the provider.
91
+
92
+ ## Legacy browser support (Safari < 15) — temporary
93
+
94
+ Panda's output uses two things Safari below 15 mishandles. If an app must
95
+ support that far back (e.g. Safari 14.1 web views), add the app-side wiring
96
+ below. **All of it is meant to be deleted once the app's support floor rises
97
+ past these browsers** — it lives entirely in the consuming app's build config,
98
+ never in shipped component source. This package's own Storybook does _not_ use
99
+ any of it (it targets modern browsers, where these work natively).
100
+
101
+ Two concerns:
102
+
103
+ 1. **`@layer`** — Safari < 15.4 drops `@layer` blocks wholesale, leaving the
104
+ app unstyled. Flatten them with `@csstools/postcss-cascade-layers` (which
105
+ rewrites layers into `:not(#\#)` specificity fallbacks; ~+8% gzipped CSS,
106
+ mostly compressible).
107
+ 2. **Logical shorthands + `var()`** — Safari 14.x silently drops
108
+ `padding-inline: var(--…)` and friends (a literal value, or the -start/-end
109
+ longhands, both work). Panda emits these shorthands for its px/py/mx/my
110
+ utilities, so most token spacing collapses. Expand them to longhands with
111
+ this package's `postcss-legacy-safari` plugin (kept logical, so RTL flips).
112
+
113
+ ```bash
114
+ npm i -D @csstools/postcss-cascade-layers
115
+ ```
116
+
117
+ ```js
118
+ // postcss.config.cjs — the two legacy plugins run AFTER Panda's (step 4), so
119
+ // switch that config to array form:
120
+ const {
121
+ expandLogicalShorthands,
122
+ } = require("@microbit/ui/postcss-legacy-safari");
123
+
124
+ module.exports = {
125
+ plugins: [
126
+ require("@pandacss/dev/postcss")(),
127
+ expandLogicalShorthands(),
128
+ require("@csstools/postcss-cascade-layers"),
129
+ ],
130
+ };
131
+ ```
132
+
133
+ ```ts
134
+ // vite.config.ts — pin the CSS/JS floor. Otherwise the lightningcss minifier
135
+ // inherits build.target and downlevels logical longhands into fragile
136
+ // :lang()-based physical rules. Keep in sync with package.json "browserslist".
137
+ const BUILD_TARGETS = ["safari14.1", "ios14.5", "chrome90", "edge90", "firefox88"];
138
+ // ...
139
+ build: {
140
+ target: BUILD_TARGETS,
141
+ cssTarget: BUILD_TARGETS,
142
+ cssMinify: "lightningcss", // lightningcss as minifier only, not the transformer
143
+ },
144
+ ```
145
+
146
+ To drop it all: raise `BUILD_TARGETS`/`browserslist` past the affected
147
+ browsers, then remove the two PostCSS plugins (and this package's
148
+ `postcss-legacy-safari` export).
149
+
150
+ ## The CSS-variable contract
151
+
152
+ Panda emits every token as a CSS custom property with its default naming —
153
+ `{category}-{path}` with dots become dashes, camelCase becomes kebab-case:
154
+
155
+ - `colors.brand.500` → `var(--colors-brand-500)`
156
+ - `colors.statusBarBg` → `var(--colors-status-bar-bg)`
157
+ - `fonts.display` → `var(--fonts-display)`
158
+
159
+ These names are **API** for styling that lives outside React/Panda — e.g.
160
+ CodeMirror highlight styles or xterm themes written as raw CSS. Two rules
161
+ keep them stable:
162
+
163
+ - Never set `hashing` or `prefix` in `panda.config.ts`.
164
+ - Brand/app presets may change token _values_, never token _names_.
165
+
166
+ Semantic tokens (`languageText`, `statusBarBg`, `danger.*`, `toast*Bg`,
167
+ `button.*`, `controlCheckedBg`, `focusBorder`, …) are the extension points
168
+ brand presets override; they resolve through var indirection, so overrides
169
+ apply wherever the token is consumed.
170
+
171
+ ## Runtime token lookups
172
+
173
+ For values that feed _computation_ rather than stylesheets (canvas painting,
174
+ colour math, inline `style` for data-driven values — see gotcha #9 in the
175
+ repo's [migration playbook](../../docs/migration-playbook.md)), import the
176
+ runtime lookup:
177
+
178
+ ```ts
179
+ import { token } from "@microbit/ui"; // re-exports styled-system/tokens
180
+
181
+ token("colors.brand.500"); // "#007dbc" — raw value, safe for colour math
182
+ token("colors.statusBarBg"); // "var(--colors-brand2-500)" — CSS contexts only
183
+ ```
184
+
185
+ Base tokens resolve to raw values; **semantic tokens resolve to `var()`
186
+ references**, which are only meaningful where the browser interprets CSS.
187
+ For computation, look up the base token the semantic one points at, or read
188
+ the computed style. `token.var("colors.x.y")` returns the variable reference
189
+ form explicitly.
190
+
191
+ ## Strings
192
+
193
+ Components never hardcode user-facing text. The few strings this package
194
+ needs internally (close-button labels, toast status announcements) are
195
+ react-intl messages with ids in the `ui.` namespace; everything else is
196
+ passed in by the caller as already-localized content.
197
+
198
+ The `lang/ui.<locale>.json` files (formatjs extracted format) are the source
199
+ of truth and are shipped as-is (exported at `./lang/*`); consuming apps
200
+ compile them into their own per-locale catalogs (see the consumption setup
201
+ above). Components also carry the English text inline as `defaultMessage`,
202
+ so an app that compiles no catalogs still renders English.
203
+
204
+ `en` is hand-edited; `en-US` is maintained manually. Other locales come from
205
+ Crowdin via the repo-root `npm run update-translations -- <path to extracted
206
+ Crowdin ZIP>` (config-driven over packages in
207
+ `bin/update-translations.cjs`), after which you run `npm run i18n:tidy`
208
+ from the root.
209
+
210
+ ## Chakra UI heritage and license
211
+
212
+ This package's design language began as a faithful port of
213
+ [Chakra UI](https://chakra-ui.com/) v2's, done so the apps it serves could
214
+ leave Chakra without a redesign: `src/base-tokens.ts` was snapshotted from
215
+ `@chakra-ui/theme`'s default token scales, and the `*.recipe.ts` files were
216
+ ported from Chakra's component styles onto Panda config recipes.
217
+ However far it evolves from that starting point, it owes its foundations to
218
+ Chakra. Thanks to Segun Adebayo and the Chakra UI contributors.
219
+
220
+ The package is [MIT](LICENSE.md) © Micro:bit Educational Foundation and
221
+ contributors; Chakra UI is MIT © Segun Adebayo, and its notice is carried
222
+ in [LICENSE.md](LICENSE.md).
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Tanca ",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Cau",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Gwall",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Rhybudd",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Schließen",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Close",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Close",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Cerrar",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Fermer",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Dún",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Chiudi",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Errore",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Attenzione",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "閉じる",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "닫기",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "crwdns362700:0crwdne362700:0",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Afsluiten",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Zamknij",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "Fechar",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "ui.close-action": {
3
+ "defaultMessage": "关闭",
4
+ "description": "Close button text or label"
5
+ },
6
+ "ui.toast-status-error": {
7
+ "defaultMessage": "Error",
8
+ "description": "Announced by screen readers before an error notification"
9
+ },
10
+ "ui.toast-status-info": {
11
+ "defaultMessage": "Information",
12
+ "description": "Announced by screen readers before an informational notification"
13
+ },
14
+ "ui.toast-status-success": {
15
+ "defaultMessage": "Success",
16
+ "description": "Announced by screen readers before a success notification"
17
+ },
18
+ "ui.toast-status-warning": {
19
+ "defaultMessage": "Warning",
20
+ "description": "Announced by screen readers before a warning notification"
21
+ }
22
+ }