Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Recording controls footer

Linear: AUT-131

Bottom row of the tray record popover — the final visible step before the first recording starts. Auto-zoom + countdown pills on the left, prominent red Start recording button on the right with the keyboard shortcut hint inside.

States

StateStory
Readyrecording-footer-ready
Disabled (no source selected)recording-footer-disabled
Loading (start dispatched)recording-footer-loading
Permission blockedrecording-footer-permission-blocked
Compact (no zoom / no countdown)recording-footer-compact

API

#![allow(unused)]
fn main() {
use ui_storybook::components::{
    RecordingControlsFooter, RecordingControlsView, StartRecordingState,
};
use ui_storybook::fixtures::recorder::sample_recording_controls;

view! {
    <RecordingControlsFooter
        view=sample_recording_controls(StartRecordingState::Ready)
        // optional callbacks; stories leave them unset.
    />
}
}

Composition

flowchart LR
    Footer[RecordingControlsFooter]
    Footer --> Zoom[AutoZoomSelect · SelectPill]
    Footer --> Countdown[CountdownSelect · SelectPill]
    Footer --> Start[StartRecordingButton]
    Start --> Glyph[●  / ◌  / ⚠ ]
    Start --> Label["Start recording"]
    Start --> Shortcut[ShortcutBadgeGroup · ⌘ ⇧ 2]

Permission-blocked is interactive

StartRecordingState::Disabled and Loading render the button non-interactive. PermissionBlocked keeps the button active — clicking it should open the permission prompt — and renders as the amber variant so it reads as a warning rather than a primary CTA.

Shortcut order is preserved

The footer renders view.shortcuts in input order. The recording_controls_preserve_shortcut_order test guards against a future refactor that sorts them.