@waradu/keyboard
Version:
A keyboard manager compatible with JavaScript, TypeScript and Nuxt
155 lines (153 loc) • 5.1 kB
text/typescript
declare const SEPARATOR: "+";
declare const ANYKEY: "$any";
type AnyKey = typeof ANYKEY;
declare const keys: {
readonly backspace: "backspace";
readonly tab: "tab";
readonly enter: "enter";
readonly pause: "pause";
readonly escape: "escape";
readonly " ": "space";
readonly pageup: "page-up";
readonly pagedown: "page-down";
readonly end: "end";
readonly home: "home";
readonly arrowleft: "arrow-left";
readonly arrowup: "arrow-up";
readonly arrowright: "arrow-right";
readonly arrowdown: "arrow-down";
readonly printscreen: "print-screen";
readonly insert: "insert";
readonly delete: "delete";
readonly contextmenu: "context-menu";
readonly "0": "0";
readonly "1": "1";
readonly "2": "2";
readonly "3": "3";
readonly "4": "4";
readonly "5": "5";
readonly "6": "6";
readonly "7": "7";
readonly "8": "8";
readonly "9": "9";
readonly a: "a";
readonly b: "b";
readonly c: "c";
readonly d: "d";
readonly e: "e";
readonly f: "f";
readonly g: "g";
readonly h: "h";
readonly i: "i";
readonly j: "j";
readonly k: "k";
readonly l: "l";
readonly m: "m";
readonly n: "n";
readonly o: "o";
readonly p: "p";
readonly q: "q";
readonly r: "r";
readonly s: "s";
readonly t: "t";
readonly u: "u";
readonly v: "v";
readonly w: "w";
readonly x: "x";
readonly y: "y";
readonly z: "z";
readonly f1: "f1";
readonly f2: "f2";
readonly f3: "f3";
readonly f4: "f4";
readonly f5: "f5";
readonly f6: "f6";
readonly f7: "f7";
readonly f8: "f8";
readonly f9: "f9";
readonly f10: "f10";
readonly f11: "f11";
readonly f12: "f12";
readonly f13: "f13";
readonly f14: "f14";
readonly f15: "f15";
readonly f16: "f16";
readonly f17: "f17";
readonly f18: "f18";
readonly f19: "f19";
readonly f20: "f20";
readonly f21: "f21";
readonly f22: "f22";
readonly f23: "f23";
readonly f24: "f24";
readonly numlock: "num-lock";
readonly scrolllock: "scroll-lock";
readonly audiovolumemute: "audio-volume-mute";
readonly audiovolumedown: "audio-volume-down";
readonly audiovolumeup: "audio-volume-up";
readonly mediatracknext: "media-track-next";
readonly mediatrackprevious: "media-track-previous";
readonly mediaplaypause: "media-play-pause";
readonly mediaplay: "media-play";
readonly mediapause: "media-pause";
readonly mediastop: "media-stop";
readonly "-": "minus";
readonly "=": "equal";
readonly "+": "plus";
readonly ",": "comma";
readonly ".": "period";
readonly "*": "star";
readonly "#": "hash";
readonly "%": "percent";
readonly "&": "ampersand";
readonly "'": "single-quote";
readonly '"': "double-quote";
readonly "/": "slash";
readonly "\\": "backslash";
readonly "<": "angle-brackets-open";
readonly ">": "angle-brackets-close";
readonly "[": "square-brackets-open";
readonly "]": "square-brackets-close";
readonly "{": "curly-brackets-open";
readonly "}": "curly-brackets-close";
readonly "`": "backquote";
readonly "~": "tilde";
readonly $: "dollar";
readonly "?": "question-mark";
readonly "!": "exclamation-mark";
readonly dynNum: "$num";
};
declare const modifiers: {
readonly meta: "meta";
readonly ctrl: "ctrl";
readonly ctrlCmd: "ctrlCmd";
readonly alt: "alt";
readonly shift: "shift";
};
declare const platforms: {
readonly macos: "macos";
readonly windows: "win";
readonly linux: "linux";
readonly no_macos: "no-macos";
readonly no_windows: "no-win";
readonly no_linux: "no-linux";
};
type ModifierKey = keyof typeof modifiers;
type KeyKey = keyof typeof keys;
type PlatformKey = keyof typeof platforms;
type ModifierValue = (typeof modifiers)[ModifierKey];
type KeyValue = (typeof keys)[KeyKey];
type PlatformValue = (typeof platforms)[PlatformKey];
type FixedCombinations<T extends readonly string[], Acc extends string[] = []> = T extends [
infer F extends string,
...infer R extends string[]
] ? FixedCombinations<R, Acc> | FixedCombinations<R, [...Acc, F]> : Acc;
type PhysicalPrefixTuples = Exclude<FixedCombinations<["meta", "ctrl", "alt", "shift"]>, []>;
type CtrlCmdPrefixTuples = Exclude<FixedCombinations<["ctrl-cmd", "alt", "shift"]>, []>;
type PrefixTuples = PhysicalPrefixTuples | CtrlCmdPrefixTuples;
type Join<T extends readonly string[]> = T extends [] ? "" : T extends [infer F extends string] ? F : T extends [infer F extends string, ...infer R extends readonly string[]] ? `${F}${typeof SEPARATOR}${Join<R>}` : string;
type WithModifier = `${Join<PrefixTuples>}${typeof SEPARATOR}${KeyValue}`;
type KeySequence = KeyValue | WithModifier;
type KeyString = KeySequence | `${PlatformValue}:${KeySequence}` | AnyKey;
export { ANYKEY, SEPARATOR, keys, modifiers, platforms };
export type { AnyKey, KeyKey, KeySequence, KeyString, KeyValue, ModifierKey, ModifierValue, PlatformKey, PlatformValue };