feat: color scheme toggle

This commit is contained in:
2025-08-09 17:41:37 +04:00
parent 067094c78a
commit 45dc8901fd
3 changed files with 64 additions and 22 deletions

View File

@ -6,6 +6,7 @@ import { Box, Group, Text } from "@mantine/core";
import { useBoardsContext } from "@/app/deals/contexts/BoardsContext"; import { useBoardsContext } from "@/app/deals/contexts/BoardsContext";
import { useProjectsContext } from "@/app/deals/contexts/ProjectsContext"; import { useProjectsContext } from "@/app/deals/contexts/ProjectsContext";
import ProjectSelect from "@/components/selects/ProjectSelect/ProjectSelect"; import ProjectSelect from "@/components/selects/ProjectSelect/ProjectSelect";
import { ColorSchemeToggle } from "@/components/ui/ColorSchemeToggle/ColorSchemeToggle";
const Header = () => { const Header = () => {
const { projects, setSelectedProject, selectedProject } = const { projects, setSelectedProject, selectedProject } =
@ -14,11 +15,14 @@ const Header = () => {
const getDesktopHeader = () => { const getDesktopHeader = () => {
return ( return (
<>
<ColorSchemeToggle />
<ProjectSelect <ProjectSelect
data={projects} data={projects}
value={selectedProject} value={selectedProject}
onChange={value => value && setSelectedProject(value)} onChange={value => value && setSelectedProject(value)}
/> />
</>
); );
}; };

View File

@ -0,0 +1,26 @@
.container {
@mixin dark {
background-color: var(--mantine-color-dark-7);
}
}
.icon {
width: rem(18px);
height: rem(18px);
}
.light {
display: block;
}
.dark {
display: none;
}
:global([data-mantine-color-scheme='dark']) .light {
display: none;
}
:global([data-mantine-color-scheme='dark']) .dark {
display: block;
}

View File

@ -1,28 +1,40 @@
"use client"; "use client";
import { Button, Group, useMantineColorScheme } from "@mantine/core"; import { IconMoon, IconSun } from "@tabler/icons-react";
import { modals } from "@mantine/modals"; import classNames from "classnames";
import {
ActionIcon,
useComputedColorScheme,
useMantineColorScheme,
} from "@mantine/core";
import style from "./ColorSchemeToggle.module.css";
export function ColorSchemeToggle() { export function ColorSchemeToggle() {
const { setColorScheme } = useMantineColorScheme(); const { setColorScheme } = useMantineColorScheme();
const computedColorScheme = useComputedColorScheme(undefined, {
const openTestModal = () => { getInitialValueInEffect: true,
modals.openContextModal({
modal: "testModal",
title: "Тест",
withCloseButton: false,
innerProps: {},
}); });
const toggleColorScheme = () => {
setColorScheme(computedColorScheme === "light" ? "dark" : "light");
}; };
return ( return (
<Group <ActionIcon
justify="center" onClick={toggleColorScheme}
mt="xl"> variant="default"
<Button onClick={() => setColorScheme("light")}>Light</Button> size="xl"
<Button onClick={() => setColorScheme("dark")}>Dark</Button> radius="lg"
<Button onClick={() => setColorScheme("auto")}>Auto</Button> aria-label="Toggle color scheme"
<Button onClick={() => openTestModal()}>Modal</Button> className={style.container}>
</Group> <IconSun
className={classNames(style.icon, style.light)}
stroke={1.5}
/>
<IconMoon
className={classNames(style.icon, style.dark)}
stroke={1.5}
/>
</ActionIcon>
); );
} }