Skip to content

Commit 0958943

Browse files
committed
Makes the shortcut modifier optional
1 parent 277a69f commit 0958943

File tree

1 file changed

+28
-13
lines changed

1 file changed

+28
-13
lines changed

apps/webapp/app/components/primitives/ShortcutKey.tsx

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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";
88
import { cn } from "~/utils/cn";
99
import { 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

1115
const 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

2125
export 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+
2336
type 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
6782
function 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

Comments
 (0)