import { useCallback, useMemo } from "react"; import { Text, View } from "react-native"; import { StyleSheet } from "react-native-unistyles"; import { getIsElectronRuntime } from "@/constants/layout"; import { AdaptiveModalSheet } from "@/components/adaptive-modal-sheet"; import { Shortcut } from "@/components/ui/shortcut"; import { useKeyboardShortcutsStore } from "@/stores/keyboard-shortcuts-store"; import { getShortcutOs } from "@/utils/shortcut-platform"; import { buildKeyboardShortcutHelpSections } from "@/keyboard/keyboard-shortcuts"; const SNAP_POINTS: string[] = ["70%", "92%"]; export function KeyboardShortcutsDialog() { const open = useKeyboardShortcutsStore((s) => s.shortcutsDialogOpen); const setOpen = useKeyboardShortcutsStore((s) => s.setShortcutsDialogOpen); const isMac = getShortcutOs() === "mac"; const isDesktopApp = getIsElectronRuntime(); const sections = useMemo( () => buildKeyboardShortcutHelpSections({ isMac, isDesktop: isDesktopApp }), [isDesktopApp, isMac], ); const handleClose = useCallback(() => setOpen(false), [setOpen]); return ( {sections.map((section) => ( {section.title} {section.rows.map((row) => ( {row.label} {row.note ? {row.note} : null} ))} ))} ); } const styles = StyleSheet.create((theme) => ({ content: { gap: theme.spacing[4], }, section: { gap: theme.spacing[2], }, sectionTitle: { fontSize: theme.fontSize.xs, fontWeight: theme.fontWeight.medium, color: theme.colors.foregroundMuted, }, rows: { borderWidth: theme.borderWidth[1], borderColor: theme.colors.surface2, borderRadius: theme.borderRadius.lg, overflow: "hidden", }, row: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", gap: theme.spacing[3], paddingHorizontal: theme.spacing[4], paddingVertical: theme.spacing[3], borderBottomWidth: theme.borderWidth[1], borderBottomColor: theme.colors.surface2, }, rowText: { flex: 1, minWidth: 0, }, rowLabel: { fontSize: theme.fontSize.sm, color: theme.colors.foreground, }, rowNote: { marginTop: 2, fontSize: theme.fontSize.xs, color: theme.colors.foregroundMuted, }, rowShortcut: { alignSelf: "flex-start", }, }));