@@ -310,97 +310,102 @@ export function LaunchWindow() {
310310
311311 return (
312312 < div
313- className = "w-full h-full flex flex-col justify-end items-center bg-transparent"
313+ className = "w-full h-full flex flex-col bg-transparent"
314314 ref = { dropdownRef }
315315 >
316- { activeDropdown !== "none" && (
317- < div className = { `${ styles . dropdown } ${ styles . electronNoDrag } ` } >
318- { activeDropdown === "sources" && (
319- < >
320- { sourcesLoading ? (
321- < div className = "flex items-center justify-center py-6" >
322- < div className = "animate-spin rounded-full h-4 w-4 border-b-2 border-[#6b6b78]" />
323- </ div >
324- ) : (
325- < >
326- { screenSources . length > 0 && (
327- < >
328- < div className = { styles . ddLabel } > Screens</ div >
329- { screenSources . map ( ( source ) => (
330- < DropdownItem
331- key = { source . id }
332- icon = { < Monitor size = { 16 } /> }
333- selected = { selectedSource === source . name }
334- onClick = { ( ) => handleSourceSelect ( source ) }
335- >
336- { source . name }
337- </ DropdownItem >
338- ) ) }
339- </ >
340- ) }
341- { windowSources . length > 0 && (
342- < >
343- < div className = { styles . ddLabel } style = { screenSources . length > 0 ? { marginTop : 4 } : undefined } >
344- Windows
316+ { /* Menu card area — takes remaining space above bar, card sits at bottom of this area */ }
317+ < div className = { styles . menuArea } >
318+ { activeDropdown !== "none" && (
319+ < div className = { `${ styles . menuCard } ${ styles . electronNoDrag } ` } >
320+ { activeDropdown === "sources" && (
321+ < >
322+ { sourcesLoading ? (
323+ < div className = "flex items-center justify-center py-6" >
324+ < div className = "animate-spin rounded-full h-4 w-4 border-b-2 border-[#6b6b78]" />
325+ </ div >
326+ ) : (
327+ < >
328+ { screenSources . length > 0 && (
329+ < >
330+ < div className = { styles . ddLabel } > Screens</ div >
331+ { screenSources . map ( ( source ) => (
332+ < DropdownItem
333+ key = { source . id }
334+ icon = { < Monitor size = { 16 } /> }
335+ selected = { selectedSource === source . name }
336+ onClick = { ( ) => handleSourceSelect ( source ) }
337+ >
338+ { source . name }
339+ </ DropdownItem >
340+ ) ) }
341+ </ >
342+ ) }
343+ { windowSources . length > 0 && (
344+ < >
345+ < div className = { styles . ddLabel } style = { screenSources . length > 0 ? { marginTop : 4 } : undefined } >
346+ Windows
347+ </ div >
348+ { windowSources . map ( ( source ) => (
349+ < DropdownItem
350+ key = { source . id }
351+ icon = { < AppWindow size = { 16 } /> }
352+ selected = { selectedSource === source . name }
353+ onClick = { ( ) => handleSourceSelect ( source ) }
354+ >
355+ { source . appName && source . appName !== source . name
356+ ? `${ source . appName } — ${ source . name } `
357+ : source . name }
358+ </ DropdownItem >
359+ ) ) }
360+ </ >
361+ ) }
362+ { screenSources . length === 0 && windowSources . length === 0 && (
363+ < div className = "text-center text-xs text-[#6b6b78] py-4" >
364+ No sources found
345365 </ div >
346- { windowSources . map ( ( source ) => (
347- < DropdownItem
348- key = { source . id }
349- icon = { < AppWindow size = { 16 } /> }
350- selected = { selectedSource === source . name }
351- onClick = { ( ) => handleSourceSelect ( source ) }
352- >
353- { source . appName && source . appName !== source . name
354- ? `${ source . appName } — ${ source . name } `
355- : source . name }
356- </ DropdownItem >
357- ) ) }
358- </ >
359- ) }
360- { screenSources . length === 0 && windowSources . length === 0 && (
361- < div className = "text-center text-xs text-[#6b6b78] py-4" >
362- No sources found
363- </ div >
364- ) }
365- </ >
366- ) }
367- </ >
368- ) }
369-
370- { activeDropdown === "more" && (
371- < >
372- < DropdownItem
373- icon = { systemAudioEnabled ? < Volume2 size = { 16 } className = "text-[#6360f5]" /> : < VolumeX size = { 16 } /> }
374- onClick = { ( ) => setSystemAudioEnabled ( ! systemAudioEnabled ) }
375- trailing = { systemAudioEnabled ? < span className = "ml-auto text-[#6360f5] text-xs" > ✓</ span > : undefined }
376- >
377- System Audio
378- </ DropdownItem >
379- < DropdownItem icon = { < FolderOpen size = { 16 } /> } onClick = { chooseRecordingsDirectory } >
380- Recordings Folder
381- </ DropdownItem >
382- < DropdownItem icon = { < VideoIcon size = { 16 } /> } onClick = { openVideoFile } >
383- { t ( "recording.openVideoFile" ) }
384- </ DropdownItem >
385- < DropdownItem icon = { < FolderOpen size = { 16 } /> } onClick = { openProjectFile } >
386- { t ( "recording.openProject" ) }
387- </ DropdownItem >
388- < div className = { styles . ddLabel } style = { { marginTop : 4 } } > Language</ div >
389- { SUPPORTED_LOCALES . map ( ( code ) => (
366+ ) }
367+ </ >
368+ ) }
369+ </ >
370+ ) }
371+
372+ { activeDropdown === "more" && (
373+ < >
390374 < DropdownItem
391- key = { code }
392- icon = { < Languages size = { 16 } /> }
393- selected = { locale === code }
394- onClick = { ( ) => { setLocale ( code as AppLocale ) ; setActiveDropdown ( "none" ) ; } }
375+ icon = { systemAudioEnabled ? < Volume2 size = { 16 } className = "text-[#6360f5]" /> : < VolumeX size = { 16 } /> }
376+ onClick = { ( ) => setSystemAudioEnabled ( ! systemAudioEnabled ) }
377+ trailing = { systemAudioEnabled ? < span className = "ml-auto text-[#6360f5] text-xs" > ✓</ span > : undefined }
395378 >
396- { LOCALE_LABELS [ code ] ?? code }
379+ System Audio
397380 </ DropdownItem >
398- ) ) }
399- </ >
400- ) }
401- </ div >
402- ) }
381+ < DropdownItem icon = { < FolderOpen size = { 16 } /> } onClick = { chooseRecordingsDirectory } >
382+ Recordings Folder
383+ </ DropdownItem >
384+ < DropdownItem icon = { < VideoIcon size = { 16 } /> } onClick = { openVideoFile } >
385+ { t ( "recording.openVideoFile" ) }
386+ </ DropdownItem >
387+ < DropdownItem icon = { < FolderOpen size = { 16 } /> } onClick = { openProjectFile } >
388+ { t ( "recording.openProject" ) }
389+ </ DropdownItem >
390+ < div className = { styles . ddLabel } style = { { marginTop : 4 } } > Language</ div >
391+ { SUPPORTED_LOCALES . map ( ( code ) => (
392+ < DropdownItem
393+ key = { code }
394+ icon = { < Languages size = { 16 } /> }
395+ selected = { locale === code }
396+ onClick = { ( ) => { setLocale ( code as AppLocale ) ; setActiveDropdown ( "none" ) ; } }
397+ >
398+ { LOCALE_LABELS [ code ] ?? code }
399+ </ DropdownItem >
400+ ) ) }
401+ </ >
402+ ) }
403+ </ div >
404+ ) }
405+ </ div >
403406
407+ { /* Bottom section — always pinned at bottom */ }
408+ < div className = "flex flex-col items-center" >
404409 { showMicControls && (
405410 < div className = { `flex items-center gap-2 mb-2 rounded-xl border border-white/[0.07] bg-[rgba(18,18,24,0.97)] px-3 py-2 shadow-xl ${ styles . electronNoDrag } ` } >
406411 < select
@@ -504,6 +509,7 @@ export function LaunchWindow() {
504509 </ >
505510 ) }
506511 </ div >
512+ </ div >
507513 </ div >
508514 ) ;
509515}
0 commit comments