diff --git a/src/components/Layout/Settings/Hero/Hero.jsx b/src/components/Layout/Settings/Hero/Hero.jsx index 03ba0b49..7fc13912 100644 --- a/src/components/Layout/Settings/Hero/Hero.jsx +++ b/src/components/Layout/Settings/Hero/Hero.jsx @@ -1,10 +1,11 @@ import variables from 'config/variables'; -import { useState, useEffect } from 'react'; +import { useState, useEffect, useMemo } from 'react'; import EventBus from 'utils/eventbus'; import { Button } from 'components/Elements'; import { MdFlag, MdOutlineVisibilityOff, MdOutlineVisibility } from 'react-icons/md'; import Slider from '../../../Form/Settings/Slider/Slider'; import values from 'utils/data/slider_values.json'; +import { motion, AnimatePresence } from 'framer-motion'; const Preview = (props) => { return ( @@ -19,6 +20,62 @@ const Preview = (props) => { ); }; +const VisibilityToggleButton = ({ setting, onClick }) => { + const iconVariants = { + initial: { opacity: 0, scale: 0.8 }, + animate: { opacity: 1, scale: 1 }, + exit: { opacity: 0, scale: 0.8 }, + }; + + const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; + + return ( + + ); +}; + const Controls = (props) => { const [setting, setSetting] = useState(localStorage.getItem(props.setting) === 'true'); @@ -45,36 +102,45 @@ const Controls = (props) => { EventBus.emit('refresh', props.category); }; - const VisibilityToggle = () => ( - ); }; + const memoizedToggle = useMemo( + () => , + [setting], + ); + return (

Controls

+
+ {props.visibilityToggle && memoizedToggle} + {props.report !== false && } +
-
- {props.visibilityToggle && } - {props.report !== false && } -
{(props.zoomSetting !== null || props.zoomSetting !== '') && (