import React, { useCallback, useEffect, useRef, useState } from 'react'; import useResize from '@/utils/hooks/useResize'; export function useFullScreen(elRef) { const [isFullScreen, setIsFullScreen] = useState(false); const fullScreenRef = useRef(); fullScreenRef.current = isFullScreen; const toggleFullScreen = useCallback((e) => { if (!document.fullscreenElement) { elRef.current .requestFullscreen() .then(() => { setIsFullScreen(true); }) .catch((err) => { console.log(err.message); }); } }, []); useEffect(() => { const handleFullScreenChange = (e) => { setIsFullScreen(document.fullscreenElement === fullScreenRef.current); }; elRef.current.onfullscreenchange = handleFullScreenChange; // elRef.current.addEventListener('fullscreenchange', handleFullScreenChange); return elRef.current.removeEventListener('fullscreenchange', handleFullScreenChange); }, []); return { isFullScreen, toggleFullScreen }; } export function useParticlesJs(id) { useEffect(() => { window.particlesJS(id, { particles: { number: { value: 20, density: { enable: true, value_area: 400, }, }, color: { value: '#2FB3DF', }, shape: { type: 'circle', stroke: { width: 0, color: '#000000', }, polygon: { nb_sides: 5, }, image: { src: 'img/github.svg', width: 100, height: 100, }, }, opacity: { value: 0.3, random: false, anim: { enable: false, speed: 1, opacity_min: 0.1, sync: false, }, }, size: { value: 3, random: true, anim: { enable: false, speed: 40, size_min: 0.1, sync: false, }, }, line_linked: { enable: true, distance: 150, color: '#2FB3DF', opacity: 0.3, width: 2, }, move: { enable: true, speed: 6, direction: 'none', random: false, straight: false, out_mode: 'out', bounce: false, attract: { enable: false, rotateX: 600, rotateY: 1200, }, }, }, interactivity: { detect_on: 'canvas', events: { onhover: { enable: false, mode: 'bubble', }, onclick: { enable: false, mode: 'push', }, resize: true, }, modes: { grab: { distance: 400, line_linked: { opacity: 1, }, }, bubble: { distance: 400, size: 40, duration: 2, opacity: 8, speed: 3, }, repulse: { distance: 200, duration: 0.4, }, push: { particles_nb: 4, }, remove: { particles_nb: 2, }, }, }, retina_detect: true, }); }, []); }