@ngrdt/shortcuts 0.0.98 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,321 +1 @@
1
- import { RdtStringUtils } from '@ngrdt/utils';
2
- import * as i0 from '@angular/core';
3
- import { Injectable, EventEmitter, HostListener, Output, Directive } from '@angular/core';
4
- import hotkeys from 'hotkeys-js';
5
- import { Subject, Observable, filter } from 'rxjs';
6
-
7
- const SHORTCUT_SPLIT_KEY = ':';
8
- // Fn key on Thinkpad is emitted as event.code === 'WakeUp' so F1-12 shortcuts won't work
9
- const IGNORED_KEYCODES = ['WakeUp'];
10
- var ShortcutSrcElement;
11
- (function (ShortcutSrcElement) {
12
- ShortcutSrcElement["INPUT"] = "input";
13
- ShortcutSrcElement["OTHER"] = "other";
14
- })(ShortcutSrcElement || (ShortcutSrcElement = {}));
15
- const DEFAULT_SHORTCUT_CONFIG = {
16
- preventDefault: true,
17
- element: undefined,
18
- };
19
-
20
- const WINDOWS_BROWSER_SHORCUTS = [
21
- ['ctrl', 'n'],
22
- ['ctrl', 'shift', 'n'],
23
- ['ctrl', 't'],
24
- ['ctrl', 'shift', 't'],
25
- ['ctrl', 'tab'],
26
- ['ctrl', 'pagedown'],
27
- ['ctrl', 'shift', 'tab'],
28
- ['ctrl', 'pageup'],
29
- ...[...Array(9).keys()].map(num => ['ctrl', String(num + 1)]), // ctrl + 1-9
30
- ['alt', 'home'],
31
- ['alt', 'left'],
32
- ['alt', 'right'],
33
- ['ctrl', 'w'],
34
- ['ctrl', 'f4'],
35
- ['ctrl', 'shift', 'w'],
36
- ['alt', 'f4'],
37
- ['alt', 'space', 'n'],
38
- ['alt', 'space', 'x'],
39
- ['alt', 'f', 'x'],
40
- ['ctrl', 'shift', 'pageup'],
41
- ['ctrl', 'shift', 'pagedown'],
42
- ['alt', 'f'],
43
- ['alt', 'e'],
44
- ['ctrl', 'shift', 'b'],
45
- ['ctrl', 'shift', 'o'],
46
- ['ctrl', 'h'],
47
- ['ctrl', 'j'],
48
- ['shift', 'esc'],
49
- ['shift', 'alt', 't'],
50
- ['f10'],
51
- ['f6'],
52
- ['ctrl', 'f'],
53
- ['f3'],
54
- ['ctrl', 'g'],
55
- ['ctrl', 'shift', 'g'],
56
- ['ctrl', 'shift', 'j'],
57
- ['f12'],
58
- ['ctrl', 'shift', 'del'],
59
- ['f1'],
60
- ['ctrl', 'shift', 'm'],
61
- ['alt', 'shift', 'i'],
62
- ['f7'],
63
- ['ctrl', 'f6'],
64
- ['alt', 'shift', 'a'],
65
- ['ctrl', 'l'],
66
- ['alt', 'd'],
67
- ['f6'],
68
- ['ctrl', 'k'],
69
- ['ctrl', 'e'],
70
- ['ctrl', 'p'],
71
- ['ctrl', 's'],
72
- ['f5'],
73
- ['ctrl', 'r'],
74
- ['shift', 'f5'],
75
- ['ctrl', 'shift', 'r'],
76
- ['esc'],
77
- ['tab'],
78
- ['shift', 'tab'],
79
- ['ctrl', 'o'],
80
- ['ctrl', 'u'],
81
- ['ctrl', 'd'],
82
- ['ctrl', 'shift', 'd'],
83
- ['f11'],
84
- ['ctrl', '+'],
85
- ['ctrl', '-'],
86
- ['ctrl', '0'],
87
- ['space'],
88
- ['pagedown'],
89
- ['shift', 'space'],
90
- ['pageup'],
91
- ['home'],
92
- ['end'],
93
- ['ctrl', 'left'],
94
- ['ctrl', 'right'],
95
- ['ctrl', 'backspace'],
96
- ['alt', 'home'],
97
- ];
98
-
99
- // https://support.google.com/chrome/answer/157179
100
- function sortAndBuildShortcut(shortcut) {
101
- const cpy = [...shortcut];
102
- cpy.sort();
103
- return shortcut.join(SHORTCUT_SPLIT_KEY);
104
- }
105
- function buildShortcutSet(shortcuts) {
106
- const set = new Set();
107
- shortcuts.forEach((s) => set.add(sortAndBuildShortcut(s)));
108
- return set;
109
- }
110
- const BROWSER_SHORTCUT_SET = buildShortcutSet(WINDOWS_BROWSER_SHORCUTS);
111
- function isBrowserShortcut(keys) {
112
- const sorted = sortAndBuildShortcut(keys);
113
- return BROWSER_SHORTCUT_SET.has(sorted);
114
- }
115
-
116
- class RdtShortcut {
117
- hotkeysValue;
118
- keys;
119
- label;
120
- get lastKey() {
121
- return this.keys[this.keys.length - 1];
122
- }
123
- constructor(keys) {
124
- this.keys = keys;
125
- this.hotkeysValue = RdtShortcut.joinKeys(keys);
126
- this.label = RdtShortcut.makeLabel(keys);
127
- }
128
- static joinKeys(keys) {
129
- return keys.join(SHORTCUT_SPLIT_KEY);
130
- }
131
- static makeLabel(keys) {
132
- return keys.map(RdtStringUtils.capitalize).join('+');
133
- }
134
- static create(...keys) {
135
- if (isBrowserShortcut(keys)) {
136
- throw new Error(`Shortcut ${RdtShortcut.joinKeys(keys)} is a browser shortcut!`);
137
- }
138
- return new RdtShortcut(keys);
139
- }
140
- static createUnsafe(...keys) {
141
- return new RdtShortcut(keys);
142
- }
143
- }
144
-
145
- class RdtShortcutService {
146
- bound = new Map();
147
- subject$ = new Subject();
148
- observable$ = this.subject$.asObservable();
149
- constructor() {
150
- // Enables hotkeys on input elements
151
- // Enables hotkeys on input elements
152
- hotkeys.filter = function (event) {
153
- if (IGNORED_KEYCODES.includes(event.code)) {
154
- return false;
155
- }
156
- const tagName = event.target.tagName;
157
- const isInputEl = /^(INPUT|TEXTAREA|SELECT)$/.test(tagName);
158
- const scope = isInputEl
159
- ? ShortcutSrcElement.INPUT
160
- : ShortcutSrcElement.OTHER;
161
- hotkeys.setScope(scope);
162
- return true;
163
- };
164
- }
165
- listen(shortcut, config) {
166
- const patchedConfig = {
167
- ...DEFAULT_SHORTCUT_CONFIG,
168
- ...config,
169
- };
170
- if (Array.isArray(shortcut)) {
171
- return this.listenArray(shortcut, patchedConfig);
172
- }
173
- else {
174
- return this.listenSingle(shortcut, patchedConfig);
175
- }
176
- }
177
- listenArray(shortcuts, config) {
178
- return new Observable((subscriber) => {
179
- const set = new Set(shortcuts);
180
- try {
181
- shortcuts.forEach((s) => this.bind(s, config));
182
- }
183
- catch (ex) {
184
- subscriber.error(ex);
185
- }
186
- const sub = this.observable$
187
- .pipe(filter((evt) => set.has(evt.shortcut)))
188
- .subscribe(subscriber);
189
- return () => {
190
- sub.unsubscribe();
191
- shortcuts.forEach((s) => this.unbind(s, config));
192
- };
193
- });
194
- }
195
- listenSingle(shortcut, config) {
196
- return new Observable((subscriber) => {
197
- try {
198
- this.bind(shortcut, config);
199
- }
200
- catch (ex) {
201
- subscriber.error(ex);
202
- }
203
- const sub = this.observable$
204
- .pipe(filter((evt) => evt.shortcut === shortcut))
205
- .subscribe(subscriber);
206
- return () => {
207
- sub.unsubscribe();
208
- this.unbind(shortcut, config);
209
- };
210
- });
211
- }
212
- bind(shortcut, config) {
213
- const options = {
214
- element: config.element,
215
- splitKey: SHORTCUT_SPLIT_KEY,
216
- };
217
- if (this.bound.get(config.element)?.[shortcut.hotkeysValue]) {
218
- throw new Error(`Shortcut ${shortcut} is already binded!`);
219
- }
220
- if (!this.bound.has(config.element)) {
221
- const newObj = {
222
- [shortcut.hotkeysValue]: shortcut,
223
- };
224
- this.bound.set(config.element, newObj);
225
- }
226
- else {
227
- this.bound.get(config.element)[shortcut.hotkeysValue] = shortcut;
228
- }
229
- hotkeys(shortcut.hotkeysValue, options, this.keyHandlerFactory(config));
230
- }
231
- unbind(shortcut, config) {
232
- const obj = this.bound.get(config.element);
233
- if (obj?.[shortcut.hotkeysValue]) {
234
- obj[shortcut.hotkeysValue] = undefined;
235
- if (Object.keys(obj).every((key) => obj[key] === undefined)) {
236
- this.bound.delete(config.element);
237
- }
238
- hotkeys.unbind(shortcut.hotkeysValue);
239
- }
240
- }
241
- keyHandlerFactory(config) {
242
- return (keyboardEvent, hotkeysEvent) => {
243
- if (config.preventDefault) {
244
- keyboardEvent.preventDefault();
245
- }
246
- const evt = {
247
- shortcut: this.bound.get(config.element)[hotkeysEvent.shortcut],
248
- src: hotkeysEvent.scope,
249
- originalEvent: keyboardEvent,
250
- };
251
- this.subject$.next(evt);
252
- return !config.preventDefault;
253
- };
254
- }
255
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: RdtShortcutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
256
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: RdtShortcutService, providedIn: 'root' });
257
- }
258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: RdtShortcutService, decorators: [{
259
- type: Injectable,
260
- args: [{
261
- providedIn: 'root',
262
- }]
263
- }], ctorParameters: () => [] });
264
-
265
- // Outputs keydown event if only one key was pressed at once
266
- class RdtKeyListenerDirective {
267
- keysPressed = new Set();
268
- pressedAtOnce = new Set();
269
- output = new EventEmitter();
270
- onKeyDown(event) {
271
- if (!this.pressedAtOnce.has(event.key)) {
272
- this.keysPressed.add(event.key);
273
- this.pressedAtOnce.add(event.key);
274
- if (this.pressedAtOnce.size === 1) {
275
- this.output.emit(event);
276
- }
277
- }
278
- }
279
- onKeyUp(event) {
280
- this.keysPressed.delete(event.key);
281
- this.pressedAtOnce.delete(event.key);
282
- if (this.keysPressed.size === 0) {
283
- this.pressedAtOnce.clear();
284
- }
285
- }
286
- onWindowFocus() {
287
- this.pressedAtOnce.clear();
288
- this.keysPressed.clear();
289
- }
290
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: RdtKeyListenerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
291
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.0", type: RdtKeyListenerDirective, isStandalone: true, selector: "[rdtKeyListener]", outputs: { output: "rdtKeyListener" }, host: { listeners: { "keydown": "onKeyDown($event)", "window:keyup": "onKeyUp($event)", "keyup": "onKeyUp($event)", "window:focus": "onWindowFocus()" } }, ngImport: i0 });
292
- }
293
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: RdtKeyListenerDirective, decorators: [{
294
- type: Directive,
295
- args: [{
296
- selector: '[rdtKeyListener]',
297
- standalone: true,
298
- }]
299
- }], propDecorators: { output: [{
300
- type: Output,
301
- args: ['rdtKeyListener']
302
- }], onKeyDown: [{
303
- type: HostListener,
304
- args: ['keydown', ['$event']]
305
- }], onKeyUp: [{
306
- type: HostListener,
307
- args: ['window:keyup', ['$event']]
308
- }, {
309
- type: HostListener,
310
- args: ['keyup', ['$event']]
311
- }], onWindowFocus: [{
312
- type: HostListener,
313
- args: ['window:focus']
314
- }] } });
315
-
316
- /**
317
- * Generated bundle index. Do not edit.
318
- */
319
-
320
- export { DEFAULT_SHORTCUT_CONFIG, IGNORED_KEYCODES, RdtKeyListenerDirective, RdtShortcut, RdtShortcutService, SHORTCUT_SPLIT_KEY, ShortcutSrcElement };
321
- //# sourceMappingURL=ngrdt-shortcuts.mjs.map
1
+ import{RdtStringUtils as t}from"@ngrdt/utils";import*as e from"@angular/core";import{Injectable as n,EventEmitter as r,HostListener as s,Output as o,Directive as a}from"@angular/core";import c from"hotkeys-js";import{Subject as i,Observable as l,filter as m}from"rxjs";const d=":",h=["WakeUp"];var p;!function(t){t.INPUT="input",t.OTHER="other"}(p||(p={}));const u={preventDefault:!0,element:void 0},f=[["command","n"],["command","shift","n"],["command","t"],["command","shift","t"],["command","option","right"],["ctrl","tab"],["command","option","left"],["ctrl","shift","tab"],...[...Array(9).keys()].map(t=>["command",String(t+1)]),["command","shift","["],["command","shift","]"],["command","m"],["command","h"],["command","q"],["command","w"],["command","shift","w"],["command","["],["command","]"],["command","shift","b"],["command","option","b"],["command",","],["command","y"],["command","shift","j"],["command","option","l"],["command","shift","del"],["command","f"],["command","g"],["command","shift","g"],["command","e"],["command","option","f"],["command","l"],["command","option","i"],["command","option","j"],["f12"],["command","u"],["command","shift","m"],["command","p"],["command","s"],["command","r"],["command","shift","r"],["esc"],["command","="],["command","-"],["command","0"],["command","ctrl","f"],["space"],["shift","space"],["command","up"],["command","down"],["command","left"],["command","right"],["tab"],["shift","tab"],["command","o"],["command","d"],["command","shift","d"],["command","k"]],y=[["ctrl","n"],["ctrl","shift","n"],["ctrl","t"],["ctrl","shift","t"],["ctrl","tab"],["ctrl","pagedown"],["ctrl","shift","tab"],["ctrl","pageup"],...[...Array(9).keys()].map(t=>["ctrl",String(t+1)]),["alt","home"],["alt","left"],["alt","right"],["ctrl","w"],["ctrl","f4"],["ctrl","shift","w"],["alt","f4"],["alt","space","n"],["alt","space","x"],["alt","f","x"],["ctrl","shift","pageup"],["ctrl","shift","pagedown"],["alt","f"],["alt","e"],["ctrl","shift","b"],["ctrl","shift","o"],["ctrl","h"],["ctrl","j"],["shift","esc"],["shift","alt","t"],["f10"],["f6"],["ctrl","f"],["f3"],["ctrl","g"],["ctrl","shift","g"],["ctrl","shift","j"],["f12"],["ctrl","shift","del"],["f1"],["ctrl","shift","m"],["alt","shift","i"],["f7"],["ctrl","f6"],["alt","shift","a"],["ctrl","l"],["alt","d"],["f6"],["ctrl","k"],["ctrl","e"],["ctrl","p"],["ctrl","s"],["f5"],["ctrl","r"],["shift","f5"],["ctrl","shift","r"],["esc"],["tab"],["shift","tab"],["ctrl","o"],["ctrl","u"],["ctrl","d"],["ctrl","shift","d"],["f11"],["ctrl","+"],["ctrl","-"],["ctrl","0"],["space"],["pagedown"],["shift","space"],["pageup"],["home"],["end"],["ctrl","left"],["ctrl","right"],["ctrl","backspace"],["alt","home"]];function b(t){return[...t].sort(),t.join(d)}const g=function(t){const e=new Set;return t.forEach(t=>e.add(b(t))),e}("undefined"!=typeof navigator&&/Mac/i.test(navigator.platform)?f:y);class k{hotkeysValue;keys;label;get lastKey(){return this.keys[this.keys.length-1]}constructor(t){this.keys=t,this.hotkeysValue=k.joinKeys(t),this.label=k.makeLabel(t)}static joinKeys(t){return t.join(d)}static makeLabel(e){return e.map(t.capitalize).join("+")}static create(...t){if(function(t){const e=b(t);return g.has(e)}(t))throw new Error(`Shortcut ${k.joinKeys(t)} is a browser shortcut!`);return new k(t)}static createUnsafe(...t){return new k(t)}}class w{bound=new Map;subject$=new i;observable$=this.subject$.asObservable();constructor(){c.filter=function(t){if(h.includes(t.code))return!1;const e=t.target.tagName,n=/^(INPUT|TEXTAREA|SELECT)$/.test(e)?p.INPUT:p.OTHER;return c.setScope(n),!0}}listen(t,e){const n={...u,...e};return Array.isArray(t)?this.listenArray(t,n):this.listenSingle(t,n)}listenArray(t,e){return new l(n=>{const r=new Set(t);try{t.forEach(t=>this.bind(t,e))}catch(t){n.error(t)}const s=this.observable$.pipe(m(t=>r.has(t.shortcut))).subscribe(n);return()=>{s.unsubscribe(),t.forEach(t=>this.unbind(t,e))}})}listenSingle(t,e){return new l(n=>{try{this.bind(t,e)}catch(t){n.error(t)}const r=this.observable$.pipe(m(e=>e.shortcut===t)).subscribe(n);return()=>{r.unsubscribe(),this.unbind(t,e)}})}bind(t,e){const n={element:e.element,splitKey:d};if(this.bound.get(e.element)?.[t.hotkeysValue])throw new Error(`Shortcut ${t} is already binded!`);if(this.bound.has(e.element))this.bound.get(e.element)[t.hotkeysValue]=t;else{const n={[t.hotkeysValue]:t};this.bound.set(e.element,n)}c(t.hotkeysValue,n,this.keyHandlerFactory(e))}unbind(t,e){const n=this.bound.get(e.element);n?.[t.hotkeysValue]&&(n[t.hotkeysValue]=void 0,Object.keys(n).every(t=>void 0===n[t])&&this.bound.delete(e.element),c.unbind(t.hotkeysValue))}keyHandlerFactory(t){return(e,n)=>{t.preventDefault&&e.preventDefault();const r={shortcut:this.bound.get(t.element)[n.shortcut],src:n.scope,originalEvent:e};return this.subject$.next(r),!t.preventDefault}}static"ɵfac"=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.1.2",ngImport:e,type:w,deps:[],target:e.ɵɵFactoryTarget.Injectable});static"ɵprov"=e.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"21.1.2",ngImport:e,type:w,providedIn:"root"})}e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.1.2",ngImport:e,type:w,decorators:[{type:n,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});class v{keysPressed=new Set;pressedAtOnce=new Set;output=new r;onKeyDown(t){this.pressedAtOnce.has(t.key)||(this.keysPressed.add(t.key),this.pressedAtOnce.add(t.key),1===this.pressedAtOnce.size&&this.output.emit(t))}onKeyUp(t){this.keysPressed.delete(t.key),this.pressedAtOnce.delete(t.key),0===this.keysPressed.size&&this.pressedAtOnce.clear()}onWindowFocus(){this.pressedAtOnce.clear(),this.keysPressed.clear()}static"ɵfac"=e.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"21.1.2",ngImport:e,type:v,deps:[],target:e.ɵɵFactoryTarget.Directive});static"ɵdir"=e.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"21.1.2",type:v,isStandalone:!0,selector:"[rdtKeyListener]",outputs:{output:"rdtKeyListener"},host:{listeners:{keydown:"onKeyDown($event)","window:keyup":"onKeyUp($event)",keyup:"onKeyUp($event)","window:focus":"onWindowFocus()"}},ngImport:e})}e.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"21.1.2",ngImport:e,type:v,decorators:[{type:a,args:[{selector:"[rdtKeyListener]",standalone:!0}]}],propDecorators:{output:[{type:o,args:["rdtKeyListener"]}],onKeyDown:[{type:s,args:["keydown",["$event"]]}],onKeyUp:[{type:s,args:["window:keyup",["$event"]]},{type:s,args:["keyup",["$event"]]}],onWindowFocus:[{type:s,args:["window:focus"]}]}});export{u as DEFAULT_SHORTCUT_CONFIG,h as IGNORED_KEYCODES,v as RdtKeyListenerDirective,k as RdtShortcut,w as RdtShortcutService,d as SHORTCUT_SPLIT_KEY,p as ShortcutSrcElement};
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@ngrdt/shortcuts",
3
- "version": "0.0.98",
3
+ "version": "0.1.0",
4
4
  "peerDependencies": {
5
- "@angular/core": ">=20.0.0",
5
+ "@angular/core": ">=21.0.0",
6
6
  "rxjs": ">=7.0.0",
7
7
  "hotkeys-js": ">=3.10.0",
8
- "@ngrdt/router": "^0.0.98"
8
+ "@ngrdt/utils": "^0.1.0"
9
9
  },
10
10
  "sideEffects": false,
11
11
  "module": "fesm2022/ngrdt-shortcuts.mjs",
12
- "typings": "index.d.ts",
12
+ "typings": "types/ngrdt-shortcuts.d.ts",
13
13
  "exports": {
14
14
  "./package.json": {
15
15
  "default": "./package.json"
16
16
  },
17
17
  ".": {
18
- "types": "./index.d.ts",
18
+ "types": "./types/ngrdt-shortcuts.d.ts",
19
19
  "default": "./fesm2022/ngrdt-shortcuts.mjs"
20
20
  }
21
21
  },
package/README.md DELETED
@@ -1,7 +0,0 @@
1
- # @ngrdt/shortcuts
2
-
3
- This library was generated with [Nx](https://nx.dev).
4
-
5
- ## Running unit tests
6
-
7
- Run `nx test @ngrdt/shortcuts` to execute the unit tests.
@@ -1 +0,0 @@
1
- {"version":3,"file":"ngrdt-shortcuts.mjs","sources":["../tmp-esm2022/lib/shortcuts/rdt-shortcut.models.js","../tmp-esm2022/lib/shortcuts/windows-browser-shortcuts.js","../tmp-esm2022/lib/shortcuts/utils.js","../tmp-esm2022/lib/shortcuts/rdt-shortcut.js","../tmp-esm2022/lib/shortcuts/providers/rdt-shortcut.service.js","../tmp-esm2022/lib/shortcuts/directives/rdt-key-listener.directive.js","../tmp-esm2022/ngrdt-shortcuts.js"],"sourcesContent":["export const SHORTCUT_SPLIT_KEY = ':';\n// Fn key on Thinkpad is emitted as event.code === 'WakeUp' so F1-12 shortcuts won't work\nexport const IGNORED_KEYCODES = ['WakeUp'];\nexport var ShortcutSrcElement;\n(function (ShortcutSrcElement) {\n ShortcutSrcElement[\"INPUT\"] = \"input\";\n ShortcutSrcElement[\"OTHER\"] = \"other\";\n})(ShortcutSrcElement || (ShortcutSrcElement = {}));\nexport const DEFAULT_SHORTCUT_CONFIG = {\n preventDefault: true,\n element: undefined,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXNob3J0Y3V0Lm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9zaG9ydGN1dHMvc3JjL2xpYi9zaG9ydGN1dHMvcmR0LXNob3J0Y3V0Lm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFFdEMseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFM0MsTUFBTSxDQUFOLElBQVksa0JBR1g7QUFIRCxXQUFZLGtCQUFrQjtJQUM1QixxQ0FBZSxDQUFBO0lBQ2YscUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUc3QjtBQWFELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQjtJQUN4RCxjQUFjLEVBQUUsSUFBSTtJQUNwQixPQUFPLEVBQUUsU0FBUztDQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmR0U2hvcnRjdXQgfSBmcm9tICcuL3JkdC1zaG9ydGN1dCc7XHJcblxyXG5leHBvcnQgY29uc3QgU0hPUlRDVVRfU1BMSVRfS0VZID0gJzonO1xyXG5cclxuLy8gRm4ga2V5IG9uIFRoaW5rcGFkIGlzIGVtaXR0ZWQgYXMgZXZlbnQuY29kZSA9PT0gJ1dha2VVcCcgc28gRjEtMTIgc2hvcnRjdXRzIHdvbid0IHdvcmtcclxuZXhwb3J0IGNvbnN0IElHTk9SRURfS0VZQ09ERVMgPSBbJ1dha2VVcCddO1xyXG5cclxuZXhwb3J0IGVudW0gU2hvcnRjdXRTcmNFbGVtZW50IHtcclxuICBJTlBVVCA9ICdpbnB1dCcsXHJcbiAgT1RIRVIgPSAnb3RoZXInLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdFNob3J0Y3V0RXZlbnQge1xyXG4gIHNob3J0Y3V0OiBSZHRTaG9ydGN1dDtcclxuICBzcmM6IFNob3J0Y3V0U3JjRWxlbWVudDtcclxuICBvcmlnaW5hbEV2ZW50OiBLZXlib2FyZEV2ZW50O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdFNob3J0Y3V0Q29uZmlnIHtcclxuICBwcmV2ZW50RGVmYXVsdD86IGJvb2xlYW47XHJcbiAgZWxlbWVudD86IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9TSE9SVENVVF9DT05GSUc6IFJkdFNob3J0Y3V0Q29uZmlnID0ge1xyXG4gIHByZXZlbnREZWZhdWx0OiB0cnVlLFxyXG4gIGVsZW1lbnQ6IHVuZGVmaW5lZCxcclxufTtcclxuIl19","export const WINDOWS_BROWSER_SHORCUTS = [\n ['ctrl', 'n'],\n ['ctrl', 'shift', 'n'],\n ['ctrl', 't'],\n ['ctrl', 'shift', 't'],\n ['ctrl', 'tab'],\n ['ctrl', 'pagedown'],\n ['ctrl', 'shift', 'tab'],\n ['ctrl', 'pageup'],\n ...[...Array(9).keys()].map(num => ['ctrl', String(num + 1)]), // ctrl + 1-9\n ['alt', 'home'],\n ['alt', 'left'],\n ['alt', 'right'],\n ['ctrl', 'w'],\n ['ctrl', 'f4'],\n ['ctrl', 'shift', 'w'],\n ['alt', 'f4'],\n ['alt', 'space', 'n'],\n ['alt', 'space', 'x'],\n ['alt', 'f', 'x'],\n ['ctrl', 'shift', 'pageup'],\n ['ctrl', 'shift', 'pagedown'],\n ['alt', 'f'],\n ['alt', 'e'],\n ['ctrl', 'shift', 'b'],\n ['ctrl', 'shift', 'o'],\n ['ctrl', 'h'],\n ['ctrl', 'j'],\n ['shift', 'esc'],\n ['shift', 'alt', 't'],\n ['f10'],\n ['f6'],\n ['ctrl', 'f'],\n ['f3'],\n ['ctrl', 'g'],\n ['ctrl', 'shift', 'g'],\n ['ctrl', 'shift', 'j'],\n ['f12'],\n ['ctrl', 'shift', 'del'],\n ['f1'],\n ['ctrl', 'shift', 'm'],\n ['alt', 'shift', 'i'],\n ['f7'],\n ['ctrl', 'f6'],\n ['alt', 'shift', 'a'],\n ['ctrl', 'l'],\n ['alt', 'd'],\n ['f6'],\n ['ctrl', 'k'],\n ['ctrl', 'e'],\n ['ctrl', 'p'],\n ['ctrl', 's'],\n ['f5'],\n ['ctrl', 'r'],\n ['shift', 'f5'],\n ['ctrl', 'shift', 'r'],\n ['esc'],\n ['tab'],\n ['shift', 'tab'],\n ['ctrl', 'o'],\n ['ctrl', 'u'],\n ['ctrl', 'd'],\n ['ctrl', 'shift', 'd'],\n ['f11'],\n ['ctrl', '+'],\n ['ctrl', '-'],\n ['ctrl', '0'],\n ['space'],\n ['pagedown'],\n ['shift', 'space'],\n ['pageup'],\n ['home'],\n ['end'],\n ['ctrl', 'left'],\n ['ctrl', 'right'],\n ['ctrl', 'backspace'],\n ['alt', 'home'],\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93cy1icm93c2VyLXNob3J0Y3V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9zaG9ydGN1dHMvc3JjL2xpYi9zaG9ydGN1dHMvd2luZG93cy1icm93c2VyLXNob3J0Y3V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0QyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7SUFDYixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDO0lBQ3RCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztJQUNiLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUM7SUFDdEIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO0lBQ2YsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO0lBQ3BCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUM7SUFDeEIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWE7SUFDNUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQ2YsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQ2YsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO0lBQ2hCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztJQUNiLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztJQUNkLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUM7SUFDdEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO0lBQ2IsQ0FBQyxLQUFLLEVBQUUsT0FB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QUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFdJTkRPV1NfQlJPV1NFUl9TSE9SQ1VUUyA9IFtcclxuICBbJ2N0cmwnLCAnbiddLFxyXG4gIFsnY3RybCcsICdzaGlmdCcsICduJ10sXHJcbiAgWydjdHJsJywgJ3QnXSxcclxuICBbJ2N0cmwnLCAnc2hpZnQnLCAndCddLFxyXG4gIFsnY3RybCcsICd0YWInXSxcclxuICBbJ2N0cmwnLCAncGFnZWRvd24nXSxcclxuICBbJ2N0cmwnLCAnc2hpZnQnLCAndGFiJ10sXHJcbiAgWydjdHJsJywgJ3BhZ2V1cCddLFxyXG4gIC4uLlsuLi5BcnJheSg5KS5rZXlzKCldLm1hcChudW0gPT4gWydjdHJsJywgU3RyaW5nKG51bSArIDEpXSksIC8vIGN0cmwgKyAxLTlcclxuICBbJ2FsdCcsICdob21lJ10sXHJcbiAgWydhbHQnLCAnbGVmdCddLFxyXG4gIFsnYWx0JywgJ3JpZ2h0J10sXHJcbiAgWydjdHJsJywgJ3cnXSxcclxuICBbJ2N0cmwnLCAnZjQnXSxcclxuICBbJ2N0cmwnLCAnc2hpZnQnLCAndyddLFxyXG4gIFsnYWx0JywgJ2Y0J10sXHJcbiAgWydhbHQnLCAnc3BhY2UnLCAnbiddLFxyXG4gIFsnYWx0JywgJ3NwYWNlJywgJ3gnXSxcclxuICBbJ2FsdCcsICdmJywgJ3gnXSxcclxuICBbJ2N0cmwnLCAnc2hpZnQnLCAncGFnZXVwJ10sXHJcbiAgWydjdHJsJywgJ3NoaWZ0JywgJ3BhZ2Vkb3duJ10sXHJcbiAgWydhbHQnLCAnZiddLFxyXG4gIFsnYWx0JywgJ2UnXSxcclxuICBbJ2N0cmwnLCAnc2hpZnQnLCAnYiddLFxyXG4gIFsnY3RybCcsICdzaGlmdCcsICdvJ10sXHJcbiAgWydjdHJsJywgJ2gnXSxcclxuICBbJ2N0cmwnLCAnaiddLFxyXG4gIFsnc2hpZnQnLCAnZXNjJ10sXHJcbiAgWydzaGlmdCcsICdhbHQnLCAndCddLFxyXG4gIFsnZjEwJ10sXHJcbiAgWydmNiddLFxyXG4gIFsnY3RybCcsICdmJ10sXHJcbiAgWydmMyddLFxyXG4gIFsnY3RybCcsICdnJ10sXHJcbiAgWydjdHJsJywgJ3NoaWZ0JywgJ2cnXSxcclxuICBbJ2N0cmwnLCAnc2hpZnQnLCAnaiddLFxyXG4gIFsnZjEyJ10sXHJcbiAgWydjdHJsJywgJ3NoaWZ0JywgJ2RlbCddLFxyXG4gIFsnZjEnXSxcclxuICBbJ2N0cmwnLCAnc2hpZnQnLCAnbSddLFxyXG4gIFsnYWx0JywgJ3NoaWZ0JywgJ2knXSxcclxuICBbJ2Y3J10sXHJcbiAgWydjdHJsJywgJ2Y2J10sXHJcbiAgWydhbHQnLCAnc2hpZnQnLCAnYSddLFxyXG4gIFsnY3RybCcsICdsJ10sXHJcbiAgWydhbHQnLCAnZCddLFxyXG4gIFsnZjYnXSxcclxuICBbJ2N0cmwnLCAnayddLFxyXG4gIFsnY3RybCcsICdlJ10sXHJcbiAgWydjdHJsJywgJ3AnXSxcclxuICBbJ2N0cmwnLCAncyddLFxyXG4gIFsnZjUnXSxcclxuICBbJ2N0cmwnLCAnciddLFxyXG4gIFsnc2hpZnQnLCAnZjUnXSxcclxuICBbJ2N0cmwnLCAnc2hpZnQnLCAnciddLFxyXG4gIFsnZXNjJ10sXHJcbiAgWyd0YWInXSxcclxuICBbJ3NoaWZ0JywgJ3RhYiddLFxyXG4gIFsnY3RybCcsICdvJ10sXHJcbiAgWydjdHJsJywgJ3UnXSxcclxuICBbJ2N0cmwnLCAnZCddLFxyXG4gIFsnY3RybCcsICdzaGlmdCcsICdkJ10sXHJcbiAgWydmMTEnXSxcclxuICBbJ2N0cmwnLCAnKyddLFxyXG4gIFsnY3RybCcsICctJ10sXHJcbiAgWydjdHJsJywgJzAnXSxcclxuICBbJ3NwYWNlJ10sXHJcbiAgWydwYWdlZG93biddLFxyXG4gIFsnc2hpZnQnLCAnc3BhY2UnXSxcclxuICBbJ3BhZ2V1cCddLFxyXG4gIFsnaG9tZSddLFxyXG4gIFsnZW5kJ10sXHJcbiAgWydjdHJsJywgJ2xlZnQnXSxcclxuICBbJ2N0cmwnLCAncmlnaHQnXSxcclxuICBbJ2N0cmwnLCAnYmFja3NwYWNlJ10sXHJcbiAgWydhbHQnLCAnaG9tZSddLFxyXG5dO1xyXG4iXX0=","// https://support.google.com/chrome/answer/157179\nimport { SHORTCUT_SPLIT_KEY } from './rdt-shortcut.models';\nimport { WINDOWS_BROWSER_SHORCUTS } from './windows-browser-shortcuts';\nfunction sortAndBuildShortcut(shortcut) {\n const cpy = [...shortcut];\n cpy.sort();\n return shortcut.join(SHORTCUT_SPLIT_KEY);\n}\nfunction buildShortcutSet(shortcuts) {\n const set = new Set();\n shortcuts.forEach((s) => set.add(sortAndBuildShortcut(s)));\n return set;\n}\nconst BROWSER_SHORTCUT_SET = buildShortcutSet(WINDOWS_BROWSER_SHORCUTS);\nexport function isBrowserShortcut(keys) {\n const sorted = sortAndBuildShortcut(keys);\n return BROWSER_SHORTCUT_SET.has(sorted);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvc2hvcnRjdXRzL3NyYy9saWIvc2hvcnRjdXRzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUFrRDtBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV2RSxTQUFTLG9CQUFvQixDQUFDLFFBQWtCO0lBQzlDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDWCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFxQjtJQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzlCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUV4RSxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBYztJQUM5QyxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxPQUFPLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vY2hyb21lL2Fuc3dlci8xNTcxNzlcclxuaW1wb3J0IHsgU0hPUlRDVVRfU1BMSVRfS0VZIH0gZnJvbSAnLi9yZHQtc2hvcnRjdXQubW9kZWxzJztcclxuaW1wb3J0IHsgV0lORE9XU19CUk9XU0VSX1NIT1JDVVRTIH0gZnJvbSAnLi93aW5kb3dzLWJyb3dzZXItc2hvcnRjdXRzJztcclxuXHJcbmZ1bmN0aW9uIHNvcnRBbmRCdWlsZFNob3J0Y3V0KHNob3J0Y3V0OiBzdHJpbmdbXSkge1xyXG4gIGNvbnN0IGNweSA9IFsuLi5zaG9ydGN1dF07XHJcbiAgY3B5LnNvcnQoKTtcclxuICByZXR1cm4gc2hvcnRjdXQuam9pbihTSE9SVENVVF9TUExJVF9LRVkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBidWlsZFNob3J0Y3V0U2V0KHNob3J0Y3V0czogc3RyaW5nW11bXSkge1xyXG4gIGNvbnN0IHNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gIHNob3J0Y3V0cy5mb3JFYWNoKChzKSA9PiBzZXQuYWRkKHNvcnRBbmRCdWlsZFNob3J0Y3V0KHMpKSk7XHJcbiAgcmV0dXJuIHNldDtcclxufVxyXG5cclxuY29uc3QgQlJPV1NFUl9TSE9SVENVVF9TRVQgPSBidWlsZFNob3J0Y3V0U2V0KFdJTkRPV1NfQlJPV1NFUl9TSE9SQ1VUUyk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCcm93c2VyU2hvcnRjdXQoa2V5czogc3RyaW5nW10pIHtcclxuICBjb25zdCBzb3J0ZWQgPSBzb3J0QW5kQnVpbGRTaG9ydGN1dChrZXlzKTtcclxuICByZXR1cm4gQlJPV1NFUl9TSE9SVENVVF9TRVQuaGFzKHNvcnRlZCk7XHJcbn1cclxuIl19","import { isBrowserShortcut } from './utils';\nimport { SHORTCUT_SPLIT_KEY } from './rdt-shortcut.models';\nimport { RdtStringUtils } from '@ngrdt/utils';\nexport class RdtShortcut {\n hotkeysValue;\n keys;\n label;\n get lastKey() {\n return this.keys[this.keys.length - 1];\n }\n constructor(keys) {\n this.keys = keys;\n this.hotkeysValue = RdtShortcut.joinKeys(keys);\n this.label = RdtShortcut.makeLabel(keys);\n }\n static joinKeys(keys) {\n return keys.join(SHORTCUT_SPLIT_KEY);\n }\n static makeLabel(keys) {\n return keys.map(RdtStringUtils.capitalize).join('+');\n }\n static create(...keys) {\n if (isBrowserShortcut(keys)) {\n throw new Error(`Shortcut ${RdtShortcut.joinKeys(keys)} is a browser shortcut!`);\n }\n return new RdtShortcut(keys);\n }\n static createUnsafe(...keys) {\n return new RdtShortcut(keys);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXNob3J0Y3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3Nob3J0Y3V0cy9zcmMvbGliL3Nob3J0Y3V0cy9yZHQtc2hvcnRjdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsTUFBTSxPQUFPLFdBQVc7SUFDYixZQUFZLENBQVM7SUFDckIsSUFBSSxDQUFXO0lBQ2YsS0FBSyxDQUFTO0lBRXZCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsWUFBb0IsSUFBYztRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQWM7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBYztRQUNyQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQWM7UUFDN0IsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQ2IsWUFBWSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FDaEUsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBYztRQUNuQyxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQnJvd3NlclNob3J0Y3V0IH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IFNIT1JUQ1VUX1NQTElUX0tFWSB9IGZyb20gJy4vcmR0LXNob3J0Y3V0Lm1vZGVscyc7XHJcbmltcG9ydCB7IFJkdFN0cmluZ1V0aWxzIH0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZHRTaG9ydGN1dCB7XHJcbiAgcmVhZG9ubHkgaG90a2V5c1ZhbHVlOiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkga2V5czogc3RyaW5nW107XHJcbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgZ2V0IGxhc3RLZXkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5rZXlzW3RoaXMua2V5cy5sZW5ndGggLSAxXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3Ioa2V5czogc3RyaW5nW10pIHtcclxuICAgIHRoaXMua2V5cyA9IGtleXM7XHJcbiAgICB0aGlzLmhvdGtleXNWYWx1ZSA9IFJkdFNob3J0Y3V0LmpvaW5LZXlzKGtleXMpO1xyXG4gICAgdGhpcy5sYWJlbCA9IFJkdFNob3J0Y3V0Lm1ha2VMYWJlbChrZXlzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGpvaW5LZXlzKGtleXM6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4ga2V5cy5qb2luKFNIT1JUQ1VUX1NQTElUX0tFWSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBtYWtlTGFiZWwoa2V5czogc3RyaW5nW10pIHtcclxuICAgIHJldHVybiBrZXlzLm1hcChSZHRTdHJpbmdVdGlscy5jYXBpdGFsaXplKS5qb2luKCcrJyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlKC4uLmtleXM6IHN0cmluZ1tdKSB7XHJcbiAgICBpZiAoaXNCcm93c2VyU2hvcnRjdXQoa2V5cykpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBTaG9ydGN1dCAke1JkdFNob3J0Y3V0LmpvaW5LZXlzKGtleXMpfSBpcyBhIGJyb3dzZXIgc2hvcnRjdXQhYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBSZHRTaG9ydGN1dChrZXlzKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVVbnNhZmUoLi4ua2V5czogc3RyaW5nW10pIHtcclxuICAgIHJldHVybiBuZXcgUmR0U2hvcnRjdXQoa2V5cyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { Injectable } from '@angular/core';\nimport hotkeys from 'hotkeys-js';\nimport { filter, Observable, Subject } from 'rxjs';\nimport { DEFAULT_SHORTCUT_CONFIG, IGNORED_KEYCODES, SHORTCUT_SPLIT_KEY, ShortcutSrcElement, } from '../rdt-shortcut.models';\nimport * as i0 from \"@angular/core\";\nexport class RdtShortcutService {\n bound = new Map();\n subject$ = new Subject();\n observable$ = this.subject$.asObservable();\n constructor() {\n // Enables hotkeys on input elements\n // Enables hotkeys on input elements\n hotkeys.filter = function (event) {\n if (IGNORED_KEYCODES.includes(event.code)) {\n return false;\n }\n const tagName = event.target.tagName;\n const isInputEl = /^(INPUT|TEXTAREA|SELECT)$/.test(tagName);\n const scope = isInputEl\n ? ShortcutSrcElement.INPUT\n : ShortcutSrcElement.OTHER;\n hotkeys.setScope(scope);\n return true;\n };\n }\n listen(shortcut, config) {\n const patchedConfig = {\n ...DEFAULT_SHORTCUT_CONFIG,\n ...config,\n };\n if (Array.isArray(shortcut)) {\n return this.listenArray(shortcut, patchedConfig);\n }\n else {\n return this.listenSingle(shortcut, patchedConfig);\n }\n }\n listenArray(shortcuts, config) {\n return new Observable((subscriber) => {\n const set = new Set(shortcuts);\n try {\n shortcuts.forEach((s) => this.bind(s, config));\n }\n catch (ex) {\n subscriber.error(ex);\n }\n const sub = this.observable$\n .pipe(filter((evt) => set.has(evt.shortcut)))\n .subscribe(subscriber);\n return () => {\n sub.unsubscribe();\n shortcuts.forEach((s) => this.unbind(s, config));\n };\n });\n }\n listenSingle(shortcut, config) {\n return new Observable((subscriber) => {\n try {\n this.bind(shortcut, config);\n }\n catch (ex) {\n subscriber.error(ex);\n }\n const sub = this.observable$\n .pipe(filter((evt) => evt.shortcut === shortcut))\n .subscribe(subscriber);\n return () => {\n sub.unsubscribe();\n this.unbind(shortcut, config);\n };\n });\n }\n bind(shortcut, config) {\n const options = {\n element: config.element,\n splitKey: SHORTCUT_SPLIT_KEY,\n };\n if (this.bound.get(config.element)?.[shortcut.hotkeysValue]) {\n throw new Error(`Shortcut ${shortcut} is already binded!`);\n }\n if (!this.bound.has(config.element)) {\n const newObj = {\n [shortcut.hotkeysValue]: shortcut,\n };\n this.bound.set(config.element, newObj);\n }\n else {\n this.bound.get(config.element)[shortcut.hotkeysValue] = shortcut;\n }\n hotkeys(shortcut.hotkeysValue, options, this.keyHandlerFactory(config));\n }\n unbind(shortcut, config) {\n const obj = this.bound.get(config.element);\n if (obj?.[shortcut.hotkeysValue]) {\n obj[shortcut.hotkeysValue] = undefined;\n if (Object.keys(obj).every((key) => obj[key] === undefined)) {\n this.bound.delete(config.element);\n }\n hotkeys.unbind(shortcut.hotkeysValue);\n }\n }\n keyHandlerFactory(config) {\n return (keyboardEvent, hotkeysEvent) => {\n if (config.preventDefault) {\n keyboardEvent.preventDefault();\n }\n const evt = {\n shortcut: this.bound.get(config.element)[hotkeysEvent.shortcut],\n src: hotkeysEvent.scope,\n originalEvent: keyboardEvent,\n };\n this.subject$.next(evt);\n return !config.preventDefault;\n };\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtShortcutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtShortcutService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtShortcutService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXNob3J0Y3V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvc2hvcnRjdXRzL3NyYy9saWIvc2hvcnRjdXRzL3Byb3ZpZGVycy9yZHQtc2hvcnRjdXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sT0FBcUMsTUFBTSxZQUFZLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUVsQixrQkFBa0IsR0FDbkIsTUFBTSx3QkFBd0IsQ0FBQzs7QUFjaEMsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixLQUFLLEdBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNKLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBb0IsQ0FBQztJQUMzQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVuRDtRQUNFLG9DQUFvQztRQUNwQyxvQ0FBb0M7UUFDcEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLEtBQW9CO1lBQzdDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBSSxLQUFLLENBQUMsTUFBc0IsQ0FBQyxPQUFPLENBQUM7WUFDdEQsTUFBTSxTQUFTLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVELE1BQU0sS0FBSyxHQUFHLFNBQVM7Z0JBQ3JCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLO2dCQUMxQixDQUFDLENB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QUMsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRU8saUJBQWlCLENBQUMsTUFBbUM7UUFDM0QsT0FBTyxDQUFDLGFBQTRCLEVBQUUsWUFBMEIsRUFBRSxFQUFFO1lBQ2xFLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMxQixhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsQ0FBQztZQUNELE1BQU0sR0FBRyxHQUFxQjtnQkFDNUIsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO2dCQUNoRSxHQUFHLEVBQUUsWUFBWSxDQUFDLEtBQTJCO2dCQUM3QyxhQUFhLEVBQUUsYUFBYTthQUM3QixDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDaEMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzt1R0E5SFUsa0JBQWtCOzJHQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGhvdGtleXMsIHsgSG90a2V5c0V2ZW50LCBLZXlIYW5kbGVyIH0gZnJvbSAnaG90a2V5cy1qcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZHRTaG9ydGN1dCB9IGZyb20gJy4uL3JkdC1zaG9ydGN1dCc7XHJcbmltcG9ydCB7XHJcbiAgREVGQVVMVF9TSE9SVENVVF9DT05GSUcsXHJcbiAgUmR0U2hvcnRjdXRDb25maWcsXHJcbiAgSUdOT1JFRF9LRVlDT0RFUyxcclxuICBTSE9SVENVVF9TUExJVF9LRVksXHJcbiAgUmR0U2hvcnRjdXRFdmVudCxcclxuICBTaG9ydGN1dFNyY0VsZW1lbnQsXHJcbn0gZnJvbSAnLi4vcmR0LXNob3J0Y3V0Lm1vZGVscyc7XHJcblxyXG5pbnRlcmZhY2UgSG90a2V5c09wdGlvbnMge1xyXG4gIHNjb3BlPzogc3RyaW5nO1xyXG4gIGVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAga2V5dXA/OiBib29sZWFuIHwgbnVsbDtcclxuICBrZXlkb3duPzogYm9vbGVhbiB8IG51bGw7XHJcbiAgY2FwdHVyZT86IGJvb2xlYW47XHJcbiAgc3BsaXRLZXk/OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRTaG9ydGN1dFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgYm91bmQ6IE1hcDxIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCwgUmVjb3JkPHN0cmluZywgUmR0U2hvcnRjdXQ+PiA9XHJcbiAgICBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBzdWJqZWN0JCA9IG5ldyBTdWJqZWN0PFJkdFNob3J0Y3V0RXZlbnQ+KCk7XHJcbiAgcHJpdmF0ZSBvYnNlcnZhYmxlJCA9IHRoaXMuc3ViamVjdCQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgLy8gRW5hYmxlcyBob3RrZXlzIG9uIGlucHV0IGVsZW1lbnRzXHJcbiAgICAvLyBFbmFibGVzIGhvdGtleXMgb24gaW5wdXQgZWxlbWVudHNcclxuICAgIGhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgIGlmIChJR05PUkVEX0tFWUNPREVTLmluY2x1ZGVzKGV2ZW50LmNvZGUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS50YWdOYW1lO1xyXG4gICAgICBjb25zdCBpc0lucHV0RWwgPSAvXihJTlBVVHxURVhUQVJFQXxTRUxFQ1QpJC8udGVzdCh0YWdOYW1lKTtcclxuICAgICAgY29uc3Qgc2NvcGUgPSBpc0lucHV0RWxcclxuICAgICAgICA/IFNob3J0Y3V0U3JjRWxlbWVudC5JTlBVVFxyXG4gICAgICAgIDogU2hvcnRjdXRTcmNFbGVtZW50Lk9USEVSO1xyXG4gICAgICBob3RrZXlzLnNldFNjb3BlKHNjb3BlKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuKHNob3J0Y3V0OiBSZHRTaG9ydGN1dCB8IFJkdFNob3J0Y3V0W10sIGNvbmZpZz86IFJkdFNob3J0Y3V0Q29uZmlnKSB7XHJcbiAgICBjb25zdCBwYXRjaGVkQ29uZmlnID0ge1xyXG4gICAgICAuLi5ERUZBVUxUX1NIT1JUQ1VUX0NPTkZJRyxcclxuICAgICAgLi4uY29uZmlnLFxyXG4gICAgfSBhcyBSZXF1aXJlZDxSZHRTaG9ydGN1dENvbmZpZz47XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzaG9ydGN1dCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuQXJyYXkoc2hvcnRjdXQsIHBhdGNoZWRDb25maWcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuU2luZ2xlKHNob3J0Y3V0LCBwYXRjaGVkQ29uZmlnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuQXJyYXkoXHJcbiAgICBzaG9ydGN1dHM6IFJkdFNob3J0Y3V0W10sXHJcbiAgICBjb25maWc6IFJlcXVpcmVkPFJkdFNob3J0Y3V0Q29uZmlnPlxyXG4gICkge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFJkdFNob3J0Y3V0RXZlbnQ+KChzdWJzY3JpYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoc2hvcnRjdXRzKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgc2hvcnRjdXRzLmZvckVhY2goKHMpID0+IHRoaXMuYmluZChzLCBjb25maWcpKTtcclxuICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGV4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc3ViID0gdGhpcy5vYnNlcnZhYmxlJFxyXG4gICAgICAgIC5waXBlKGZpbHRlcigoZXZ0KSA9PiBzZXQuaGFzKGV2dC5zaG9ydGN1dCkpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XHJcblxyXG4gICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHNob3J0Y3V0cy5mb3JFYWNoKChzKSA9PiB0aGlzLnVuYmluZChzLCBjb25maWcpKTtcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5TaW5nbGUoXHJcbiAgICBzaG9ydGN1dDogUmR0U2hvcnRjdXQsXHJcbiAgICBjb25maWc6IFJlcXVpcmVkPFJkdFNob3J0Y3V0Q29uZmlnPlxyXG4gICkge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFJkdFNob3J0Y3V0RXZlbnQ+KChzdWJzY3JpYmVyKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5iaW5kKHNob3J0Y3V0LCBjb25maWcpO1xyXG4gICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzdWIgPSB0aGlzLm9ic2VydmFibGUkXHJcbiAgICAgICAgLnBpcGUoZmlsdGVyKChldnQpID0+IGV2dC5zaG9ydGN1dCA9PT0gc2hvcnRjdXQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XHJcblxyXG4gICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMudW5iaW5kKHNob3J0Y3V0LCBjb25maWcpO1xyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJpbmQoc2hvcnRjdXQ6IFJkdFNob3J0Y3V0LCBjb25maWc6IFJlcXVpcmVkPFJkdFNob3J0Y3V0Q29uZmlnPikge1xyXG4gICAgY29uc3Qgb3B0aW9uczogSG90a2V5c09wdGlvbnMgPSB7XHJcbiAgICAgIGVsZW1lbnQ6IGNvbmZpZy5lbGVtZW50LFxyXG4gICAgICBzcGxpdEtleTogU0hPUlRDVVRfU1BMSVRfS0VZLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5ib3VuZC5nZXQoY29uZmlnLmVsZW1lbnQpPy5bc2hvcnRjdXQuaG90a2V5c1ZhbHVlXSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNob3J0Y3V0ICR7c2hvcnRjdXR9IGlzIGFscmVhZHkgYmluZGVkIWApO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmJvdW5kLmhhcyhjb25maWcuZWxlbWVudCkpIHtcclxuICAgICAgY29uc3QgbmV3T2JqID0ge1xyXG4gICAgICAgIFtzaG9ydGN1dC5ob3RrZXlzVmFsdWVdOiBzaG9ydGN1dCxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5ib3VuZC5zZXQoY29uZmlnLmVsZW1lbnQsIG5ld09iaik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJvdW5kLmdldChjb25maWcuZWxlbWVudCkhW3Nob3J0Y3V0LmhvdGtleXNWYWx1ZV0gPSBzaG9ydGN1dDtcclxuICAgIH1cclxuXHJcbiAgICBob3RrZXlzKHNob3J0Y3V0LmhvdGtleXNWYWx1ZSwgb3B0aW9ucywgdGhpcy5rZXlIYW5kbGVyRmFjdG9yeShjb25maWcpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5iaW5kKHNob3J0Y3V0OiBSZHRTaG9ydGN1dCwgY29uZmlnOiBSZHRTaG9ydGN1dENvbmZpZykge1xyXG4gICAgY29uc3Qgb2JqID0gdGhpcy5ib3VuZC5nZXQoY29uZmlnLmVsZW1lbnQpO1xyXG4gICAgaWYgKG9iaj8uW3Nob3J0Y3V0LmhvdGtleXNWYWx1ZV0pIHtcclxuICAgICAgb2JqW3Nob3J0Y3V0LmhvdGtleXNWYWx1ZV0gPSB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBSZHRTaG9ydGN1dDtcclxuICAgICAgaWYgKE9iamVjdC5rZXlzKG9iaikuZXZlcnkoKGtleSkgPT4gb2JqW2tleV0gPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICB0aGlzLmJvdW5kLmRlbGV0ZShjb25maWcuZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgICAgaG90a2V5cy51bmJpbmQoc2hvcnRjdXQuaG90a2V5c1ZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUga2V5SGFuZGxlckZhY3RvcnkoY29uZmlnOiBSZXF1aXJlZDxSZHRTaG9ydGN1dENvbmZpZz4pOiBLZXlIYW5kbGVyIHtcclxuICAgIHJldHVybiAoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50OiBIb3RrZXlzRXZlbnQpID0+IHtcclxuICAgICAgaWYgKGNvbmZpZy5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBldnQ6IFJkdFNob3J0Y3V0RXZlbnQgPSB7XHJcbiAgICAgICAgc2hvcnRjdXQ6IHRoaXMuYm91bmQuZ2V0KGNvbmZpZy5lbGVtZW50KSFbaG90a2V5c0V2ZW50LnNob3J0Y3V0XSxcclxuICAgICAgICBzcmM6IGhvdGtleXNFdmVudC5zY29wZSBhcyBTaG9ydGN1dFNyY0VsZW1lbnQsXHJcbiAgICAgICAgb3JpZ2luYWxFdmVudDoga2V5Ym9hcmRFdmVudCxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zdWJqZWN0JC5uZXh0KGV2dCk7XHJcbiAgICAgIHJldHVybiAhY29uZmlnLnByZXZlbnREZWZhdWx0O1xyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n// Outputs keydown event if only one key was pressed at once\nexport class RdtKeyListenerDirective {\n keysPressed = new Set();\n pressedAtOnce = new Set();\n output = new EventEmitter();\n onKeyDown(event) {\n if (!this.pressedAtOnce.has(event.key)) {\n this.keysPressed.add(event.key);\n this.pressedAtOnce.add(event.key);\n if (this.pressedAtOnce.size === 1) {\n this.output.emit(event);\n }\n }\n }\n onKeyUp(event) {\n this.keysPressed.delete(event.key);\n this.pressedAtOnce.delete(event.key);\n if (this.keysPressed.size === 0) {\n this.pressedAtOnce.clear();\n }\n }\n onWindowFocus() {\n this.pressedAtOnce.clear();\n this.keysPressed.clear();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtKeyListenerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.0\", type: RdtKeyListenerDirective, isStandalone: true, selector: \"[rdtKeyListener]\", outputs: { output: \"rdtKeyListener\" }, host: { listeners: { \"keydown\": \"onKeyDown($event)\", \"window:keyup\": \"onKeyUp($event)\", \"keyup\": \"onKeyUp($event)\", \"window:focus\": \"onWindowFocus()\" } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: RdtKeyListenerDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdtKeyListener]',\n standalone: true,\n }]\n }], propDecorators: { output: [{\n type: Output,\n args: ['rdtKeyListener']\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], onKeyUp: [{\n type: HostListener,\n args: ['window:keyup', ['$event']]\n }, {\n type: HostListener,\n args: ['keyup', ['$event']]\n }], onWindowFocus: [{\n type: HostListener,\n args: ['window:focus']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWtleS1saXN0ZW5lci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvc2hvcnRjdXRzL3NyYy9saWIvc2hvcnRjdXRzL2RpcmVjdGl2ZXMvcmR0LWtleS1saXN0ZW5lci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFOUUsNERBQTREO0FBSzVELE1BQU0sT0FBTyx1QkFBdUI7SUFDMUIsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDaEMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFHMUMsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBR3BDLFNBQVMsQ0FBQyxLQUFvQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVsQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFJTSxPQUFPLENBQUMsS0FBb0I7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFHTSxhQUFhO1FBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO3VHQWpDVSx1QkFBdUI7MkZBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFKbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBTUMsTUFBTTtzQkFETCxNQUFNO3VCQUFDLGdCQUFnQjtnQkFJakIsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjNUIsT0FBTztzQkFGYixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3ZDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVUxQixhQUFhO3NCQURuQixZQUFZO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vIE91dHB1dHMga2V5ZG93biBldmVudCBpZiBvbmx5IG9uZSBrZXkgd2FzIHByZXNzZWQgYXQgb25jZVxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tyZHRLZXlMaXN0ZW5lcl0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRLZXlMaXN0ZW5lckRpcmVjdGl2ZSB7XHJcbiAgcHJpdmF0ZSBrZXlzUHJlc3NlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgcHJlc3NlZEF0T25jZSA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICBAT3V0cHV0KCdyZHRLZXlMaXN0ZW5lcicpXHJcbiAgb3V0cHV0ID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMucHJlc3NlZEF0T25jZS5oYXMoZXZlbnQua2V5KSkge1xyXG4gICAgICB0aGlzLmtleXNQcmVzc2VkLmFkZChldmVudC5rZXkpO1xyXG4gICAgICB0aGlzLnByZXNzZWRBdE9uY2UuYWRkKGV2ZW50LmtleSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5wcmVzc2VkQXRPbmNlLnNpemUgPT09IDEpIHtcclxuICAgICAgICB0aGlzLm91dHB1dC5lbWl0KGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwJywgWyckZXZlbnQnXSlcclxuICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIG9uS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHRoaXMua2V5c1ByZXNzZWQuZGVsZXRlKGV2ZW50LmtleSk7XHJcbiAgICB0aGlzLnByZXNzZWRBdE9uY2UuZGVsZXRlKGV2ZW50LmtleSk7XHJcbiAgICBpZiAodGhpcy5rZXlzUHJlc3NlZC5zaXplID09PSAwKSB7XHJcbiAgICAgIHRoaXMucHJlc3NlZEF0T25jZS5jbGVhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmZvY3VzJylcclxuICBwdWJsaWMgb25XaW5kb3dGb2N1cygpIHtcclxuICAgIHRoaXMucHJlc3NlZEF0T25jZS5jbGVhcigpO1xyXG4gICAgdGhpcy5rZXlzUHJlc3NlZC5jbGVhcigpO1xyXG4gIH1cclxufVxyXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdyZHQtc2hvcnRjdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vQG5ncmR0L3Nob3J0Y3V0cy9zcmMvbmdyZHQtc2hvcnRjdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
File without changes