@@ -12,6 +12,7 @@ import ResourceStatusIsland from '../components/Widgets/ResourceStatusIsland/ind
1212import { electron } from ' ../../shared/electron'
1313import {
1414 useElectronEventaInvoke ,
15+ useElectronMouseAroundWindowBorder ,
1516 useElectronMouseInElement ,
1617 useElectronMouseInWindow ,
1718 useElectronRelativeMouse ,
@@ -34,6 +35,8 @@ const { isOutside } = useElectronMouseInElement(controlsIslandRef)
3435const isOutsideFor250Ms = debouncedRef (isOutside , 250 )
3536const { x : relativeMouseX, y : relativeMouseY } = useElectronRelativeMouse ()
3637const isTransparent = useCanvasPixelIsTransparentAtPoint (stageCanvas , relativeMouseX , relativeMouseY )
38+ const { isNearAnyBorder : isAroundWindowBorder } = useElectronMouseAroundWindowBorder ({ threshold: 30 })
39+ const isAroundWindowBorderFor250Ms = debouncedRef (isAroundWindowBorder , 250 )
3740
3841const setIgnoreMouseEvents = useElectronEventaInvoke (electron .window .setIgnoreMouseEvents )
3942
@@ -46,19 +49,23 @@ const { pause, resume } = watchPausable(isTransparent, (transparent) => {
4649 shouldFadeOnCursorWithin .value = ! transparent
4750}, { immediate: true })
4851
49- watch ([isOutsideFor250Ms , isOutsideWindow ], () => {
50- if (! isOutsideFor250Ms .value ) {
52+ watch ([isOutsideFor250Ms , isAroundWindowBorderFor250Ms , isOutsideWindow , isTransparent ], () => {
53+ const insideControls = ! isOutsideFor250Ms .value
54+ const nearBorder = isAroundWindowBorderFor250Ms .value
55+
56+ if (insideControls || nearBorder ) {
57+ // Inside interactive controls or near resize border: do NOT ignore events
5158 isIgnoringMouseEvents .value = false
5259 shouldFadeOnCursorWithin .value = false
5360 setIgnoreMouseEvents ([false , { forward: true }])
5461 pause ()
5562 }
5663 else {
64+ // Otherwise allow click-through while we fade UI based on transparency
5765 isIgnoringMouseEvents .value = true
5866 if (! isOutsideWindow .value && ! isTransparent .value ) {
5967 shouldFadeOnCursorWithin .value = true
6068 }
61-
6269 setIgnoreMouseEvents ([true , { forward: true }])
6370 resume ()
6471 }
@@ -85,6 +92,8 @@ watch([isOutsideFor250Ms, isOutsideWindow], () => {
8592 shouldFadeOnCursorWithin ? 'op-0' : 'op-100',
8693 'absolute',
8794 'top-0 left-0 w-full h-full',
95+ 'overflow-hidden',
96+ 'rounded-2xl',
8897 'transition-opacity duration-250 ease-in-out',
8998 ]"
9099 >
@@ -161,11 +170,13 @@ watch([isOutsideFor250Ms, isOutsideWindow], () => {
161170 leave-from-class =" opacity-100"
162171 leave-to-class =" opacity-50"
163172 >
164- <div
165- v-if =" false"
166- class =" absolute left-0 top-0 z-999 h-full w-full"
167- >
168- <div h-full w-full animate-flash animate-duration-2.5s animate-count-infinite b-4 b-primary rounded-2xl />
173+ <div v-if =" isAroundWindowBorderFor250Ms && !isLoading" class =" pointer-events-none absolute left-0 top-0 z-999 h-full w-full" >
174+ <div
175+ :class =" [
176+ 'b-primary/50',
177+ 'h-full w-full animate-flash animate-duration-3s animate-count-infinite b-4 rounded-2xl',
178+ ]"
179+ />
169180 </div >
170181 </Transition >
171182</template >
0 commit comments