1
1
import { Router , A } from "@solidjs/router" ;
2
2
import { FileRoutes } from "@solidjs/start/router" ;
3
- import { Suspense , createSignal , onMount , onCleanup } from "solid-js" ;
3
+ import { Suspense } from "solid-js" ;
4
4
import { clientOnly } from "@solidjs/start" ;
5
5
import { useThemeStore } from "~/stores/theme" ;
6
6
import { useAnimationStore } from "~/stores/animation" ;
7
+ import { useFullscreenStore } from "~/stores/fullscreen" ;
7
8
import { BsFullscreen } from '@aminya/solid-icons/bs/BsFullscreen' ;
8
9
import { BsFullscreenExit } from '@aminya/solid-icons/bs/BsFullscreenExit' ;
9
10
import TopMenu from "~/components/TopMenu" ;
@@ -22,52 +23,15 @@ const ClientAnimationModeToggle = clientOnly(() =>
22
23
) ;
23
24
24
25
export default function App ( ) {
25
- const [ isFullscreen , setIsFullscreen ] = createSignal ( false ) ;
26
- const { isAnimationOn, setIsAnimationOn } = useAnimationStore ( ) ;
27
-
28
- const toggleFullscreen = ( ) => {
29
- const canvas = document . getElementById ( 'background' ) ;
30
- if ( ! canvas ) return ;
31
-
32
- if ( ! document . fullscreenElement ) {
33
- canvas . requestFullscreen ( ) . then ( ( ) => {
34
- setIsFullscreen ( true ) ;
35
- // Ensure animation is on when entering fullscreen
36
- if ( ! isAnimationOn ( ) ) {
37
- setIsAnimationOn ( true ) ;
38
- }
39
- } ) . catch ( err => {
40
- console . error ( `Error attempting to enable fullscreen: ${ err . message } ` ) ;
41
- } ) ;
42
- } else {
43
- document . exitFullscreen ( ) . then ( ( ) => {
44
- setIsFullscreen ( false ) ;
45
- } ) . catch ( err => {
46
- console . error ( `Error attempting to exit fullscreen: ${ err . message } ` ) ;
47
- } ) ;
48
- }
49
- } ;
50
-
51
- // Listen for fullscreen change events
52
- onMount ( ( ) => {
53
- const handleFullscreenChange = ( ) => {
54
- setIsFullscreen ( ! ! document . fullscreenElement ) ;
55
- } ;
56
-
57
- document . addEventListener ( 'fullscreenchange' , handleFullscreenChange ) ;
58
-
59
- onCleanup ( ( ) => {
60
- document . removeEventListener ( 'fullscreenchange' , handleFullscreenChange ) ;
61
- } ) ;
62
- } ) ;
26
+ const { isFullscreen, toggleFullscreen } = useFullscreenStore ( ) ;
63
27
return (
64
28
< >
65
29
{ /* Background. Mounting point for lava animation - only rendered on client */ }
66
30
< ClientLavaBackground />
67
31
68
32
{ /* Fullscreen button - desktop only */ }
69
33
< button
70
- onClick = { toggleFullscreen }
34
+ onClick = { ( ) => toggleFullscreen ( 'background-container' ) }
71
35
class = "fixed top-4 right-4 z-[9999] p-2 text-white/0 hover:text-white/80 transition-opacity hidden md:block cursor-pointer"
72
36
aria-label = { isFullscreen ( ) ? "Exit fullscreen" : "Enter fullscreen and start animation" }
73
37
title = { isFullscreen ( ) ? "Exit fullscreen" : "Enter fullscreen and start animation" }
0 commit comments