@@ -4,9 +4,13 @@ import {
44 ChevronRightIcon ,
55 ChevronUpIcon ,
66} from "@heroicons/react/20/solid" ;
7- import { Modifier , ShortcutDefinition } from "~/hooks/useShortcutKeys" ;
7+ import { Modifier , Shortcut } from "~/hooks/useShortcutKeys" ;
88import { cn } from "~/utils/cn" ;
99import { useOperatingSystem } from "./OperatingSystemProvider" ;
10+ import { KeyboardRightIcon } from "~/assets/icons/KeyboardRightIcon" ;
11+ import { KeyboardLeftIcon } from "~/assets/icons/KeyboardLeftIcon" ;
12+ import { KeyboardDownIcon } from "~/assets/icons/KeyboardDownIcon" ;
13+ import { KeyboardUpIcon } from "~/assets/icons/KeyboardUpIcon" ;
1014
1115const medium =
1216 "text-[0.75rem] font-medium min-w-[17px] rounded-[2px] px-1 ml-1 -mr-0.5 flex items-center gap-x-1.5 border border-dimmed/40 text-text-dimmed group-hover:text-text-bright/80 group-hover:border-dimmed/60 transition uppercase" ;
@@ -20,8 +24,17 @@ export const variants = {
2024
2125export type ShortcutKeyVariant = keyof typeof variants ;
2226
27+ type ShortcutKey = Partial < Shortcut > ;
28+
29+ type ShortcutKeyDefinition =
30+ | {
31+ windows : ShortcutKey ;
32+ mac : ShortcutKey ;
33+ }
34+ | ShortcutKey ;
35+
2336type ShortcutKeyProps = {
24- shortcut : ShortcutDefinition ;
37+ shortcut : ShortcutKeyDefinition ;
2538 variant : ShortcutKeyVariant ;
2639 className ?: string ;
2740} ;
@@ -31,14 +44,14 @@ export function ShortcutKey({ shortcut, variant, className }: ShortcutKeyProps)
3144 const isMac = platform === "mac" ;
3245 let relevantShortcut = "mac" in shortcut ? ( isMac ? shortcut . mac : shortcut . windows ) : shortcut ;
3346 const modifiers = relevantShortcut . modifiers ?? [ ] ;
34- const character = keyString ( relevantShortcut . key , isMac , variant ) ;
47+ const character = relevantShortcut . key ? keyString ( relevantShortcut . key , isMac , variant ) : null ;
3548
3649 return (
3750 < span className = { cn ( variants [ variant ] , className ) } >
3851 { modifiers . map ( ( k ) => (
3952 < span key = { k } > { modifierString ( k , isMac ) } </ span >
4053 ) ) }
41- < span > { character } </ span >
54+ { character && < span > { character } </ span > }
4255 </ span >
4356 ) ;
4457}
@@ -51,14 +64,16 @@ function keyString(key: String, isMac: boolean, variant: "small" | "medium" | "m
5164 switch ( key ) {
5265 case "enter" :
5366 return isMac ? "↵" : key ;
67+ case "esc" :
68+ return < span className = "capitalize" > Esc</ span > ;
5469 case "arrowdown" :
55- return < ChevronDownIcon className = { className } /> ;
70+ return < KeyboardDownIcon className = { className } /> ;
5671 case "arrowup" :
57- return < ChevronUpIcon className = { className } /> ;
72+ return < KeyboardUpIcon className = { className } /> ;
5873 case "arrowleft" :
59- return < ChevronLeftIcon className = { className } /> ;
74+ return < KeyboardLeftIcon className = { className } /> ;
6075 case "arrowright" :
61- return < ChevronRightIcon className = { className } /> ;
76+ return < KeyboardRightIcon className = { className } /> ;
6277 default :
6378 return key ;
6479 }
@@ -67,14 +82,14 @@ function keyString(key: String, isMac: boolean, variant: "small" | "medium" | "m
6782function modifierString ( modifier : Modifier , isMac : boolean ) {
6883 switch ( modifier ) {
6984 case "alt" :
70- return isMac ? "⌥" : "Alt+" ;
85+ return isMac ? "⌥" : "Alt +" ;
7186 case "ctrl" :
72- return isMac ? "⌃" : "Ctrl+" ;
87+ return isMac ? "⌃" : "Ctrl +" ;
7388 case "meta" :
74- return isMac ? "⌘" : "⊞+" ;
89+ return isMac ? "⌘" : "⊞ +" ;
7590 case "shift" :
76- return isMac ? "⇧" : "Shift+" ;
91+ return isMac ? "⇧" : "Shift +" ;
7792 case "mod" :
78- return isMac ? "⌘" : "Ctrl+" ;
93+ return isMac ? "⌘" : "Ctrl +" ;
7994 }
8095}
0 commit comments