tju-yxq opened a new issue, #6201: URL: https://github.com/apache/rocketmq-dashboard/issues/6201
### Describe the bug Every asynchronous outcome in the console is reported through an antd `message` or `notification` toast — exports, saves, deletes, retries, bulk results, background failures. None of it reaches a screen reader: - rc-notification (antd 5.22 / rc-notification 5.6.4, the engine behind both APIs) ships **no ARIA semantics** — a source scan of the installed package finds exactly one aria attribute (the Close button's `aria-label`); there is no `aria-live`, no `role="status"`/`role="alert"` anywhere. - A toast is therefore a DOM element that appears for three seconds and disappears, with no live region for assistive technology to observe. A screen-reader user who triggers "export CSV" or "delete consumer group" gets **no confirmation, no error, nothing** — the primary feedback channel of the whole UI is silent. Both toast paths are affected: | Path | Call sites | Portal | |---|---|---| | static `message.success/error/warning` | 60+ files | own portal in `document.body` | | `App.useApp().message` (antd `<App>` context) | 13 files | the App instance's portal | | static `notification.*` | 31 files | own portal in `document.body` | ### To reproduce 1. Open the console with a screen reader running (NVDA / VoiceOver). 2. Trigger any toast, e.g. Topic page → export CSV, or clear acknowledged alerts. 3. Observe: the visual toast appears; the screen reader announces nothing. ``` # evidence: the installed toast engine has no live semantics grep -r "aria" node_modules/rc-notification/es # -> only the Close button's aria-label ``` ### Expected behavior Toast text is announced when it appears (and not re-announced when it expires). The standard live-region pattern applied at the portal level achieves this without touching any call site: antd's `getContainer` config lets the app choose the element toasts mount into, so both the static singletons (`message.config` / `notification.config`) and the `App.useApp()` instances (the `message` / `notification` config props on antd's `<App>`) can mount into body-level containers carrying `role="status"` + `aria-live="polite"` — polite queues instead of interrupting, which fits non-emergency toasts. ### Additional context A fix is submitted referencing this issue. The region elements are created once at app start, before any toast can fire, because a live region that appears in the same DOM update as its content is not reliably announced. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
