The Ctrl+Shift+L reference picker for the candlestick delta layer: a listbox
of the moving-average / reference lines in the current subplot. The user
moves the highlight with Up/Down (handled by the CANDLESTICK_DELTA_SETTINGS
keybinding scope) and presses Enter to remember that line and activate the
comparison; Escape closes without changing anything.
Keyboard handling lives in the scope keybindings (which drive the view
model), so this component only renders state and moves DOM focus onto the
highlighted option. That focus move is the sole announcement mechanism —
mirroring the Command Palette (Ctrl+Shift+P). An extra aria-live region here
would double-announce the selection ("… 3 of 3, Selected: …"), so there
intentionally isn't one.
The modal is hand-rolled (not MUI's Modal) to keep Escape and the arrow
keys flowing to the hotkeys-js scope, so it also lacks MUI's built-in focus
containment. A small Tab trap (onKeyDown below) keeps keyboard focus inside
the picker instead of letting it escape behind the backdrop into the page.
The Ctrl+Shift+L reference picker for the candlestick delta layer: a listbox of the moving-average / reference lines in the current subplot. The user moves the highlight with Up/Down (handled by the CANDLESTICK_DELTA_SETTINGS keybinding scope) and presses Enter to remember that line and activate the comparison; Escape closes without changing anything.
Keyboard handling lives in the scope keybindings (which drive the view model), so this component only renders state and moves DOM focus onto the highlighted option. That focus move is the sole announcement mechanism — mirroring the Command Palette (Ctrl+Shift+P). An extra aria-live region here would double-announce the selection ("… 3 of 3, Selected: …"), so there intentionally isn't one.
The modal is hand-rolled (not MUI's Modal) to keep Escape and the arrow keys flowing to the hotkeys-js scope, so it also lacks MUI's built-in focus containment. A small Tab trap (onKeyDown below) keeps keyboard focus inside the picker instead of letting it escape behind the backdrop into the page.