1
1
import { Menu , MenuItem } from 'electron' ;
2
- import { createEffect , createResource , createSignal , Index , Match , onMount , Show , Switch } from 'solid-js' ;
2
+ import { createEffect , createResource , createSignal , Index , Match , onCleanup , onMount , Show , Switch } from 'solid-js' ;
3
3
import { css } from 'solid-styled-components' ;
4
4
import { TransitionGroup } from 'solid-transition-group' ;
5
5
@@ -38,11 +38,16 @@ const titleStyle = cache(() => css`
38
38
user-select : none;
39
39
40
40
transition : opacity 200ms ease 0s ,
41
+ transform 300ms cubic-bezier (0.2 , 0 , 0.6 , 1 ) 0s ,
41
42
background-color 300ms cubic-bezier (0.2 , 0 , 0.6 , 1 ) 0s ;
42
43
43
44
& [data-macos = "true" ] {
44
45
padding : 4px 4px 4px 74px ;
45
46
}
47
+
48
+ ytmusic-app : has (ytmusic-player [player-ui-state = FULLSCREEN ]) ~ & : not ([data-show = "true" ]) {
49
+ transform : translateY (calc (-1 * var (--menu-bar-height , 32px )));
50
+ }
46
51
` ) ;
47
52
48
53
const separatorStyle = cache ( ( ) => css `
@@ -162,6 +167,7 @@ export const TitleBar = (props: TitleBarProps) => {
162
167
const [ ignoreTransition , setIgnoreTransition ] = createSignal ( false ) ;
163
168
const [ openTarget , setOpenTarget ] = createSignal < HTMLElement | null > ( null ) ;
164
169
const [ menu , setMenu ] = createSignal < Menu | null > ( null ) ;
170
+ const [ mouseY , setMouseY ] = createSignal ( 0 ) ;
165
171
166
172
const [ data , { refetch } ] = createResource ( async ( ) => await props . ipc . invoke ( 'get-menu' ) as Promise < Menu | null > ) ;
167
173
const [ isMaximized , { refetch : refetchMaximize } ] = createResource ( async ( ) => await props . ipc . invoke ( 'window-is-maximized' ) as Promise < boolean > ) ;
@@ -224,6 +230,10 @@ export const TitleBar = (props: TitleBarProps) => {
224
230
setMenu ( await refreshMenuItem ( menuData , commandId ) ) ;
225
231
} ;
226
232
233
+ const listener = ( e : MouseEvent ) => {
234
+ setMouseY ( e . clientY ) ;
235
+ } ;
236
+
227
237
onMount ( ( ) => {
228
238
props . ipc . on ( 'close-all-in-app-menu-panel' , async ( ) => {
229
239
setIgnoreTransition ( true ) ;
@@ -257,6 +267,9 @@ export const TitleBar = (props: TitleBarProps) => {
257
267
setOpenTarget ( null ) ;
258
268
}
259
269
} ) ;
270
+
271
+ // tracking mouse position
272
+ window . addEventListener ( 'mousemove' , listener ) ;
260
273
} ) ;
261
274
262
275
createEffect ( ( ) => {
@@ -265,8 +278,12 @@ export const TitleBar = (props: TitleBarProps) => {
265
278
}
266
279
} ) ;
267
280
281
+ onCleanup ( ( ) => {
282
+ window . removeEventListener ( 'mousemove' , listener ) ;
283
+ } ) ;
284
+
268
285
return (
269
- < nav data-ytmd-main-panel = { true } class = { titleStyle ( ) } data-macos = { props . isMacOS } >
286
+ < nav data-ytmd-main-panel = { true } class = { titleStyle ( ) } data-macos = { props . isMacOS } data-show = { mouseY ( ) < 32 } >
270
287
< IconButton
271
288
onClick = { ( ) => setCollapsed ( ! collapsed ( ) ) }
272
289
style = { {
0 commit comments