@microbit/ui 0.1.0-alpha.10

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 (86) hide show
  1. package/LICENSE.md +53 -0
  2. package/README.md +220 -0
  3. package/lang/ui.ca.json +22 -0
  4. package/lang/ui.de.json +22 -0
  5. package/lang/ui.en-us.json +22 -0
  6. package/lang/ui.en.json +22 -0
  7. package/lang/ui.es-es.json +22 -0
  8. package/lang/ui.fr.json +22 -0
  9. package/lang/ui.ga-ie.json +22 -0
  10. package/lang/ui.ja.json +22 -0
  11. package/lang/ui.ko.json +22 -0
  12. package/lang/ui.lol.json +22 -0
  13. package/lang/ui.nl.json +22 -0
  14. package/lang/ui.pl.json +22 -0
  15. package/lang/ui.pt-br.json +22 -0
  16. package/lang/ui.zh-cn.json +22 -0
  17. package/lang/ui.zh-tw.json +22 -0
  18. package/package.json +58 -0
  19. package/postcss-legacy-safari.cjs +96 -0
  20. package/reset.css +35 -0
  21. package/src/Button.recipe.ts +162 -0
  22. package/src/Button.tsx +69 -0
  23. package/src/ButtonGroup.tsx +63 -0
  24. package/src/Card.recipe.ts +49 -0
  25. package/src/Card.tsx +56 -0
  26. package/src/Checkbox.recipe.ts +105 -0
  27. package/src/Checkbox.tsx +76 -0
  28. package/src/CloseButton.tsx +87 -0
  29. package/src/CloseIcon.tsx +40 -0
  30. package/src/Code.tsx +20 -0
  31. package/src/Collapse.tsx +180 -0
  32. package/src/Divider.tsx +52 -0
  33. package/src/Drawer.recipe.ts +98 -0
  34. package/src/Drawer.tsx +138 -0
  35. package/src/Fade.tsx +48 -0
  36. package/src/Heading.recipe.ts +52 -0
  37. package/src/Heading.tsx +14 -0
  38. package/src/Icon.tsx +55 -0
  39. package/src/IconButton.tsx +44 -0
  40. package/src/Image.tsx +11 -0
  41. package/src/Input.recipe.ts +72 -0
  42. package/src/Input.tsx +40 -0
  43. package/src/InputGroup.tsx +62 -0
  44. package/src/Kbd.tsx +26 -0
  45. package/src/Link.tsx +23 -0
  46. package/src/LinkBox.tsx +88 -0
  47. package/src/LinkButton.tsx +80 -0
  48. package/src/List.tsx +31 -0
  49. package/src/Menu.recipe.ts +119 -0
  50. package/src/Menu.tsx +261 -0
  51. package/src/Modal.recipe.ts +163 -0
  52. package/src/Modal.tsx +279 -0
  53. package/src/NativeSelect.tsx +94 -0
  54. package/src/NumberField.recipe.ts +67 -0
  55. package/src/NumberField.tsx +86 -0
  56. package/src/PopoverArrow.tsx +67 -0
  57. package/src/ProgressBar.tsx +61 -0
  58. package/src/Radio.recipe.ts +107 -0
  59. package/src/Radio.tsx +89 -0
  60. package/src/SharedUIProvider.tsx +55 -0
  61. package/src/Slide.tsx +54 -0
  62. package/src/Slider.recipe.ts +102 -0
  63. package/src/Slider.tsx +163 -0
  64. package/src/Spinner.tsx +69 -0
  65. package/src/Svg.tsx +23 -0
  66. package/src/Switch.recipe.ts +107 -0
  67. package/src/Switch.tsx +62 -0
  68. package/src/Text.recipe.ts +29 -0
  69. package/src/Text.tsx +16 -0
  70. package/src/TextField.recipe.ts +54 -0
  71. package/src/TextField.tsx +89 -0
  72. package/src/Toast.recipe.ts +98 -0
  73. package/src/Toast.tsx +171 -0
  74. package/src/Tooltip.tsx +91 -0
  75. package/src/UnmountCallback.tsx +18 -0
  76. package/src/VisuallyHidden.tsx +14 -0
  77. package/src/base-preset.ts +294 -0
  78. package/src/base-tokens.ts +1017 -0
  79. package/src/button-icon.ts +23 -0
  80. package/src/hooks/useBreakpointValue.ts +63 -0
  81. package/src/hooks/useClipboard.ts +64 -0
  82. package/src/hooks/useMediaQuery.ts +28 -0
  83. package/src/hooks/usePrevious.ts +18 -0
  84. package/src/index.ts +55 -0
  85. package/src/messages.ts +17 -0
  86. package/src/system.ts +36 -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,220 @@
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 the app's own preset, then optionally a
23
+ **private brand preset** (Foundation colours, licensed fonts).
24
+
25
+ Later presets override earlier ones token-by-token — the base recipes and
26
+ semantic tokens reference the brand tokens, which is how a brand swap
27
+ restyles everything without touching recipes. Set `eject: true` (the stack
28
+ supplies the full token system). After changing an _external_ preset
29
+ dependency, regenerate clean: `rm -rf styled-system && npm run panda` —
30
+ incremental codegen does not detect external preset changes.
31
+
32
+ 2. **Include this package's source** in `panda.config.ts` so Panda extracts
33
+ the styles the components use:
34
+ ```ts
35
+ include: [
36
+ "./src/**/*.{ts,tsx}",
37
+ "./node_modules/@microbit/ui/src/**/*.{ts,tsx}",
38
+ ],
39
+ ```
40
+ 3. **Resolve `styled-system/*` onto the generated output** for all
41
+ importers, this package's source included — a `styled-system` alias in
42
+ both `tsconfig.json` `paths` and the bundler config (see the
43
+ `viteFinal` in `.storybook/main.ts`).
44
+ 4. **Generate and load the CSS** with Panda's PostCSS plugin. Keep Vite's
45
+ default transformer — do **not** set `css.transformer: "lightningcss"`,
46
+ which disables PostCSS. Add a `postcss.config.cjs`:
47
+
48
+ ```js
49
+ module.exports = { plugins: { "@pandacss/dev/postcss": {} } };
50
+ ```
51
+
52
+ Run `panda codegen` as a `prepare`/`predev` step so the `styled-system/*`
53
+ helpers exist before `tsc`; the plugin generates the CSS during the bundle.
54
+ Import **one** entry stylesheet — first, before app styles — that declares
55
+ the cascade-layer order; the plugin injects the generated CSS into it (the
56
+ declaration must list all of Panda's layers, hence ≥5 names):
57
+
58
+ ```css
59
+ /* e.g. src/layers.css, imported once at the app root */
60
+ @layer reset, vendor, base, tokens, recipes, utilities;
61
+
62
+ @import "@microbit/ui/reset.css" layer(reset);
63
+ ```
64
+
65
+ The `reset.css` import is **required**: it carries the Chakra-parity
66
+ `* { border-color; word-wrap }` defaults, which must sit in the bottom
67
+ layer (the legacy-Safari cascade-layer flattening specificity-boosts
68
+ 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
+ width but no colour render `currentColor` borders.
71
+ The `vendor` layer is for third-party stylesheets: import any vendor CSS
72
+ 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.
75
+
76
+ 5. **react-intl**: an `IntlProvider` above any shared-ui usage. English
77
+ works with no setup (components carry inline `defaultMessage`); for
78
+ other locales compile this package's `lang/ui.<locale>.json` into the
79
+ app's per-locale catalogs as part of the app's formatjs compile step,
80
+ e.g. `formatjs compile lang/ui.fr.json
81
+ node_modules/@microbit/ui/lang/ui.fr.json --ast --out-file ...` (multiple
82
+ input files merge; ids are `ui.`-namespaced so they can't collide). This
83
+ keeps the strings in the app's lazily loaded locale chunks rather than
84
+ 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.
89
+
90
+ ## Legacy browser support (Safari < 15) — temporary
91
+
92
+ Panda's output uses two things Safari below 15 mishandles. If an app must
93
+ support that far back (e.g. Safari 14.1 web views), add the app-side wiring
94
+ below. **All of it is meant to be deleted once the app's support floor rises
95
+ past these browsers** — it lives entirely in the consuming app's build config,
96
+ never in shipped component source. This package's own Storybook does _not_ use
97
+ any of it (it targets modern browsers, where these work natively).
98
+
99
+ Two concerns:
100
+
101
+ 1. **`@layer`** — Safari < 15.4 drops `@layer` blocks wholesale, leaving the
102
+ app unstyled. Flatten them with `@csstools/postcss-cascade-layers` (which
103
+ rewrites layers into `:not(#\#)` specificity fallbacks; ~+8% gzipped CSS,
104
+ mostly compressible).
105
+ 2. **Logical shorthands + `var()`** — Safari 14.x silently drops
106
+ `padding-inline: var(--…)` and friends (a literal value, or the -start/-end
107
+ longhands, both work). Panda emits these shorthands for its px/py/mx/my
108
+ utilities, so most token spacing collapses. Expand them to longhands with
109
+ this package's `postcss-legacy-safari` plugin (kept logical, so RTL flips).
110
+
111
+ ```bash
112
+ npm i -D @csstools/postcss-cascade-layers
113
+ ```
114
+
115
+ ```js
116
+ // postcss.config.cjs — the two legacy plugins run AFTER Panda's (step 4), so
117
+ // switch that config to array form:
118
+ const {
119
+ expandLogicalShorthands,
120
+ } = require("@microbit/ui/postcss-legacy-safari");
121
+
122
+ module.exports = {
123
+ plugins: [
124
+ require("@pandacss/dev/postcss")(),
125
+ expandLogicalShorthands(),
126
+ require("@csstools/postcss-cascade-layers"),
127
+ ],
128
+ };
129
+ ```
130
+
131
+ ```ts
132
+ // vite.config.ts — pin the CSS/JS floor. Otherwise the lightningcss minifier
133
+ // inherits build.target and downlevels logical longhands into fragile
134
+ // :lang()-based physical rules. Keep in sync with package.json "browserslist".
135
+ const BUILD_TARGETS = ["safari14.1", "ios14.5", "chrome90", "edge90", "firefox88"];
136
+ // ...
137
+ build: {
138
+ target: BUILD_TARGETS,
139
+ cssTarget: BUILD_TARGETS,
140
+ cssMinify: "lightningcss", // lightningcss as minifier only, not the transformer
141
+ },
142
+ ```
143
+
144
+ To drop it all: raise `BUILD_TARGETS`/`browserslist` past the affected
145
+ browsers, then remove the two PostCSS plugins (and this package's
146
+ `postcss-legacy-safari` export).
147
+
148
+ ## The CSS-variable contract
149
+
150
+ Panda emits every token as a CSS custom property with its default naming —
151
+ `{category}-{path}` with dots become dashes, camelCase becomes kebab-case:
152
+
153
+ - `colors.brand.500` → `var(--colors-brand-500)`
154
+ - `colors.statusBarBg` → `var(--colors-status-bar-bg)`
155
+ - `fonts.display` → `var(--fonts-display)`
156
+
157
+ These names are **API** for styling that lives outside React/Panda — e.g.
158
+ CodeMirror highlight styles or xterm themes written as raw CSS. Two rules
159
+ keep them stable:
160
+
161
+ - Never set `hashing` or `prefix` in `panda.config.ts`.
162
+ - Brand/app presets may change token _values_, never token _names_.
163
+
164
+ 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.
168
+
169
+ ## Runtime token lookups
170
+
171
+ 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:
175
+
176
+ ```ts
177
+ import { token } from "@microbit/ui"; // re-exports styled-system/tokens
178
+
179
+ token("colors.brand.500"); // "#007dbc" — raw value, safe for colour math
180
+ token("colors.statusBarBg"); // "var(--colors-brand2-500)" — CSS contexts only
181
+ ```
182
+
183
+ Base tokens resolve to raw values; **semantic tokens resolve to `var()`
184
+ references**, which are only meaningful where the browser interprets CSS.
185
+ For computation, look up the base token the semantic one points at, or read
186
+ the computed style. `token.var("colors.x.y")` returns the variable reference
187
+ form explicitly.
188
+
189
+ ## Strings
190
+
191
+ Components never hardcode user-facing text. The few strings this package
192
+ needs internally (close-button labels, toast status announcements) are
193
+ react-intl messages with ids in the `ui.` namespace; everything else is
194
+ passed in by the caller as already-localized content.
195
+
196
+ The `lang/ui.<locale>.json` files (formatjs extracted format) are the source
197
+ of truth and are shipped as-is (exported at `./lang/*`); consuming apps
198
+ compile them into their own per-locale catalogs (see the consumption setup
199
+ above). Components also carry the English text inline as `defaultMessage`,
200
+ so an app that compiles no catalogs still renders English.
201
+
202
+ `en` is hand-edited; `en-US` is maintained manually. Other locales come from
203
+ Crowdin via the repo-root `npm run update-translations -- <path to extracted
204
+ Crowdin ZIP>` (config-driven over packages in
205
+ `bin/update-translations.cjs`), after which you run `npm run i18n:tidy`
206
+ from the root.
207
+
208
+ ## Chakra UI heritage and license
209
+
210
+ This package's design language began as a faithful port of
211
+ [Chakra UI](https://chakra-ui.com/) v2's, done so the apps it serves could
212
+ leave Chakra without a redesign: `src/base-tokens.ts` was snapshotted from
213
+ `@chakra-ui/theme`'s default token scales, and the `*.recipe.ts` files were
214
+ ported from Chakra's component styles onto Panda config recipes.
215
+ However far it evolves from that starting point, it owes its foundations to
216
+ Chakra. Thanks to Segun Adebayo and the Chakra UI contributors.
217
+
218
+ The package is [MIT](LICENSE.md) © Micro:bit Educational Foundation and
219
+ contributors; Chakra UI is MIT © Segun Adebayo, and its notice is carried
220
+ 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": "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": "閉じる",
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
+ }
@@ -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
+ }