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 };
