import { keySymbols, ModifierKeys, modifierSymbols } from '@sd/ui'; import { OperatingSystem } from '../util/Platform'; function capitalize(string: T): Capitalize { return (string.charAt(0).toUpperCase() + string.slice(1)) as Capitalize; } export function keybind( modifers: ModifierKeys[], keys: T[], tauriOs: OperatingSystem ) { if (keys.length === 0) return ''; const os = tauriOs === 'macOS' ? 'macOS' : tauriOs === 'windows' ? 'Windows' : 'Other'; const keySymbol = keys.map(capitalize).map((key) => { const symbol = keySymbols[key]; return symbol ? symbol[os] ?? symbol.Other : key; }); if (os === 'macOS' && !modifers.includes(ModifierKeys.Meta)) { const index = modifers.findIndex((modifier) => modifier === ModifierKeys.Control); if (index !== -1) modifers[index] = ModifierKeys.Meta; } const modifierSymbol = modifers.map((modifier) => { const symbol = modifierSymbols[modifier]; return symbol[os] ?? symbol.Other; }); return [...modifierSymbol, ...keySymbol].join(os === 'macOS' ? '' : '+'); } export function keybindForOs( os: OperatingSystem ): (modifers: ModifierKeys[], keys: string[]) => string { return (modifers: ModifierKeys[], keys: string[]) => keybind(modifers, keys, os); }