Files
react-test/docs/data/material/getting-started/templates/crud-dashboard/components/ThemeSwitcher.tsx
how2ice 005cf56baf
Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
init project
2025-12-12 14:26:25 +09:00

59 lines
1.7 KiB
TypeScript

import * as React from 'react';
import { useTheme, useColorScheme } from '@mui/material/styles';
import useMediaQuery from '@mui/material/useMediaQuery';
import IconButton from '@mui/material/IconButton';
import Tooltip from '@mui/material/Tooltip';
import DarkModeIcon from '@mui/icons-material/DarkMode';
import LightModeIcon from '@mui/icons-material/LightMode';
export default function ThemeSwitcher() {
const theme = useTheme();
const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
const preferredMode = prefersDarkMode ? 'dark' : 'light';
const { mode, setMode } = useColorScheme();
const paletteMode = !mode || mode === 'system' ? preferredMode : mode;
const toggleMode = React.useCallback(() => {
setMode(paletteMode === 'dark' ? 'light' : 'dark');
}, [setMode, paletteMode]);
return (
<Tooltip
title={`${paletteMode === 'dark' ? 'Light' : 'Dark'} mode`}
enterDelay={1000}
>
<div>
<IconButton
size="small"
aria-label={`Switch to ${paletteMode === 'dark' ? 'light' : 'dark'} mode`}
onClick={toggleMode}
>
{theme.getColorSchemeSelector ? (
<React.Fragment>
<LightModeIcon
sx={{
display: 'inline',
[theme.getColorSchemeSelector('dark')]: {
display: 'none',
},
}}
/>
<DarkModeIcon
sx={{
display: 'none',
[theme.getColorSchemeSelector('dark')]: {
display: 'inline',
},
}}
/>
</React.Fragment>
) : null}
</IconButton>
</div>
</Tooltip>
);
}