export interface KeyStroke { modifier: number; keys: number[]; } export interface KeyInfo { key: string | number; shift?: boolean, altRight?: boolean } export interface KeyCombo extends KeyInfo { deadKey?: boolean, accentKey?: KeyInfo } export interface KeyboardLayout { isoCode: string, name: string, chars: Record } // to add a new layout, create a file like the above and add it to the list import { cs_CZ } from "@/keyboardLayouts/cs_CZ" import { de_CH } from "@/keyboardLayouts/de_CH" import { de_DE } from "@/keyboardLayouts/de_DE" import { en_US } from "@/keyboardLayouts/en_US" import { en_UK } from "@/keyboardLayouts/en_UK" import { es_ES } from "@/keyboardLayouts/es_ES" import { fr_BE } from "@/keyboardLayouts/fr_BE" import { fr_CH } from "@/keyboardLayouts/fr_CH" import { fr_FR } from "@/keyboardLayouts/fr_FR" import { it_IT } from "@/keyboardLayouts/it_IT" import { nb_NO } from "@/keyboardLayouts/nb_NO" import { sv_SE } from "@/keyboardLayouts/sv_SE" export const keyboards: KeyboardLayout[] = [ cs_CZ, de_CH, de_DE, en_UK, en_US, es_ES, fr_BE, fr_CH, fr_FR, it_IT, nb_NO, sv_SE ]; export const selectedKeyboard = (isoCode: string): KeyboardLayout => { // fallback to original behaviour of en-US if no isoCode given return keyboards.find(keyboard => keyboard.isoCode == isoCode) ?? keyboards.find(keyboard => keyboard.isoCode == "en-US")!; }; export const keyboardOptions = () => { return keyboards.map((keyboard) => { return { label: keyboard.name, value: keyboard.isoCode } }); }