import * as React from "react"; import { useKeyPress } from "@/hooks/useKeyPress"; import { cn } from "@/lib/utils"; const processSpecial = (char: string) => { if (char === "cmd" || char === "meta") return "⌘"; if (char === "shift") return "⇧"; if (char === "alt") return "⌥"; if (char === "ctrl") return "⌃"; return char.toUpperCase(); }; const KbdSegment = React.forwardRef< HTMLSpanElement, React.HTMLAttributes & { char: string } >(({ char, className, ...props }, ref) => { const isPressed = useKeyPress(char); char = processSpecial(char); return ( {char!} ); }); KbdSegment.displayName = "KbdSegment"; const KbdKey = React.forwardRef< HTMLDivElement, React.HTMLAttributes & { keys: string[]; plus?: boolean; } >(({ keys, className, plus = true, ...props }, ref) => { // Track all key presses const keyStates = keys.map((key) => useKeyPress(key)); // Check if all keys are pressed const allKeysPressed = keyStates.every((state) => state === true); return (
{keys.map((key, i) => ( <> {processSpecial(key)} {plus && i !== keys.length - 1 && +} ))}
); }); KbdKey.displayName = "KbdKey"; export { KbdKey };