Skip to content

Commit 56b8c59

Browse files
committed
feat(visualizer): create theme toggler
Create theme toggler
1 parent 7d145ba commit 56b8c59

File tree

3 files changed

+53
-0
lines changed

3 files changed

+53
-0
lines changed

packages/json-table-schema-visualizer/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"dependencies": {
77
"eventemitter3": "^5.0.1",
88
"konva": "^9.3.6",
9+
"lucide-react": "^0.365.0",
910
"react": "^18.2.0",
1011
"react-dom": "^18.2.0",
1112
"react-konva": "^18.2.10",
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import ThemeToggler from "./ThemeToggler";
2+
3+
import type { Meta, StoryObj } from "@storybook/react";
4+
5+
import { Theme } from "@/types/theme";
6+
7+
const meta: Meta = {
8+
component: ThemeToggler,
9+
title: "components/ThemeToggler",
10+
};
11+
12+
export default meta;
13+
14+
type Story = StoryObj<typeof ThemeToggler>;
15+
16+
export const TableStory: Story = {
17+
render: () => (
18+
<div>
19+
<ThemeToggler />
20+
</div>
21+
),
22+
args: { theme: Theme.dark },
23+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Moon, Sun } from "lucide-react";
2+
3+
import { Theme } from "@/types/theme";
4+
import { useThemeContext } from "@/hooks/theme";
5+
6+
const ThemeToggler = () => {
7+
const { setTheme, theme } = useThemeContext();
8+
9+
const handleThemeToggle = () => {
10+
setTheme(Theme.light === theme ? Theme.dark : Theme.light);
11+
};
12+
13+
return (
14+
<button
15+
onClick={handleThemeToggle}
16+
aria-label="Change theme mode"
17+
title="Change theme mode"
18+
className="w-10 p-2 border rounded-lg shadow-lg dark:border-gray-300 active:scale-95 group hover:bg-gray-100 dark:hover:bg-gray-900 bg-gray-50 dark:bg-black"
19+
>
20+
<div className="cursor-pointer">
21+
<Sun className="text-gray-600 dark:hidden group-hover:text-black dark:text-gray-300 group-hover:dark:text-white" />
22+
23+
<Moon className="hidden text-gray-600 dark:block group-hover:text-black dark:text-gray-300 group-hover:dark:text-white" />
24+
</div>
25+
</button>
26+
);
27+
};
28+
29+
export default ThemeToggler;

0 commit comments

Comments
 (0)