diff --git a/rsconcept/frontend/src/app/Navigation/ToggleNavigation.tsx b/rsconcept/frontend/src/app/Navigation/ToggleNavigation.tsx index 3f22354d..5a696366 100644 --- a/rsconcept/frontend/src/app/Navigation/ToggleNavigation.tsx +++ b/rsconcept/frontend/src/app/Navigation/ToggleNavigation.tsx @@ -1,35 +1,53 @@ import clsx from 'clsx'; -import { IconPin, IconUnpin } from '@/components/Icons'; +import { IconDarkTheme, IconLightTheme, IconPin, IconUnpin } from '@/components/Icons'; import { useConceptOptions } from '@/context/ConceptOptionsContext'; import { globals, PARAMETER } from '@/utils/constants'; function ToggleNavigation() { - const { noNavigationAnimation, toggleNoNavigation } = useConceptOptions(); + const { noNavigationAnimation, noNavigation, toggleNoNavigation, toggleDarkMode, darkMode } = useConceptOptions(); + const iconSize = !noNavigationAnimation ? '0.75rem' : '1rem'; return ( - + {!noNavigationAnimation ? ( + + ) : null} + + ); } diff --git a/rsconcept/frontend/src/context/ConceptOptionsContext.tsx b/rsconcept/frontend/src/context/ConceptOptionsContext.tsx index 118337e5..ffdd8416 100644 --- a/rsconcept/frontend/src/context/ConceptOptionsContext.tsx +++ b/rsconcept/frontend/src/context/ConceptOptionsContext.tsx @@ -1,6 +1,7 @@ 'use client'; import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'; +import { flushSync } from 'react-dom'; import Tooltip from '@/components/ui/Tooltip'; import useLocalStorage from '@/hooks/useLocalStorage'; @@ -99,7 +100,15 @@ export const OptionsState = ({ children }: React.PropsWithChildren) => { ); const toggleDarkMode = useCallback(() => { - setDarkMode(prev => !prev); + if (!document.startViewTransition || window.matchMedia('(prefers-reduced-motion: reduce)').matches) { + setDarkMode(prev => !prev); + } else { + document.startViewTransition(() => { + flushSync(() => { + setDarkMode(prev => !prev); + }); + }); + } }, [setDarkMode]); const mainHeight = useMemo(() => {