Add keyboard shortcut to create a new workspace

Cmd+N (Ctrl+N off mac) navigates to the new-workspace route through a
global handler keyed on the active host. The sidebar header row surfaces
the shortcut hint on hover, replacing the redundant "+" button that
duplicated the action in the Workspaces section header.
This commit is contained in:
Mohamed Boudra
2026-06-16 16:13:03 +07:00
parent e77c8e2bf3
commit 88b48c9d09
17 changed files with 106 additions and 39 deletions
@@ -5,6 +5,8 @@ import type { LucideIcon } from "lucide-react-native";
import { HEADER_INNER_HEIGHT, HEADER_INNER_HEIGHT_MOBILE } from "@/constants/layout";
import { ICON_SIZE } from "@/styles/theme";
import type { Theme } from "@/styles/theme";
import { Shortcut } from "@/components/ui/shortcut";
import type { ShortcutKey } from "@/utils/format-shortcut";
const foregroundColorMapping = (theme: Theme) => ({ color: theme.colors.foreground });
const foregroundMutedColorMapping = (theme: Theme) => ({ color: theme.colors.foregroundMuted });
@@ -26,6 +28,7 @@ interface SidebarHeaderRowProps {
* sit in a header group whose wrapper owns the single divider.
*/
variant?: SidebarHeaderRowVariant;
shortcutKeys?: ShortcutKey[][] | null;
}
export function SidebarHeaderRow({
@@ -37,6 +40,7 @@ export function SidebarHeaderRow({
nativeID,
accessibilityLabel,
variant = "header",
shortcutKeys = null,
}: SidebarHeaderRowProps) {
const ThemedIcon = useMemo(() => withUnistyles(Icon), [Icon]);
@@ -63,10 +67,13 @@ export function SidebarHeaderRow({
uniProps={isHighlighted ? foregroundColorMapping : foregroundMutedColorMapping}
/>
<SidebarHeaderRowLabel label={label} isHighlighted={isHighlighted} />
{shortcutKeys && Boolean(state.hovered) ? (
<Shortcut chord={shortcutKeys} style={styles.shortcut} />
) : null}
</>
);
},
[ThemedIcon, isActive, label],
[ThemedIcon, isActive, label, shortcutKeys],
);
return (
@@ -139,4 +146,7 @@ const styles = StyleSheet.create((theme) => ({
labelHighlighted: {
color: theme.colors.foreground,
},
shortcut: {
marginLeft: "auto",
},
}));