{"version":3,"file":"ng-hotkeys.mjs","sources":["../../../projects/ng-hotkeys/src/lib/utils.ts","../../../projects/ng-hotkeys/src/lib/keys.ts","../../../projects/ng-hotkeys/src/lib/ng-hotkeys.service.ts","../../../projects/ng-hotkeys/src/lib/ng-hotkeys.component.ts","../../../projects/ng-hotkeys/src/lib/ng-hotkeys-help.service.ts","../../../projects/ng-hotkeys/src/lib/ng-hotkeys-select.service.ts","../../../projects/ng-hotkeys/src/lib/ng-hotkeys.interfaces.ts","../../../projects/ng-hotkeys/src/lib/ng-hotkeys.directive.ts","../../../projects/ng-hotkeys/src/lib/portal.ts","../../../projects/ng-hotkeys/src/lib/dom-portal-outlet.ts","../../../projects/ng-hotkeys/src/lib/ng-hotkeys-help-item.component.html","../../../projects/ng-hotkeys/src/lib/ng-hotkeys-help-item.component.ts","../../../projects/ng-hotkeys/src/lib/ng-hotkeys-help.component.html","../../../projects/ng-hotkeys/src/lib/ng-hotkeys-help.component.ts","../../../projects/ng-hotkeys/src/lib/ng-hotkeys.module.ts","../../../projects/ng-hotkeys/src/lib/polyfills.ts","../../../projects/ng-hotkeys/src/public_api.ts","../../../projects/ng-hotkeys/src/ng-hotkeys.ts"],"sourcesContent":["export function isFunction(x: any): x is Function {\n    return typeof x === \"function\";\n}\n\nexport const invert = obj => {\n    const new_obj = {};\n\n    for (const prop in obj) {\n        if (obj.hasOwnProperty(prop)) {\n            new_obj[obj[prop]] = prop;\n        }\n    }\n    return new_obj;\n};\n\nexport const any = (fn: Function, list: any[]) => {\n    let idx = 0;\n    while (idx < list.length) {\n        if (fn(list[idx])) {\n            return true;\n        }\n        idx += 1;\n    }\n    return false;\n};\n\nexport const identity = x => x;\n\n/**\n * @ignore\n * @param x\n * @returns boolean\n */\nexport const isNill = x => x == null;\n\n/**\n * @ignore\n * @param xs\n * @param key\n * @returns any\n */\nexport const groupBy = (xs, key) =>\n    xs.reduce(\n        (result, x) => ({\n            ...result,\n            [x[key]]: [...(result[x[key]] || []), x]\n        }),\n        {}\n    );\n\n/**\n * @ignore\n * @param first\n * @param second\n * @returns any[]\n */\nexport const difference = (first: any[], second: any[]) =>\n    first.filter(item => !second.includes(item));\n\n/**\n * @ignore\n * @param preds\n * @returns (...args) => boolean;\n */\nexport const allPass = preds => (...args) => {\n    let idx = 0;\n    const len = preds.length;\n    while (idx < len) {\n        if (!preds[idx].apply(this, args)) {\n            return false;\n        }\n        idx += 1;\n    }\n    return true;\n};\nexport const prop = prop => object => object[prop];\n\nconst minMaxArrayProp = type => (property, array) =>\n    Math[type].apply(Math, array.map(prop(property)));\n\nexport const maxArrayProp = (property, array) => {\n    return array.reduce(\n        (acc, curr) => {\n            const propFn = prop(property);\n            const currentValue = propFn(curr);\n            const previousValue = propFn(acc);\n            return currentValue > previousValue ? curr : acc;\n        },\n        { [property]: 0 }\n    );\n};\n","import { invert } from './utils';\n\nconst isMac = typeof navigator !== \"undefined\" ? navigator.userAgent.includes(\"Mac OS\") : false;\n\nexport const modifiers = {\n    shift: \"shiftKey\",\n    ctrl: \"ctrlKey\",\n    alt: \"altKey\",\n    cmd: isMac ? \"metaKey\" : \"ctrlKey\",\n    command: isMac ? \"metaKey\" : \"ctrlKey\",\n    meta: isMac ? \"metaKey\" : \"ctrlKey\",\n    \"left command\": \"metaKey\",\n    \"right command\": \"MetaRight\",\n    \"⌘\": isMac ? \"metaKey\" : \"ctrlKey\",\n    option: \"altKey\",\n    ctl: \"ctrlKey\",\n    control: \"ctrlKey\"\n};\nexport const _SPECIAL_CASES = {\n    plus: \"+\"\n};\n\nexport const symbols = {\n    cmd: isMac ? \"⌘\" : \"Ctrl\",\n    command: isMac ? \"⌘\" : \"Ctrl\",\n    \"left command\": isMac ? \"⌘\" : \"Ctrl\",\n    \"right command\": isMac ? \"⌘\" : \"Ctrl\",\n    option: isMac ? \"⌥\" : \"Alt\",\n    plus: \"+\",\n    left: \"←\",\n    right: \"→\",\n    up: \"↑\",\n    down: \"↓\",\n    alt: isMac ? \"⌥\" : \"Alt\",\n    ctrl: \"Ctrl\",\n    control: \"Ctrl\",\n    shift: \"⇧\"\n};\n\nexport const _MAP = {\n    8: \"backspace\",\n    9: \"tab\",\n    13: \"enter\",\n    16: \"shift\",\n    17: [\"ctrl\", \"control\"],\n    18: \"alt\",\n    20: \"capslock\",\n    27: [\"esc\", \"escape\"],\n    32: [\"space\", \"spc\"],\n    33: \"pageup\",\n    34: \"pagedown\",\n    35: \"end\",\n    36: \"home\",\n    37: \"left\",\n    38: \"up\",\n    39: \"right\",\n    40: \"down\",\n    45: \"ins\",\n    46: \"del\",\n    91: [\"meta\", \"cmd\", \"command\"],\n    93: [\"meta\", \"cmd\", \"command\"],\n    224: [\"meta\", \"cmd\", \"command\"]\n};\n\n/*\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n */\nexport const _KEYCODE_MAP = {\n    106: \"*\",\n    107: \"+\",\n    109: \"-\",\n    110: \".\",\n    111: \"/\",\n    186: \";\",\n    187: \"=\",\n    188: \",\",\n    189: \"-\",\n    190: \".\",\n    191: \"/\",\n    192: \"`\",\n    219: \"[\",\n    220: \"\\\\\",\n    221: \"]\",\n    222: \"'\"\n};\n\n/**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n */\nexport const _SHIFT_MAP = {\n    \"`\": \"~\",\n    \"1\": \"!\",\n    \"2\": \"@\",\n    \"3\": \"#\",\n    \"4\": \"$\",\n    \"5\": \"%\",\n    \"6\": \"^\",\n    \"7\": \"&\",\n    \"8\": \"*\",\n    \"9\": \"(\",\n    \"0\": \")\",\n    \"-\": \"_\",\n    \"=\": \"+\",\n    \";\": \":\",\n    \"'\": '\"',\n    \",\": \"<\",\n    \".\": \">\",\n    \"/\": \"?\",\n    \"\\\\\": \"|\"\n};\nexport const _INVERTED_SHIFT_MAP = invert(_SHIFT_MAP);\n\n/**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\nfor (let i = 1; i < 20; ++i) {\n    _MAP[111 + i] = \"f\" + i;\n}\n\n/**\n * loop through to map numbers on the numeric keypad\n */\nfor (let i = 0; i <= 9; ++i) {\n    // This needs to use a string cause otherwise since 0 is falsey\n    // event will never fire for numpad 0 pressed as part of a keydown\n    // event.\n    _MAP[i + 96] = i.toString();\n}\n","import { Inject, Injectable, OnDestroy } from \"@angular/core\";\nimport {\n    _INVERTED_SHIFT_MAP,\n    _KEYCODE_MAP,\n    _MAP,\n    _SHIFT_MAP,\n    _SPECIAL_CASES,\n    modifiers\n} from \"./keys\";\nimport {\n    BehaviorSubject,\n    fromEvent,\n    Observable,\n    Subject,\n    Subscription,\n    throwError,\n    timer,\n    of\n} from \"rxjs\";\nimport {\n    ParsedShortcut,\n    ShortcutEventOutput,\n    ShortcutInput\n} from \"./ng-hotkeys.interfaces\";\nimport {\n    catchError,\n    filter,\n    first,\n    map,\n    repeat,\n    scan,\n    switchMap,\n    takeUntil,\n    tap,\n    throttle\n} from \"rxjs/operators\";\nimport { allPass, any, difference, identity, isFunction, isNill, maxArrayProp } from \"./utils\";\nimport { DOCUMENT } from \"@angular/common\";\n\n/**\n * @ignore\n * @type {number}\n */\nlet guid = 0;\n\n@Injectable({\n    providedIn: \"root\"\n})\nexport class NgHotkeysService implements OnDestroy {\n    /**\n     * Parsed shortcuts\n     * for each key create a predicate function\n     */\n    private _shortcuts: ParsedShortcut[] = [];\n\n    private _sequences: ParsedShortcut[] = [];\n\n    /**\n     * Throttle the keypress event.\n     */\n    private throttleTime = 0;\n\n    private _pressed = new Subject<ShortcutEventOutput>();\n\n    /**\n     * Streams of pressed events, can be used instead or with a command.\n     */\n    public pressed$ = this._pressed.asObservable();\n\n    /**\n     * Disable all keyboard shortcuts\n     */\n    private disabled = false;\n    /**\n     * @ignore\n     * 2000 ms window to allow between key sequences otherwise\n     * the sequence will reset.\n     */\n    private static readonly TIMEOUT_SEQUENCE = 1000;\n\n    private _shortcutsSub = new BehaviorSubject<ParsedShortcut[]>([]);\n    public shortcuts$ = this._shortcutsSub\n        .asObservable()\n        .pipe(filter(shortcuts => !!shortcuts.length));\n\n    private _ignored = [\"INPUT\", \"TEXTAREA\", \"SELECT\"];\n\n    /**\n     * @ignore\n     * Subscription for on destroy.\n     */\n    private readonly subscriptions: Subscription[] = [];\n\n    /**\n     * @ignore\n     * @param shortcut\n     */\n    private isAllowed = (shortcut: ParsedShortcut) => {\n        const target = shortcut.event.target as HTMLElement;\n        if (target === shortcut.target) {\n            return true;\n        }\n        if (shortcut.allowIn.length) {\n            return !difference(this._ignored, shortcut.allowIn).includes(target.nodeName);\n        }\n        return !this._ignored.includes(target.nodeName);\n    };\n\n    /**\n     * @ignore\n     * @param event\n     */\n    private mapEvent = event => {\n        return this._shortcuts\n            .filter(shortcut => !shortcut.isSequence)\n            .map(shortcut =>\n                Object.assign({}, shortcut, {\n                    predicates: any(\n                        identity,\n                        shortcut.predicates.map((predicates: any) => allPass(predicates)(event))\n                    ),\n                    event: event\n                })\n            )\n            .filter(shortcut => shortcut.predicates)\n            .reduce((acc, shortcut) => (acc.priority > shortcut.priority ? acc : shortcut), {\n                priority: 0\n            } as ParsedShortcut);\n    };\n\n    private keydown$ = fromEvent(this.document, \"keydown\");\n    /**\n     * fixes for firefox prevent default\n     * on click event on button focus:\n     * see issue:\n     * keeping this here for now, but it is commented out\n     * Firefox reference bug:\n     * https://bugzilla.mozilla.org/show_bug.cgi?id=1487102\n     * and my repo:\n     *\n     * https://github.com/omridevk/ng-keyboard-shortcuts/issues/35\n     */\n    private ignore$ = this.pressed$.pipe(\n        filter(e => e.event.defaultPrevented),\n        switchMap(() => this.clicks$.pipe(first())),\n        tap((e: any) => {\n            e.preventDefault();\n            e.stopPropagation();\n        }),\n        repeat()\n    );\n    /**\n     * @ignore\n     */\n    private clicks$ = fromEvent(this.document, \"click\", { capture: true });\n\n    private keyup$ = fromEvent(this.document, \"keyup\");\n\n    /**\n     * @ignore\n     */\n    private keydownCombo$ = this.keydown$.pipe(\n        filter(_ => !this.disabled),\n        map(this.mapEvent),\n        filter(\n            (shortcut: ParsedShortcut) =>\n                !shortcut.target || shortcut.event.target === shortcut.target\n        ),\n        filter((shortcut: ParsedShortcut) => isFunction(shortcut.command)),\n        filter(this.isAllowed),\n        tap(shortcut => {\n            if (!shortcut.preventDefault) {\n                return;\n            }\n            shortcut.event.preventDefault();\n            shortcut.event.stopPropagation();\n        }),\n        throttle(shortcut => timer(shortcut.throttleTime)),\n        tap(shortcut => shortcut.command({ event: shortcut.event, key: shortcut.key })),\n        tap(shortcut => this._pressed.next({ event: shortcut.event, key: shortcut.key })),\n        takeUntil(this.keyup$),\n        repeat(),\n        catchError(error => throwError(error))\n    );\n\n    /**\n     * @ignore\n     */\n    private timer$ = new Subject();\n    /**\n     * @ignore\n     */\n    private resetCounter$ = this.timer$\n        .asObservable()\n        .pipe(switchMap(() => timer(NgHotkeysService.TIMEOUT_SEQUENCE)));\n    /**\n     * @ignore\n     */\n    private keydownSequence$ = this.shortcuts$.pipe(\n        map(shortcuts => shortcuts.filter(shortcut => shortcut.isSequence)),\n        switchMap(sequences =>\n            this.keydown$.pipe(\n                map(event => {\n                    return {\n                        event,\n                        sequences\n                    };\n                }),\n                tap(val => this.timer$.next(val))\n            )\n        ),\n        scan(\n            (acc: { events: any[]; command?: any; sequences: any[] }, arg: any) => {\n                let { event } = arg;\n                const currentLength = acc.events.length;\n                const sequences = currentLength ? acc.sequences : arg.sequences;\n                let [characters] = this.characterFromEvent(event);\n                characters = Array.isArray(characters)\n                    ? [...characters, event.key]\n                    : [characters, event.key];\n                const result = sequences\n                    .map(sequence => {\n                        const sequences = sequence.sequence.filter(seque =>\n                            characters.some(\n                                key =>\n                                    (_SPECIAL_CASES[seque[currentLength]] ||\n                                        seque[currentLength]) === key\n                            )\n                        );\n                        const partialMatch = sequences.length > 0;\n                        if (sequence.fullMatch) {\n                            return sequence;\n                        }\n                        return {\n                            ...sequence,\n                            sequence: sequences,\n                            partialMatch,\n                            event: event,\n                            fullMatch:\n                                partialMatch &&\n                                this.isFullMatch({ command: sequence, events: acc.events })\n                        };\n                    })\n                    .filter(sequences => sequences.partialMatch || sequences.fullMatch);\n\n                let [match] = result;\n                if (!match || this.modifiersOn(event)) {\n                    return { events: [], sequences: this._sequences };\n                }\n                /*\n                 * handle case of \"?\" sequence and \"? a\" sequence\n                 * need to determine which one to trigger.\n                 * if both match, we pick the longer one (? a) in this case.\n                 */\n                const guess = maxArrayProp(\"priority\", result);\n                if (result.length > 1 && guess.fullMatch) {\n                    return { events: [], command: guess, sequences: this._sequences };\n                }\n                if (result.length > 1) {\n                    return { events: [...acc.events, event], command: result, sequences: result };\n                }\n                if (match.fullMatch) {\n                    return { events: [], command: match, sequences: this._sequences };\n                }\n                return { events: [...acc.events, event], command: result, sequences: result };\n            },\n            { events: [], sequences: [] }\n        ),\n        switchMap(({ command }) => {\n            if (Array.isArray(command)) {\n                /*\n                 * Add a timer to handle the case where for example:\n                 * a sequence \"?\" is registered and \"? a\" is registered as well\n                 * if the user does not hit any key for 500ms, the single sequence will trigger\n                 * if any keydown event occur, this timer will reset, given a chance to complete\n                 * the full sequence (? a) in this case.\n                 * This delay only occurs when single key sequence is the beginning of another sequence.\n                 */\n                return timer(500).pipe(\n                    map(() => ({ command: command.filter(command => command.fullMatch)[0] }))\n                );\n            }\n            return of({ command });\n        }),\n        takeUntil(this.pressed$),\n        filter(({ command }) => command && command.fullMatch),\n        map(({ command }) => command),\n        filter((shortcut: ParsedShortcut) => isFunction(shortcut.command)),\n        filter(\n            (shortcut: ParsedShortcut) =>\n                !shortcut.target || shortcut.event.target === shortcut.target\n        ),\n        filter(this.isAllowed),\n        tap(shortcut => !shortcut.preventDefault || shortcut.event.preventDefault()),\n        throttle(shortcut => timer(shortcut.throttleTime)),\n        tap(shortcut => shortcut.command({ event: shortcut.event, key: shortcut.key })),\n        tap(shortcut => this._pressed.next({ event: shortcut.event, key: shortcut.key })),\n        takeUntil(this.resetCounter$),\n        repeat()\n    );\n\n    /**\n     * @ignore\n     * @param command\n     * @param events\n     */\n    private isFullMatch({ command, events }) {\n        if (!command) {\n            return false;\n        }\n        return command.sequence.some(sequence => {\n            return sequence.length === events.length + 1;\n        });\n    }\n\n    /**\n     * @ignore\n     */\n    private get shortcuts() {\n        return this._shortcuts;\n    }\n\n    /**\n     * @ignore\n     */\n    constructor(@Inject(DOCUMENT) private document: any) {\n        this.subscriptions.push(\n            this.keydownSequence$.subscribe(),\n            this.keydownCombo$.subscribe()\n            // this.ignore$.subscribe()\n        );\n    }\n\n    /**\n     * @ignore\n     * @param event\n     */\n    private _characterFromEvent(event): [string, boolean] {\n        if (typeof event.which !== \"number\") {\n            event.which = event.keyCode;\n        }\n        if (_SPECIAL_CASES[event.which]) {\n            return [_SPECIAL_CASES[event.which], event.shiftKey];\n        }\n        if (_MAP[event.which]) {\n            // for non keypress events the special maps are needed\n            return [_MAP[event.which], event.shiftKey];\n        }\n\n        if (_KEYCODE_MAP[event.which]) {\n            return [_KEYCODE_MAP[event.which], event.shiftKey];\n        }\n        // in case event key is lower case but registered key is upper case\n        // return it in the lower case\n        if (String.fromCharCode(event.which).toLowerCase() !== event.key) {\n            return [String.fromCharCode(event.which).toLowerCase(), event.shiftKey];\n        }\n        return [event.key, event.shiftKey];\n    }\n\n    private characterFromEvent(event) {\n        let [key, shiftKey] = this._characterFromEvent(event);\n        if (shiftKey && _SHIFT_MAP[key]) {\n            return [_SHIFT_MAP[key], shiftKey];\n        }\n        return [key, shiftKey];\n    }\n\n    /**\n     * @ignore\n     * Remove subscription.\n     */\n    ngOnDestroy(): void {\n        this.subscriptions.forEach(sub => sub.unsubscribe());\n    }\n\n    /**\n     * @ignore\n     * @param shortcuts\n     */\n    private isSequence(shortcuts: string[]): boolean {\n        return !shortcuts.some(shortcut => shortcut.includes(\"+\") || shortcut.length === 1);\n    }\n\n    /**\n     * Add new shortcut/s\n     */\n    public add(shortcuts: ShortcutInput[] | ShortcutInput): string[] {\n        shortcuts = Array.isArray(shortcuts) ? shortcuts : [shortcuts];\n        const commands = this.parseCommand(shortcuts);\n        commands.forEach(command => {\n            if (command.isSequence) {\n                this._sequences.push(command);\n                return;\n            }\n            this._shortcuts.push(command);\n        });\n        setTimeout(() => {\n            this._shortcutsSub.next([...this._shortcuts, ...this._sequences]);\n        });\n        return commands.map(command => command.id);\n    }\n\n    /**\n     * Remove a command based on key or array of keys.\n     * can be used for cleanup.\n     * @returns\n     * @param ids\n     */\n    public remove(ids: string | string[]): NgHotkeysService {\n        ids = Array.isArray(ids) ? ids : [ids];\n        this._shortcuts = this._shortcuts.filter(shortcut => !ids.includes(shortcut.id));\n        this._sequences = this._sequences.filter(shortcut => !ids.includes(shortcut.id));\n        setTimeout(() => {\n            this._shortcutsSub.next([...this._shortcuts, ...this._sequences]);\n        });\n        return this;\n    }\n\n    /**\n     * Returns an observable of keyboard shortcut filtered by a specific key.\n     * @param key - the key to filter the observable by.\n     */\n    public select(key: string): Observable<ShortcutEventOutput> {\n        return this.pressed$.pipe(\n            filter(({ event, key: eventKeys }) => {\n                eventKeys = Array.isArray(eventKeys) ? eventKeys : [eventKeys];\n                return !!eventKeys.find(eventKey => eventKey === key);\n            })\n        );\n    }\n\n    /**\n     * @ignore\n     * transforms a shortcut to:\n     * a predicate function\n     */\n    private getKeys = (keys: string[]) => {\n        return keys\n            .map(key => key.trim())\n            .filter(key => key !== \"+\")\n            .map(key => {\n                // for modifiers like control key\n                // look for event['ctrlKey']\n                // otherwise use the keyCode\n                key = _SPECIAL_CASES[key] || key;\n                if (modifiers.hasOwnProperty(key)) {\n                    return event => {\n                        return !!event[modifiers[key]];\n                    };\n                }\n\n                return event => {\n                    const isUpper = key === key.toUpperCase();\n                    const isNonAlpha = (/[^a-zA-Z\\d\\s:]/).test(key);\n                    const inShiftMap = _INVERTED_SHIFT_MAP[key];\n                    let [characters, shiftKey] = this.characterFromEvent(event);\n                    const allModifiers = Object.keys(modifiers).map((key) => {\n                        return modifiers[key];\n                    })\n                    const hasModifiers = allModifiers.some(modifier => event[modifier]);\n                    characters = Array.isArray(characters)\n                        ? [...characters, event.key]\n                        : [characters, event.key];\n\n                    // if has modifiers:\n                    // we want to make sure it is not upper case letters\n                    // (because upper has modifiers so we want continue the check)\n                    // we also want to make sure it is not alphanumeric char like ? / ^ & and others (since those could require modifiers as well)\n                    // we also want to check this only if the length of\n                    // of the keys is one (i.e the command key is \"?\" or \"c\"\n                    // this while check is here to verify that:\n                    // if registered key like \"e\"\n                    // it won't be fired when clicking ctrl + e, or any modifiers + the key\n                    // we only want to trigger when the single key is clicked alone\n                    // thus all these edge cases.\n                    // hopefully this would cover all cases\n                    // TODO:: find a way simplify this\n                    if (hasModifiers\n                        && (!isUpper || isNonAlpha)\n                        && !inShiftMap\n                        && keys.length === 1) {\n                        return false;\n                    }\n                    return characters.some(char => {\n                        if (char === key && isUpper) {\n                            return true;\n                        }\n                        return key === char;\n                    });\n                };\n            });\n    };\n\n\n    /**\n     * @ignore\n     * @param event\n     */\n    private modifiersOn(event) {\n        return [\"metaKey\", \"altKey\", \"ctrlKey\"].some(mod => event[mod]);\n    }\n\n    /**\n     * @ignore\n     * Parse each command using getKeys function\n     */\n    private parseCommand(command: ShortcutInput | ShortcutInput[]): ParsedShortcut[] {\n        const commands = Array.isArray(command) ? command : [command];\n        return commands.map(command => {\n            const keys = Array.isArray(command.key) ? command.key : [command.key];\n            const priority = Math.max(...keys.map(key => key.split(\" \").filter(identity).length));\n            const predicates = keys.map(key => this.getKeys(key.split(\" \").filter(identity)));\n            const isSequence = this.isSequence(keys);\n            const sequence = isSequence\n                ? keys.map(key =>\n                      key\n                          .split(\" \")\n                          .filter(identity)\n                          .map(key => key.trim())\n                  )\n                : [];\n            return {\n                ...command,\n                isSequence,\n                sequence: isSequence ? sequence : [],\n                allowIn: command.allowIn || [],\n                key: keys,\n                id: `${guid++}`,\n                throttle: isNill(command.throttleTime) ? this.throttleTime : command.throttleTime,\n                priority: priority,\n                predicates: predicates\n            } as ParsedShortcut;\n        });\n    }\n}\n","import {\n    AfterViewInit,\n    Component,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    SimpleChanges\n} from \"@angular/core\";\nimport { NgHotkeysService } from './ng-hotkeys.service';\nimport { ShortcutInput, ShortcutEventOutput } from \"./ng-hotkeys.interfaces\";\nimport { Observable } from \"rxjs\";\n\n/**\n * A component to bind global shortcuts, can be used multiple times across the app\n * will remove registered shortcuts when element is removed from DOM.\n */\n@Component({\n    selector: \"ng-hot-keys\",\n    template: \"\"\n})\nexport class NgHotkeysComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n    /**\n     * A list of shortcuts.\n     */\n    @Input() shortcuts: ShortcutInput[] | ShortcutInput = [];\n\n    /**\n     * @ignore\n     * list of registered keyboard shortcuts\n     * used for clean up on NgDestroy.\n     */\n    private clearIds: string[] = [];\n\n    /**\n     * @ignore\n     */\n    private _disabled = false;\n    /**\n     * Disable all shortcuts for this component.\n     */\n    @Input() set disabled(value) {\n        this._disabled = value;\n        if (this.clearIds) {\n            this.keyboard.remove(this.clearIds);\n            this.clearIds = [];\n        }\n        if (value) {\n            return;\n        }\n        this.clearIds = this.keyboard.add(this.shortcuts);\n    }\n\n    /**\n     * @ignore\n     * @param {NgHotkeysService} keyboard\n     */\n    constructor(private keyboard: NgHotkeysService) {}\n\n    /**\n     * @ignore\n     */\n    ngOnInit() {}\n\n    /**\n     * Select a key to listen to, will emit when the selected key is pressed.\n     */\n    public select(key: string): Observable<ShortcutEventOutput> {\n        return this.keyboard.select(key);\n    }\n\n    /**\n     * @ignore\n     */\n    ngAfterViewInit(): void {}\n\n    /**\n     * @ignore\n     */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (!changes.shortcuts || !changes.shortcuts.currentValue) {\n            return;\n        }\n        if (this.clearIds) {\n            this.keyboard.remove(this.clearIds);\n        }\n        if (!this._disabled) {\n            setTimeout(() => (this.clearIds = this.keyboard.add(changes.shortcuts.currentValue)));\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    ngOnDestroy(): void {\n        this.keyboard.remove(this.clearIds);\n    }\n}\n","import { Injectable } from \"@angular/core\";\nimport { NgHotkeysService } from './ng-hotkeys.service';\nimport { map } from \"rxjs/operators\";\n\n/**\n * Service to assist showing custom help screen\n */\n@Injectable({\n    providedIn: \"root\"\n})\nexport class NgHotkeysHelpService {\n    /**\n     * @ignore\n     * @param {NgHotkeysService} keyboard\n     */\n    constructor(private keyboard: NgHotkeysService) {}\n\n    /**\n     * Observable to provide access to all registered shortcuts in the app.\n     * @type {Observable<any>}\n     */\n    public shortcuts$ = this.keyboard.shortcuts$.pipe(\n        map(shortcuts =>\n            shortcuts\n                .filter(shortcut => Boolean(shortcut.label) && Boolean(shortcut.description))\n                .map(({ key, label, description }) => ({\n                    key,\n                    label,\n                    description\n                }))\n        )\n    );\n}\n","import { Injectable } from \"@angular/core\";\nimport { NgHotkeysService } from './ng-hotkeys.service';\n\n@Injectable({\n    providedIn: \"root\"\n})\n/**\n * Use this service to listen to a specific keyboards events using Rxjs.\n * The shortcut must be declared in the app for the select to work.\n */\nexport class NgHotkeysSelectService {\n    constructor(private keyboardService: NgHotkeysService) {}\n\n    /**\n     * Returns an observable of keyboard shortcut filtered by a specific key.\n     * @param key - the key to filter the observable by.\n     */\n    public select(key: string) {\n        return this.keyboardService.select(key);\n    }\n}\n","/**\n * The shortcut input for the Directive\n */\nexport interface Shortcut {\n\n    /**\n     * A key or list of keys to listen to and fire the command.\n     */\n    key: string | string[];\n\n    /**\n     * callback to be called when shortcut is pressed.\n     * @param event - the event out\n     */\n    command(event: ShortcutEventOutput): any;\n\n    /**\n     * Description for the command can be used for rendering help menu.\n     */\n    description?: string;\n\n    /**\n     * How much time to throttle in ms.\n     */\n    throttleTime?: number;\n\n    /**\n     * Label, can be used for grouping commands.\n     */\n    label?: string;\n\n    /**\n     * Prevent browser default, default: false\n     */\n    preventDefault?: boolean;\n}\n\n/**\n * The shortcut input type for ng-hotkeys component\n */\nexport interface ShortcutInput extends Shortcut {\n    /**\n     * textarea, select and input are ignored by default, this is used to override\n     * this behavior.\n     * allow in node names, accepts: [\"TEXTAREA\", \"SELECT\", \"INPUT]\n     */\n    allowIn?: AllowIn[];\n    /**\n     * Only trigger the command when the target is in focus.\n     */\n    target?: HTMLElement;\n}\n\nexport enum AllowIn {\n    Textarea = 'TEXTAREA',\n    Input = 'INPUT',\n    Select = \"SELECT\"\n}\n\n/**\n * @ignore\n */\nexport interface ParsedShortcut extends ShortcutInput {\n    key: string[];\n    predicates: Function[][];\n    id: string;\n    priority?: number;\n\n    isSequence: boolean;\n    sequence?: string[][];\n    event?: KeyboardEvent;\n}\n\n/**\n * The output type fired by the command when shortcut is triggered.\n */\nexport interface ShortcutEventOutput {\n    /**\n     * The browser keyboard event\n     */\n    event: KeyboardEvent;\n    /**\n     * The registered key that was triggered\n     */\n    key: string[] | string;\n}\n","import { Directive, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges } from \"@angular/core\";\nimport { AllowIn, Shortcut } from \"./ng-hotkeys.interfaces\";\nimport { NgHotkeysService } from \"./ng-hotkeys.service\";\n\n/**\n * A directive to be used with \"focusable\" elements, like:\n * textarea, input, select.\n */\n@Directive({\n    selector: \"[ngHotKeys]\"\n})\nexport class NgHotkeysDirective implements OnDestroy, OnChanges {\n    /**\n     * clearId to remove shortcuts.\n     */\n    private clearIds;\n    /**\n     * Shortcut inputs for the directive.\n     * will only work when the element is in focus\n     */\n    @Input() ngHotKeys: Shortcut[];\n    /**\n     * @ignore\n     * @type {boolean}\n     * @private\n     */\n    private _disabled = false;\n\n    /**\n     * whether to disable the shortcuts for this directive\n     * @param value\n     */\n    @Input() set disabled(value) {\n        this._disabled = value;\n        if (this.clearIds) {\n            this.keyboard.remove(this.clearIds);\n        }\n        setTimeout(() => {\n            if (value === false && this.ngHotKeys) {\n                this.clearIds = this.keyboard.add(this.transformInput(this.ngHotKeys));\n            }\n        })\n\n    }\n\n    /**\n     * @ignore\n     * @param {NgHotkeysService} keyboard\n     * @param {ElementRef} el\n     */\n    constructor(private keyboard: NgHotkeysService, private el: ElementRef) {}\n\n    /**\n     * @ignore\n     * @param {Shortcut[]} shortcuts\n     * @returns {any}\n     */\n    private transformInput(shortcuts: Shortcut[]) {\n        return shortcuts.map(shortcut => ({\n            ...shortcut,\n            target: this.el.nativeElement,\n            allowIn: [AllowIn.Select, AllowIn.Input, AllowIn.Textarea]\n        }));\n    }\n\n    /**\n     * @ignore\n     */\n    ngOnDestroy() {\n        if (!this.clearIds) {\n            return;\n        }\n        this.keyboard.remove(this.clearIds);\n    }\n\n    /**\n     * @ignore\n     * @param {SimpleChanges} changes\n     */\n    ngOnChanges(changes: SimpleChanges) {\n        const { ngKeyboardShortcuts } = changes;\n        if (this.clearIds) {\n            this.keyboard.remove(this.clearIds);\n        }\n        if (!ngKeyboardShortcuts || !ngKeyboardShortcuts.currentValue) {\n            return;\n        }\n        this.clearIds = this.keyboard.add(this.transformInput(ngKeyboardShortcuts.currentValue));\n    }\n}\n","import {\n    TemplateRef,\n    ViewContainerRef,\n    ElementRef,\n    ComponentRef,\n    EmbeddedViewRef,\n    Injector,\n    ComponentFactoryResolver,\n} from '@angular/core';\n\n/**\n * @ignore\n * Interface that can be used to generically type a class.\n */\nexport interface ComponentType<T> {\n    new (...args: any[]): T;\n}\n\n/**\n * @ignore\n * A `Portal` is something that you want to render somewhere else.\n * It can be attach to / detached from a `PortalOutlet`.\n */\nexport abstract class Portal<T> {\n    private _attachedHost: PortalOutlet | null;\n\n    /** Attach this portal to a host. */\n    attach(host: PortalOutlet): T {\n        if (host == null) {\n            // TODO: add error\n            console.error(\"null portal error\");\n        }\n\n        if (host.hasAttached()) {\n            console.error(\"portal already attached\");\n            // throwPortalAlreadyAttachedError();\n        }\n\n        this._attachedHost = host;\n        return <T> host.attach(this);\n    }\n\n    /** Detach this portal from its host */\n    detach(): void {\n        let host = this._attachedHost;\n\n        if (host == null) {\n            console.error(\"no portal attached!\");\n            // throwNoPortalAttachedError();\n        } else {\n            this._attachedHost = null;\n            host.detach();\n        }\n    }\n\n    /** Whether this portal is attached to a host. */\n    get isAttached(): boolean {\n        return this._attachedHost != null;\n    }\n\n    /**\n     * Sets the PortalOutlet reference without performing `attach()`. This is used directly by\n     * the PortalOutlet when it is performing an `attach()` or `detach()`.\n     */\n    setAttachedHost(host: PortalOutlet | null) {\n        this._attachedHost = host;\n    }\n}\n\n\n/**\n * @ignore\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n */\nexport class ComponentPortal<T> extends Portal<ComponentRef<T>> {\n    /** The type of the component that will be instantiated for attachment. */\n    component: ComponentType<T>;\n\n    /**\n     * [Optional] Where the attached component should live in Angular's *logical* component tree.\n     * This is different from where the component *renders*, which is determined by the PortalOutlet.\n     * The origin is necessary when the host is outside of the Angular application context.\n     */\n    viewContainerRef?: ViewContainerRef | null;\n\n    /** [Optional] Injector used for the instantiation of the component. */\n    injector?: Injector | null;\n\n    /**\n     * Alternate `ComponentFactoryResolver` to use when resolving the associated component.\n     * Defaults to using the resolver from the outlet that the portal is attached to.\n     */\n    componentFactoryResolver?: ComponentFactoryResolver | null;\n\n    constructor(\n        component: ComponentType<T>,\n        viewContainerRef?: ViewContainerRef | null,\n        injector?: Injector | null,\n        componentFactoryResolver?: ComponentFactoryResolver | null) {\n        super();\n        this.component = component;\n        this.viewContainerRef = viewContainerRef;\n        this.injector = injector;\n        this.componentFactoryResolver = componentFactoryResolver;\n    }\n}\n\n/**\n * @ignore\n * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef).\n */\nexport class TemplatePortal<C = any> extends Portal<C> {\n    /** The embedded template that will be used to instantiate an embedded View in the host. */\n    templateRef: TemplateRef<C>;\n\n    /** Reference to the ViewContainer into which the template will be stamped out. */\n    viewContainerRef: ViewContainerRef;\n\n    /** Contextual data to be passed in to the embedded view. */\n    context: C | undefined;\n\n    constructor(template: TemplateRef<C>, viewContainerRef: ViewContainerRef, context?: C) {\n        super();\n        this.templateRef = template;\n        this.viewContainerRef = viewContainerRef;\n        this.context = context;\n    }\n\n    get origin(): ElementRef {\n        return this.templateRef.elementRef;\n    }\n\n    /**\n     * Attach the portal to the provided `PortalOutlet`.\n     * When a context is provided it will override the `context` property of the `TemplatePortal`\n     * instance.\n     */\n    attach(host: PortalOutlet, context: C | undefined = this.context): C {\n        this.context = context;\n        return super.attach(host);\n    }\n\n    detach(): void {\n        this.context = undefined;\n        return super.detach();\n    }\n}\n\n\n/**\n * @ignore\n * A `PortalOutlet` is an space that can contain a single `Portal`.\n */\nexport interface PortalOutlet {\n    /** Attaches a portal to this outlet. */\n    attach(portal: Portal<any>): any;\n\n    /** Detaches the currently attached portal from this outlet. */\n    detach(): any;\n\n    /** Performs cleanup before the outlet is destroyed. */\n    dispose(): void;\n\n    /** Whether there is currently a portal attached to this outlet. */\n    hasAttached(): boolean;\n}\n\n\n/**\n * @ignore\n * Partial implementation of PortalOutlet that handles attaching\n * ComponentPortal and TemplatePortal.\n */\nexport abstract class BasePortalOutlet implements PortalOutlet {\n    /** The portal currently attached to the host. */\n    protected _attachedPortal: Portal<any> | null;\n\n    /** A function that will permanently dispose this host. */\n    private _disposeFn: (() => void) | null;\n\n    /** Whether this host has already been permanently disposed. */\n    private _isDisposed: boolean = false;\n\n    /** Whether this host has an attached portal. */\n    hasAttached(): boolean {\n        return !!this._attachedPortal;\n    }\n\n    attach<T>(portal: ComponentPortal<T>): ComponentRef<T>;\n    attach<T>(portal: TemplatePortal<T>): EmbeddedViewRef<T>;\n    attach(portal: any): any;\n\n    /** Attaches a portal. */\n    attach(portal: Portal<any>): any {\n        if (!portal) {\n            console.error('null portal!');\n            // throwNullPortalError();\n        }\n\n        if (this.hasAttached()) {\n            console.error('portal already attached');\n            // throwPortalAlreadyAttachedError();\n        }\n\n        if (this._isDisposed) {\n            console.error('portal out already disposed');\n            // throwPortalOutletAlreadyDisposedError();\n        }\n\n        if (portal instanceof ComponentPortal) {\n            this._attachedPortal = portal;\n            return this.attachComponentPortal(portal);\n        } else if (portal instanceof TemplatePortal) {\n            this._attachedPortal = portal;\n            return this.attachTemplatePortal(portal);\n        }\n        console.error('unknown portal type');\n        // throwUnknownPortalTypeError();\n    }\n\n    abstract attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T>;\n\n    abstract attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C>;\n\n    /** Detaches a previously attached portal. */\n    detach(): void {\n        if (this._attachedPortal) {\n            this._attachedPortal.setAttachedHost(null);\n            this._attachedPortal = null;\n        }\n\n        this._invokeDisposeFn();\n    }\n\n    /** Permanently dispose of this portal host. */\n    dispose(): void {\n        if (this.hasAttached()) {\n            this.detach();\n        }\n\n        this._invokeDisposeFn();\n        this._isDisposed = true;\n    }\n\n    /** @docs-private */\n    setDisposeFn(fn: () => void) {\n        this._disposeFn = fn;\n    }\n\n    private _invokeDisposeFn() {\n        if (this._disposeFn) {\n            this._disposeFn();\n            this._disposeFn = null;\n        }\n    }\n}\n","import {\n  ComponentFactoryResolver,\n  ComponentRef,\n  EmbeddedViewRef,\n  ApplicationRef,\n  Injector,\n} from '@angular/core';\nimport {BasePortalOutlet, ComponentPortal, TemplatePortal} from './portal';\n\n\n/**\n * @ignore\n * A PortalOutlet for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n */\nexport class DomPortalOutlet extends BasePortalOutlet {\n  constructor(\n      /** Element into which the content is projected. */\n      public outletElement: Element,\n      private _componentFactoryResolver: ComponentFactoryResolver,\n      private _appRef: ApplicationRef,\n      private _defaultInjector: Injector) {\n    super();\n  }\n\n  /**\n   * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n   * @param portal Portal to be attached\n   * @returns Reference to the created component.\n   */\n  attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n    const resolver = portal.componentFactoryResolver || this._componentFactoryResolver;\n    const componentFactory = resolver.resolveComponentFactory(portal.component);\n    let componentRef: ComponentRef<T>;\n\n    // If the portal specifies a ViewContainerRef, we will use that as the attachment point\n    // for the component (in terms of Angular's component tree, not rendering).\n    // When the ViewContainerRef is missing, we use the factory to create the component directly\n    // and then manually attach the view to the application.\n    if (portal.viewContainerRef) {\n      componentRef = portal.viewContainerRef.createComponent(\n          componentFactory,\n          portal.viewContainerRef.length,\n          portal.injector || portal.viewContainerRef.injector);\n\n      this.setDisposeFn(() => componentRef.destroy());\n    } else {\n      componentRef = componentFactory.create(portal.injector || this._defaultInjector);\n      this._appRef.attachView(componentRef.hostView);\n      this.setDisposeFn(() => {\n        this._appRef.detachView(componentRef.hostView);\n        componentRef.destroy();\n      });\n    }\n    // At this point the component has been instantiated, so we move it to the location in the DOM\n    // where we want it to be rendered.\n    this.outletElement.appendChild(this._getComponentRootNode(componentRef));\n\n    return componentRef;\n  }\n\n  /**\n   * Attaches a template portal to the DOM as an embedded view.\n   * @param portal Portal to be attached.\n   * @returns Reference to the created embedded view.\n   */\n  attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n    let viewContainer = portal.viewContainerRef;\n    let viewRef = viewContainer.createEmbeddedView(portal.templateRef, portal.context);\n    viewRef.detectChanges();\n\n    // The method `createEmbeddedView` will add the view as a child of the viewContainer.\n    // But for the DomPortalOutlet the view can be added everywhere in the DOM\n    // (e.g Overlay Container) To move the view to the specified host element. We just\n    // re-append the existing root nodes.\n    viewRef.rootNodes.forEach(rootNode => this.outletElement.appendChild(rootNode));\n\n    this.setDisposeFn((() => {\n      let index = viewContainer.indexOf(viewRef);\n      if (index !== -1) {\n        viewContainer.remove(index);\n      }\n    }));\n\n    return viewRef;\n  }\n\n  /**\n   * Clears out a portal from the DOM.\n   */\n  dispose(): void {\n    super.dispose();\n    if (this.outletElement.parentNode != null) {\n      this.outletElement.parentNode.removeChild(this.outletElement);\n    }\n  }\n\n  /** Gets the root HTMLElement for an instantiated component. */\n  private _getComponentRootNode(componentRef: ComponentRef<any>): HTMLElement {\n    return (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n  }\n}\n","<div class=\"item\" [class.item--odd]=\"index % 2 !== 0\" *ngIf=\"shortcut.description\">\n  <div class=\"description\">\n    <span>{{shortcut.description}}</span>\n  </div>\n  <div class=\"keys\">\n    <div *ngFor=\"let sKey of parsedKeys;let i = index\" class=\"key__container\">\n      <span class=\"key\" *ngFor=\"let key of sKey;\">{{key}}</span>\n      <span *ngIf=\"parsedKeys.length > 1 && i < parsedKeys.length - 1\" class=\"separator\"> / </span>\n    </div>\n  </div>\n</div>\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { Shortcut } from \"./ng-hotkeys.interfaces\";\nimport { symbols } from \"./keys\";\nimport { identity } from './utils';\n\n/**\n * @ignore\n */\n@Component({\n    selector: \"ng-hot-keys-help-item\",\n    templateUrl: \"./ng-hotkeys-help-item.component.html\",\n    styleUrls: [\"./ng-hotkeys-help-item.component.css\"]\n})\nexport class NgHotkeysHelpItemComponent implements OnInit {\n    public parsedKeys: string[][];\n\n    @Input() index: number;\n\n    @Input()\n    set shortcut(shortcut: Shortcut) {\n        const key = Array.isArray(shortcut.key) ? shortcut.key : [shortcut.key];\n        this.parsedKeys = key.map(key =>\n            key\n                .split(\" \")\n                .filter(identity)\n                .filter(key => key !== \"+\")\n                .map(key => {\n                    if (symbols[key]) {\n                        return symbols[key];\n                    }\n                    return key;\n                })\n        );\n        this._shortcut = shortcut;\n    }\n    get shortcut() {\n        return this._shortcut;\n    }\n\n    private _shortcut: Shortcut;\n\n    constructor() {}\n\n    ngOnInit() {}\n}\n","<ng-template>\n    <div class=\"help-modal__container\" [attr.aria-labelledby]=\"'modal-' + title\" role=\"dialog\">\n        <div class=\"{{className}}\" [@enterAnimation] *ngIf=\"showing\">\n            <div class=\"title\">\n                <h3 id=\"modal-{{title}}\" class=\"title__text\">{{title}}</h3>\n            </div>\n            <div class=\"help-modal__body\">\n                <span *ngIf=\"!labels.length\">\n                    {{emptyMessage}}\n                </span>\n                <div>\n                    <ul *ngFor=\"let label of labels\" class=\"help-modal__list\">\n                        <h4 class=\"item-group-label\">{{label}}</h4>\n                        <ng-hot-keys-help-item\n                                *ngFor=\"let shortcut of shortcuts[label]; let i = index\"\n                                [shortcut]=\"shortcut\"\n                                [index]=\"i\"\n                        ></ng-hot-keys-help-item>\n                    </ul>\n                </div>\n            </div>\n        </div>\n        <div class=\"help-modal__backdrop\" [@overlayAnimation] (mousedown)=\"hide()\" *ngIf=\"showing\"></div>\n    </div>\n</ng-template>\n","import {\n    ApplicationRef,\n    Component,\n    ComponentFactoryResolver,\n    ElementRef,\n    Injector,\n    Input,\n    OnDestroy,\n    OnInit,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef\n} from \"@angular/core\";\nimport { DomPortalOutlet } from \"./dom-portal-outlet\";\nimport { TemplatePortal } from \"./portal\";\nimport { NgHotkeysService } from './ng-hotkeys.service';\nimport { NgHotkeysHelpService } from './ng-hotkeys-help.service';\nimport { animate, style, transition, trigger } from \"@angular/animations\";\nimport { distinctUntilChanged, map } from \"rxjs/operators\";\nimport { groupBy } from './utils';\nimport { SubscriptionLike } from \"rxjs\";\nimport { Shortcut } from './ng-hotkeys.interfaces';\n\n\n/**\n * @ignore\n */\nconst scrollAbleKeys = new Map([\n    [31, 1],\n    [38, 1],\n    [39, 1],\n    [40, 1]\n]);\n/**\n * @ignore\n */\nconst preventDefault = (ignore: string) => e => {\n    const modal = e.target.closest(ignore);\n    if (modal) {\n        return;\n    }\n    e = e || window.event;\n    if (e.preventDefault) e.preventDefault();\n    e.returnValue = false;\n};\n/**\n * @ignore\n */\nconst preventDefaultForScrollKeys = e => {\n    if (!scrollAbleKeys.has(e.keyCode)) {\n        return;\n    }\n    preventDefault(e);\n    return false;\n};\n/**\n * @ignore\n */\nlet scrollEvents = [\n    { name: \"wheel\", callback: null },\n    { name: \"touchmove\", callback: null },\n    { name: \"DOMMouseScroll\", callback: null }\n];\n\n/**\n * @ignore\n */\nconst disableScroll = (ignore: string) => {\n    scrollEvents = scrollEvents.map(event => {\n        const callback = preventDefault(ignore);\n        window.addEventListener(event.name, callback, { passive: false });\n        return {\n            ...event,\n            callback\n        };\n    });\n    window.addEventListener(\"keydown\", preventDefaultForScrollKeys);\n};\n/**\n * @ignore\n */\nconst enableScroll = () => {\n    scrollEvents = scrollEvents.map(event => {\n        window.removeEventListener(event.name, event.callback);\n        return {\n            ...event,\n            callback: null\n        };\n    });\n    window.removeEventListener(\"keydown\", preventDefaultForScrollKeys);\n};\n\n/**\n * A Component to show all registered shortcut in the app\n * it is shown as a modal\n */\n@Component({\n    selector: \"ng-hot-keys-help\",\n    templateUrl: \"./ng-hotkeys-help.component.html\",\n    styleUrls: [\"./ng-hotkeys-help.component.css\"],\n    animations: [\n        trigger(\"enterAnimation\", [\n            transition(\":enter\", [\n                style({ transform: \"translateX(-100%)\", opacity: 0 }),\n                animate(\n                    \"0.33s cubic-bezier(0,0,0.3,1)\",\n                    style({ transform: \"translateX(0)\", opacity: 1 })\n                )\n            ]),\n            transition(\":leave\", [\n                style({ transform: \"translateX(0)\", opacity: 1 }),\n                animate(\n                    \"0.23s cubic-bezier(0,0,0.3,1)\",\n                    style({ transform: \"translateX(-100%)\", opacity: 0 })\n                )\n            ])\n        ]),\n        trigger(\"overlayAnimation\", [\n            transition(\":enter\", [\n                style({ opacity: 0 }),\n                animate(\"1s cubic-bezier(0,0,0.3,1)\", style({ opacity: 1 }))\n            ]),\n            transition(\":leave\", [\n                style({ opacity: 1 }),\n                animate(\"1s cubic-bezier(0,0,0.3,1)\", style({ opacity: 0 }))\n            ])\n        ])\n    ]\n})\nexport class NgHotkeysHelpComponent implements OnInit, OnDestroy {\n    /**\n     * Disable scrolling while modal is open\n     */\n    @Input() disableScrolling = true;\n    /**\n     * @ignore\n     */\n    private _key: string;\n\n    public className = \"help-modal\";\n\n    /**\n     * A description that will be shown in the help menu.\n     * MUST almost provide a label for the key to be shown\n     * in the help menu\n     */\n    @Input() keyDescription: string;\n\n    /**\n     * The label to group by the help menu toggle shortcut.\n     * must provide a description for the key to show\n     * in the help menu\n     */\n    @Input() keyLabel: string;\n\n    /**\n     * The label to group by the help menu close shortcut.\n     * must provide a description for the key to show\n     * in the help menu\n     */\n    @Input() closeKeyLabel: string;\n\n    /**\n     * A description that will be shown in the help menu.\n     * MUST almost provide a label for the key to be shown\n     * in the help menu\n     */\n    @Input() closeKeyDescription: string;\n\n    /**\n     * The shortcut to show/hide the help screen\n     */\n    @Input()\n    set key(value: string) {\n        this._key = value;\n        if (!value) {\n            return;\n        }\n        if (this.clearIds) {\n            this.keyboard.remove(this.clearIds);\n        }\n        this.clearIds = this.addShortcut({\n            key: value,\n            preventDefault: true,\n            command: () => this.toggle(),\n            description: this.keyDescription,\n            label: this.keyLabel\n        });\n    }\n\n    private addShortcut(shortcut: Shortcut) {\n        return this.keyboard.add(shortcut);\n    }\n    private _closeKey;\n    @Input()\n    set closeKey(value: string) {\n        this._closeKey = value;\n        if (!value) {\n            return;\n        }\n        if (this.closeKeyIds) {\n            this.keyboard.remove(this.closeKeyIds);\n        }\n        this.closeKeyIds = this.addShortcut({\n            key: value,\n            preventDefault: true,\n            command: () => this.hide(),\n            description: this.closeKeyDescription,\n            label: this.closeKeyDescription\n        })\n    }\n\n    /**\n     * The title of the help screen\n     * @default: \"Keyboard shortcuts\"\n     */\n    @Input() title = \"Keyboard shortcuts\";\n    /**\n     * What message to show when no shortcuts are available on the page.\n     * @default \"No shortcuts available\"\n     */\n    @Input() emptyMessage = \"No shortcuts available\";\n    /**\n     * @ignore\n     */\n    @ViewChild(TemplateRef) template: TemplateRef<any>;\n    /**\n     * @ignore\n     */\n    shortcuts: { label: string; key: string | string[]; description: string }[];\n    /**\n     * @ignore\n     */\n    showing = false;\n    /**\n     * @ignore\n     */\n    labels: string[];\n    /**\n     * @ignore\n     */\n    private bodyPortalHost: DomPortalOutlet;\n    /**\n     * @ignore\n     */\n    constructor(\n        private componentFactoryResolver: ComponentFactoryResolver,\n        private appRef: ApplicationRef,\n        private keyboard: NgHotkeysService,\n        private element: ElementRef,\n        private keyboardHelp: NgHotkeysHelpService,\n        private viewContainer: ViewContainerRef,\n        private injector: Injector\n    ) {\n        this.bodyPortalHost = new DomPortalOutlet(\n            document.body,\n            this.componentFactoryResolver,\n            this.appRef,\n            this.injector\n        );\n    }\n\n    /**\n     * Reveal the help screen manually.\n     */\n    reveal(): NgHotkeysHelpComponent {\n        this.hide();\n        if (this.disableScrolling) {\n            disableScroll(`.${this.className}`);\n        }\n        const portal = new TemplatePortal(this.template, this.viewContainer);\n        this.bodyPortalHost.attach(portal);\n        this.showing = true;\n        return this;\n    }\n\n    /**\n     * Check if help screen is visible.\n     * @returns boolean\n     */\n    visible(): boolean {\n        return this.bodyPortalHost.hasAttached();\n    }\n    /**\n     * Hide the help screen manually.\n     */\n    hide(): NgHotkeysHelpComponent {\n        if (this.disableScrolling) {\n            enableScroll();\n        }\n        if (!this.bodyPortalHost.hasAttached()) {\n            return this;\n        }\n        this.bodyPortalHost.detach();\n        this.showing = false;\n        return this;\n    }\n\n    /**\n     * @ignore\n     */\n    ngOnDestroy(): void {\n        this.hide();\n        if (this.clearIds) {\n            this.keyboard.remove(this.clearIds);\n        }\n        if (this.closeKeyIds) {\n            this.keyboard.remove(this.closeKeyIds);\n        }\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n        if (this.timeoutId) {\n            clearTimeout(this.timeoutId);\n        }\n    }\n\n    /**\n     * Show/Hide the help screen manually.\n     */\n    toggle(): NgHotkeysHelpComponent {\n        this.visible() ? this.hide() : this.reveal();\n        return this;\n    }\n\n    /**\n     * @ignore\n     */\n    private subscription: SubscriptionLike;\n    /**\n     * @ignore\n     */\n    private clearIds;\n\n    /**\n     * @ignore\n     */\n    private closeKeyIds;\n    /**\n     * @ignore\n     */\n    private timeoutId;\n    /**\n     * @ignore\n     */\n    ngOnInit() {\n        this.subscription = this.keyboardHelp.shortcuts$\n            .pipe(\n                distinctUntilChanged(),\n                map(shortcuts => groupBy(shortcuts, \"label\"))\n            )\n            .subscribe(shortcuts => {\n                this.shortcuts = shortcuts;\n                this.labels = Object.keys(shortcuts);\n            });\n    }\n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { NgHotkeysComponent } from './ng-hotkeys.component';\nimport { NgHotkeysService} from './ng-hotkeys.service';\nimport { NgHotkeysHelpService } from './ng-hotkeys-help.service';\nimport { NgHotkeysSelectService } from \"./ng-hotkeys-select.service\";\nimport { NgHotkeysDirective } from './ng-hotkeys.directive';\nimport { NgHotkeysHelpComponent } from \"./ng-hotkeys-help.component\";\nimport { NgHotkeysHelpItemComponent } from './ng-hotkeys-help-item.component';\nimport { CommonModule } from \"@angular/common\";\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [\n        NgHotkeysComponent,\n        NgHotkeysDirective,\n        NgHotkeysHelpItemComponent,\n        NgHotkeysHelpComponent\n    ],\n    exports: [\n        NgHotkeysComponent,\n        NgHotkeysDirective,\n        NgHotkeysHelpComponent\n    ]\n})\nexport class HotKeysModule {\n    public static forRoot(): ModuleWithProviders<HotKeysModule> {\n        return {\n            ngModule: HotKeysModule,\n            providers: [\n                NgHotkeysService,\n                NgHotkeysHelpService,\n                NgHotkeysSelectService\n            ]\n        };\n    }\n}\n","(function() {\n    if (typeof Element === \"undefined\") {\n        return;\n    }\n    if (!Element.prototype.matches) {\n        Element.prototype.matches =\n            (Element.prototype as any).msMatchesSelector || Element.prototype.webkitMatchesSelector;\n    }\n\n    if (!Element.prototype.closest) {\n        Element.prototype.closest = function(s) {\n            let el = this;\n\n            do {\n                if (el.matches(s)) return el;\n                el = el.parentElement || el.parentNode;\n            } while (el !== null && el.nodeType === 1);\n            return null;\n        };\n    }\n})();\n\nif (!(Array.prototype as any).flat) {\n    (Array.prototype as any).flat = function(depth) {\n        var flattend = [];\n        (function flat(array, depth) {\n            for (let el of array) {\n                if (Array.isArray(el) && depth > 0) {\n                    flat(el, depth - 1);\n                } else {\n                    flattend.push(el);\n                }\n            }\n        })(this, Math.floor(depth) || 1);\n        return flattend;\n    };\n}\n\nif (!(Array.prototype as any).flatMap) {\n    (Array.prototype as any).flatMap = function() {\n        return Array.prototype.map.apply(this, arguments).flat(1);\n    };\n}\n\n","/*\n * Public API Surface of ng-hotkeys\n */\n\nexport { HotKeysModule } from \"./lib/ng-hotkeys.module\";\nimport \"./lib/polyfills\";\nexport {\n    ShortcutInput,\n    ShortcutEventOutput,\n    AllowIn,\n    Shortcut as ShortcutDirectiveInput\n} from \"./lib/ng-hotkeys.interfaces\";\nexport { NgHotkeysHelpService } from \"./lib/ng-hotkeys-help.service\";\nexport { NgHotkeysSelectService } from \"./lib/ng-hotkeys-select.service\";\nexport { NgHotkeysComponent } from \"./lib/ng-hotkeys.component\";\nexport { NgHotkeysDirective } from \"./lib/ng-hotkeys.directive\";\nexport { NgHotkeysHelpComponent } from \"./lib/ng-hotkeys-help.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["this","i1.NgHotkeysService","i2.NgHotkeysHelpService","i3","i4.NgHotkeysHelpItemComponent"],"mappings":"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"}