55 noiseCancellationEnabled ,
66 cameraEnabled as prefCameraEnabled ,
77 micEnabled as prefMicEnabled ,
8+ pushToTalkEnabled ,
89 selectedCameraId ,
910 selectedMicId ,
1011 selectedSpeakerId ,
@@ -62,6 +63,7 @@ export function useMeetingLogic(meetingState, meetingId, options = {}) {
6263 const realtimeListenersSetup = ref ( false ) ;
6364 const activeSpeakerTimeout = ref ( null ) ;
6465 const joiningInProgress = ref ( false ) ;
66+ const unmutedByPushToTalk = ref ( false ) ;
6567
6668 // Background effects
6769 const { applyBackgroundEffects, stopProcessing, processedStream } =
@@ -2119,6 +2121,25 @@ export function useMeetingLogic(meetingState, meetingId, options = {}) {
21192121 * Handle keyboard shortcuts
21202122 */
21212123 const handleKeyDown = ( event ) => {
2124+ const targetTag = event . target ?. tagName ?. toLowerCase ( ) ;
2125+ const isInput =
2126+ targetTag === "input" ||
2127+ targetTag === "textarea" ||
2128+ event . target ?. isContentEditable ;
2129+
2130+ if (
2131+ pushToTalkEnabled . value &&
2132+ event . code === "Space" &&
2133+ ! isInput &&
2134+ ! event . repeat
2135+ ) {
2136+ event . preventDefault ( ) ;
2137+ if ( ! meetingState . isMicOn . value ) {
2138+ unmutedByPushToTalk . value = true ;
2139+ toggleMicrophone ( ) ;
2140+ }
2141+ }
2142+
21222143 if ( ( event . metaKey || event . ctrlKey ) && event . key === "d" ) {
21232144 event . preventDefault ( ) ;
21242145 toggleMicrophone ( ) ;
@@ -2129,6 +2150,23 @@ export function useMeetingLogic(meetingState, meetingId, options = {}) {
21292150 }
21302151 } ;
21312152
2153+ const handleKeyUp = ( event ) => {
2154+ const targetTag = event . target ?. tagName ?. toLowerCase ( ) ;
2155+ const isInput =
2156+ targetTag === "input" ||
2157+ targetTag === "textarea" ||
2158+ event . target ?. isContentEditable ;
2159+
2160+ if ( pushToTalkEnabled . value && event . code === "Space" && ! isInput ) {
2161+ if ( unmutedByPushToTalk . value ) {
2162+ unmutedByPushToTalk . value = false ;
2163+ if ( meetingState . isMicOn . value ) {
2164+ toggleMicrophone ( ) ;
2165+ }
2166+ }
2167+ }
2168+ } ;
2169+
21322170 // ==================== NOTIFICATION CONTEXT WATCHERS ====================
21332171
21342172 // Watch chat state to update notification context
@@ -2286,5 +2324,6 @@ export function useMeetingLogic(meetingState, meetingId, options = {}) {
22862324
22872325 // Methods - Keyboard
22882326 handleKeyDown,
2327+ handleKeyUp,
22892328 } ;
22902329}
0 commit comments