Global polite live-region announcer for the menu family. Delegates to
the shared CngxLiveAnnouncer, announcing menu state transitions
(submenu open/close, item activation) through its polite region.
Scoped providedIn: 'root' so every menu in the app shares the same
region; the announcer clears then re-sets one frame later so screen
readers treat repeated identical messages as fresh events.
Default factory output for CNGX_MENU_ANNOUNCER_FACTORY.
Consumers obtain the announcer via the factory token, never by
inject(CngxMenuAnnouncer) directly, so a swap is enterprise-wide.
Announce a message via the polite live region. Empty messages are
ignored. The region is cleared ~16ms before being repopulated so AT
picks up identical-text repeats as a new event.