feat: add presentation mode with fullscreen, idle-hide, and keyboard navigation#133
feat: add presentation mode with fullscreen, idle-hide, and keyboard navigation#133YizukiAme wants to merge 1 commit intoTHU-MAIC:mainfrom
Conversation
40ef1cf to
cb90c83
Compare
wyuc
left a comment
There was a problem hiding this comment.
Thanks for this! Keyboard nav and idle-hide are well thought out, especially the suspension during voice input.
One thing worth revisiting: the idle-hide currently fades out the entire Roundtable (line 913), including the speech bubble. So if an agent is mid-sentence in fullscreen, the bubble disappears after 3s of no mouse activity. That feels off for presentation use where the audience is just watching.
Maybe split it so the toolbar hides on idle but the bubble stays visible when there's active speech (currentSpeech or lectureSpeech non-null)?
2d748ca to
59d92ca
Compare
Valid point! Working on this~~ |
Fixed in commits 5ef128b → acddc99 ! The idle-hide is now split per-section inside
Additionally:
|
acddc99 to
e86df4c
Compare
|
We've been thinking about how discussion content should work in presentation mode, and this ties into the next release roadmap (see Discussion #150). Currently in your PR, the roundtable area becomes a frosted glass bar with bubbles still rendered on top. We'd like to take that further: instead of keeping the full roundtable strip, show discussion messages as transient popup bubbles in the corners of the screen. The idea:
This way users still see the discussion without a persistent UI strip at the bottom. If you're interested in picking this up, we'll include it in the next release. Like this:
|
|
Love this direction! This is exactly what I had in mind when building the presentation mode — I originally considered a danmaku-style overlay but held off because I wasn't sure it aligned with the team's vision. Great to see we're on the same page. I'm happy to pick this up. A few thoughts on the implementation:
One question: this touches the whiteboard hint positioning (bottom corners → top corners during fullscreen), and #169 may revert the pan/zoom changes that include the current hint layout. Should I develop against the current codebase and resolve conflicts if #169 lands first, or should I wait for #169 to merge? My preference is to start now and rebase later — happy to hear your thoughts. Will open a draft PR once I have the core popup mechanics working~ |
|
Thanks for the enthusiasm! A couple of clarifications on scope: Popup bubbles vs pause UX are orthogonal. This feature is purely about the bubble display mechanics (slide-in, fade-out, replacement logic, toggle). How they interact with pause/buffer state is #129's concern — no need to couple them here. Just expose the message content; the pause integration can come later without touching this code. Whiteboard hints are not part of presentation mode. The hint positioning is internal to the whiteboard component — on TL;DR: keep this focused on the corner popup bubble UI itself. No need to block on #169 or build in pause logic. |
Agreed on the popup bubble scope! 👍 — no whiteboard code, no pause logic. Quick separate note on this PR (#133) though: it currently modifies whiteboard-canvas.tsx to move the zoom hint and reset-view button from bottom corners to top corners during fullscreen (commits 91d264c). If #169 lands first, those elements get removed entirely, so this PR would need a rebase to drop that chunk. Not blocking — just flagging so we're aware. Happy to rebase whenever needed~ |
58f0de5 to
f160c80
Compare
…navigation - Fullscreen via toolbar button or F11; exit via ESC/F11/button - Header auto-hides, sidebars collapse, slide fills viewport - Idle auto-hide (3s): toolbar/avatars fade out, speech bubble stays visible - Smart suspension: idle-hide pauses during typing/recording/voice input - Keyboard navigation: Arrow keys (prev/next), Space (play/pause), ESC (exit) - F11 intercepted to use Fullscreen API (ESC-friendly) instead of browser native - Whiteboard hints reposition from bottom to top corners in fullscreen - i18n: fullscreen/exitFullscreen keys (zh-CN + en-US) Closes THU-MAIC#102
8f5e5a5 to
af2b0e3
Compare
|
Hi @YizukiAme, thanks for this PR — it laid the groundwork for presentation mode and we've since built on top of it. The main branch now includes fullscreen, idle-hide, and keyboard navigation, so this PR has been fully superseded. Closing it out, but your contribution is appreciated and credited in the roadmap. 🙏 |
Thanks for closing this! Yeah, I actually meant to close it myself after #195 was merged — #195 included all the functionality from #133 (plus the popup bubbles and input flow). Forgot to come back and tidy this one up 😅 Appreciate the cleanup~~! |

Summary
Adds a dedicated Presentation Mode for the classroom view, addressing #102. When activated, the slide canvas fills the entire screen with all UI chrome hidden — ideal for projecting lectures to students.
Also partially addresses #115 and #60 — the new fullscreen presentation mode gives the whiteboard and quiz areas significantly more screen real estate, and repositions whiteboard hints so they aren't obscured by the controls overlay.
Features
Fullscreen Presentation
Idle Auto-Hide (3s)
Keyboard Navigation
←Previous slide→Next slideSpacePlay/Pause (not next-slide, matching video-player UX expectations)ESCExit fullscreenF11 Interception
Whiteboard Hint Repositioning
Files Changed
components/stage.tsxcomponents/canvas/canvas-area.tsxisPresentingandonTogglePresentationpropscomponents/canvas/canvas-toolbar.tsxcomponents/roundtable/index.tsxcomponents/whiteboard/whiteboard-canvas.tsxlib/i18n/stage.tsVerification
eslint— passes on all modified filesprettier --check— passes on all modified filestsc --noEmit— no new errors (pre-existing unrelated error inlatex-to-omml.ts)Notes
Closes #102