PR Feedback: h/t Dan & Hunter
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import { useState } from "react";
|
||||
import { useTheme } from "../core/hooks/useTheme.ts";
|
||||
import { cn } from "../core/utils/cn.ts";
|
||||
import { Monitor, Moon, Sun } from "lucide-react";
|
||||
@@ -11,7 +10,6 @@ export default function ThemeSwitcher({
|
||||
className?: string;
|
||||
}) {
|
||||
const { theme, preference, setPreference } = useTheme();
|
||||
const [isFocused, setIsFocused] = useState(false);
|
||||
|
||||
const themeIcons = {
|
||||
light: <Sun className="size-5" />,
|
||||
@@ -26,30 +24,19 @@ export default function ThemeSwitcher({
|
||||
setPreference(nextPreference);
|
||||
};
|
||||
|
||||
const labelStyle = {
|
||||
display: "block",
|
||||
margin: "0 auto",
|
||||
fontSize: ".65rem",
|
||||
width: "100%",
|
||||
position: "absolute",
|
||||
top: isFocused ? "-2em" : "2em",
|
||||
left: "0",
|
||||
opacity: isFocused ? "100" : "0"
|
||||
};
|
||||
const [firstCharOfPreference="", ...restOfPreference] = preference;
|
||||
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
className={cn(
|
||||
"transition-all duration-300 scale-100 cursor-pointer m-6 p-2",
|
||||
"transition-all duration-300 scale-100 cursor-pointer m-6 p-2 focus:*:data-label:opacity-100",
|
||||
className,
|
||||
)}
|
||||
onClick={toggleTheme}
|
||||
onFocus={() => setIsFocused(true)}
|
||||
onBlur={() => setIsFocused(false)}
|
||||
aria-description={'Current theme'}
|
||||
aria-description={'Change current theme'}
|
||||
>
|
||||
<span style={labelStyle}>{preference}</span>
|
||||
<span data-label className="transition-all block absolute w-full mb-auto mt-auto ml-0 mr-0 text-xs left-0 -top-5 opacity-0 rounded-lg">{firstCharOfPreference.toLocaleUpperCase() + restOfPreference.join("")}</span>
|
||||
{themeIcons[preference]}
|
||||
</button>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user