Skip to content

Commit 522c976

Browse files
authored
Merge branch 'json-schema-org:main' into table-mobile-design
2 parents c532c3e + 6d33bec commit 522c976

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1057
-368
lines changed

components/DarkModeToggle.tsx

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useTheme } from 'next-themes';
2-
import { useEffect, useState } from 'react';
2+
import { useEffect, useRef, useState } from 'react';
33
import React from 'react';
44
import Image from 'next/image';
55

@@ -35,6 +35,7 @@ export default function DarkModeToggle() {
3535
const [activeThemeIcon, setActiveThemeIcon] = useState(
3636
'/icons/theme-switch.svg',
3737
);
38+
3839
useEffect(() => {
3940
switch (theme) {
4041
case 'system':
@@ -46,8 +47,30 @@ export default function DarkModeToggle() {
4647
}
4748
}, [theme, resolvedTheme]);
4849

50+
const dropdownRef = useRef<HTMLDivElement>(null);
51+
52+
useEffect(() => {
53+
const handleClickOutside = (event: MouseEvent) => {
54+
if (
55+
dropdownRef.current &&
56+
!dropdownRef.current.contains(event.target as Node)
57+
) {
58+
setShowSelect(false);
59+
}
60+
};
61+
62+
document.addEventListener('mousedown', handleClickOutside);
63+
64+
return () => {
65+
document.removeEventListener('mousedown', handleClickOutside);
66+
};
67+
}, []);
68+
4969
return (
50-
<div className='relative w-10 h-10 dark-mode-toggle-container'>
70+
<div
71+
ref={dropdownRef}
72+
className='relative w-10 h-10 dark-mode-toggle-container'
73+
>
5174
<button
5275
onClick={() => setShowSelect(!showSelect)}
5376
className='dark-mode-toggle rounded-md dark:hover:bg-gray-700 p-1.5 hover:bg-gray-100 transition duration-150 '
@@ -66,11 +89,10 @@ export default function DarkModeToggle() {
6689
/>
6790
</button>
6891
<div
69-
className='absolute right-0 p-2 bg-white dark:bg-gray-800 rounded-lg border dark:border-gray-700 z-10 w-max'
70-
style={{ display: showSelect ? 'block' : 'none' }}
71-
onMouseLeave={() => {
72-
setShowSelect(false);
73-
}}
92+
onMouseLeave={() => setShowSelect(false)}
93+
className={`absolute right-0 p-2 bg-white dark:bg-gray-800 rounded-lg border dark:border-gray-700 z-10 w-max ${
94+
showSelect ? 'block' : 'hidden'
95+
}`}
7496
tabIndex={0}
7597
data-test='theme-dropdown'
7698
>
@@ -93,7 +115,7 @@ export default function DarkModeToggle() {
93115
>
94116
<Image
95117
src={'/icons/sun.svg'}
96-
alt='System theme'
118+
alt='Light theme'
97119
width={18}
98120
height={18}
99121
style={{ filter: isDarkMode ? 'invert(1)' : 'invert(0)' }}
@@ -106,7 +128,7 @@ export default function DarkModeToggle() {
106128
>
107129
<Image
108130
src={'/icons/moon.svg'}
109-
alt='System theme'
131+
alt='Dark theme'
110132
width={18}
111133
height={18}
112134
style={{ filter: isDarkMode ? 'invert(1)' : 'invert(0)' }}

0 commit comments

Comments
 (0)