@tethys/cdk 14.2.0-next.7 → 14.2.1

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.
@@ -10,7 +10,6 @@ import * as i0 from "@angular/core";
10
10
  export class ThyHotkeyDispatcher extends ThyEventDispatcher {
11
11
  constructor(document, ngZone) {
12
12
  super(document, ngZone, 'keydown');
13
- this.hotkeyRecords = [];
14
13
  }
15
14
  createKeydownObservable(scope) {
16
15
  if (scope === this.document) {
@@ -20,43 +19,26 @@ export class ThyHotkeyDispatcher extends ThyEventDispatcher {
20
19
  return fromEvent(scope, 'keydown');
21
20
  }
22
21
  }
23
- checkHotkeyConflict(scope, hotkeys) {
24
- return this.hotkeyRecords.every(record => {
25
- if (scope === record.scope) {
26
- return hotkeys.every(hotkey => {
27
- if (record.hotkeys.includes(hotkey)) {
28
- throw new Error(`'${hotkey}' hotkey conflict detected`);
29
- }
30
- return true;
31
- });
32
- }
33
- else {
34
- return true;
35
- }
36
- });
37
- }
38
22
  /**
39
23
  * 热键事件订阅
40
24
  */
41
25
  keydown(hotkey, scope) {
42
26
  const hotkeys = isString(hotkey) ? hotkey.split(',') : hotkey;
43
27
  const scopeElement = coerceElement(isUndefinedOrNull(scope) ? this.document : scope);
44
- if (!this.checkHotkeyConflict(scopeElement, hotkeys)) {
45
- return;
46
- }
47
- const hotkeyRecord = { scope: scopeElement, hotkeys };
48
- this.hotkeyRecords.push(hotkeyRecord);
49
28
  const keydown = this.createKeydownObservable(scopeElement);
50
- return new Observable(observer => {
29
+ return new Observable(subscriber => {
51
30
  const subscription = keydown
52
31
  .pipe(filter((event) => hotkeys.some(key => isHotkey(event, key))))
53
32
  .subscribe((event) => {
54
- event.stopPropagation();
55
- observer.next(event);
33
+ this.keydownSubscriber = subscriber;
34
+ // setTimeout 是为了解决 Hotkey 冲突时仅执行最后订阅的事件
35
+ setTimeout(() => {
36
+ this.keydownSubscriber?.next(event);
37
+ this.keydownSubscriber = null;
38
+ });
56
39
  });
57
40
  return () => {
58
41
  subscription.unsubscribe();
59
- this.hotkeyRecords = this.hotkeyRecords.filter(record => record !== hotkeyRecord);
60
42
  };
61
43
  });
62
44
  }
@@ -70,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
70
52
  type: Inject,
71
53
  args: [DOCUMENT]
72
54
  }] }, { type: i0.NgZone }]; } });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5LWRpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvaG90a2V5L2hvdGtleS1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFHcEMsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGtCQUFrQjtJQUd2RCxZQUE4QixRQUFhLEVBQUUsTUFBYztRQUN2RCxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUgvQixrQkFBYSxHQUF1RCxFQUFFLENBQUM7SUFJL0UsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEtBQXlCO1FBQ3JELElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9CO2FBQU07WUFDSCxPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBeUIsRUFBRSxPQUFpQjtRQUNwRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JDLElBQUksS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUU7Z0JBQ3hCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDMUIsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLE1BQU0sNEJBQTRCLENBQUMsQ0FBQztxQkFDM0Q7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsT0FBTyxJQUFJLENBQUM7YUFDZjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLE1BQXlCLEVBQUUsS0FBZ0Q7UUFDL0UsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNsRCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLFlBQVksR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELE9BQU8sSUFBSSxVQUFVLENBQWdCLFFBQVEsQ0FBQyxFQUFFO1lBQzVDLE1BQU0sWUFBWSxHQUFHLE9BQU87aUJBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2pGLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtnQkFDaEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxDQUFDO1lBQ3RGLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7Z0hBdERRLG1CQUFtQixrQkFHUixRQUFRO29IQUhuQixtQkFBbUIsY0FETixNQUFNOzJGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFJakIsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGh5RXZlbnREaXNwYXRjaGVyIH0gZnJvbSAnQHRldGh5cy9jZGsvZXZlbnQnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc1N0cmluZywgaXNVbmRlZmluZWRPck51bGwgfSBmcm9tICdAdGV0aHlzL2Nkay9pcyc7XG5pbXBvcnQgeyBpc0hvdGtleSB9IGZyb20gJy4vaG90a2V5JztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBUaHlIb3RrZXlEaXNwYXRjaGVyIGV4dGVuZHMgVGh5RXZlbnREaXNwYXRjaGVyIHtcbiAgICBwcml2YXRlIGhvdGtleVJlY29yZHM6IHsgc2NvcGU6IEVsZW1lbnQgfCBEb2N1bWVudDsgaG90a2V5czogc3RyaW5nW10gfVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudDogYW55LCBuZ1pvbmU6IE5nWm9uZSkge1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbmdab25lLCAna2V5ZG93bicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlS2V5ZG93bk9ic2VydmFibGUoc2NvcGU6IEVsZW1lbnQgfCBEb2N1bWVudCkge1xuICAgICAgICBpZiAoc2NvcGUgPT09IHRoaXMuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmliZShudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQoc2NvcGUsICdrZXlkb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSG90a2V5Q29uZmxpY3Qoc2NvcGU6IEVsZW1lbnQgfCBEb2N1bWVudCwgaG90a2V5czogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG90a2V5UmVjb3Jkcy5ldmVyeShyZWNvcmQgPT4ge1xuICAgICAgICAgICAgaWYgKHNjb3BlID09PSByZWNvcmQuc2NvcGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG90a2V5cy5ldmVyeShob3RrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLmhvdGtleXMuaW5jbHVkZXMoaG90a2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtob3RrZXl9JyBob3RrZXkgY29uZmxpY3QgZGV0ZWN0ZWRgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICDng63plK7kuovku7borqLpmIVcbiAgICAgKi9cbiAgICBrZXlkb3duKGhvdGtleTogc3RyaW5nIHwgc3RyaW5nW10sIHNjb3BlPzogRWxlbWVudFJlZjxFbGVtZW50PiB8IEVsZW1lbnQgfCBEb2N1bWVudCk6IE9ic2VydmFibGU8S2V5Ym9hcmRFdmVudD4ge1xuICAgICAgICBjb25zdCBob3RrZXlzID0gaXNTdHJpbmcoaG90a2V5KSA/IGhvdGtleS5zcGxpdCgnLCcpIDogaG90a2V5O1xuICAgICAgICBjb25zdCBzY29wZUVsZW1lbnQgPSBjb2VyY2VFbGVtZW50KGlzVW5kZWZpbmVkT3JOdWxsKHNjb3BlKSA/IHRoaXMuZG9jdW1lbnQgOiBzY29wZSk7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0hvdGtleUNvbmZsaWN0KHNjb3BlRWxlbWVudCwgaG90a2V5cykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBob3RrZXlSZWNvcmQgPSB7IHNjb3BlOiBzY29wZUVsZW1lbnQsIGhvdGtleXMgfTtcbiAgICAgICAgdGhpcy5ob3RrZXlSZWNvcmRzLnB1c2goaG90a2V5UmVjb3JkKTtcbiAgICAgICAgY29uc3Qga2V5ZG93biA9IHRoaXMuY3JlYXRlS2V5ZG93bk9ic2VydmFibGUoc2NvcGVFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPEtleWJvYXJkRXZlbnQ+KG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGtleWRvd25cbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBob3RrZXlzLnNvbWUoa2V5ID0+IGlzSG90a2V5KGV2ZW50LCBrZXkpKSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvdGtleVJlY29yZHMgPSB0aGlzLmhvdGtleVJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQgIT09IGhvdGtleVJlY29yZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5LWRpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jZGsvaG90a2V5L2hvdGtleS1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFHcEMsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGtCQUFrQjtJQUd2RCxZQUE4QixRQUFhLEVBQUUsTUFBYztRQUN2RCxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sdUJBQXVCLENBQUMsS0FBeUI7UUFDckQsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7YUFBTTtZQUNILE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxNQUF5QixFQUFFLEtBQWdEO1FBQy9FLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzlELE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELE9BQU8sSUFBSSxVQUFVLENBQWdCLFVBQVUsQ0FBQyxFQUFFO1lBQzlDLE1BQU0sWUFBWSxHQUFHLE9BQU87aUJBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2pGLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQztnQkFDcEMsd0NBQXdDO2dCQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFDUCxPQUFPLEdBQUcsRUFBRTtnQkFDUixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztnSEFyQ1EsbUJBQW1CLGtCQUdSLFFBQVE7b0hBSG5CLG1CQUFtQixjQUROLE1BQU07MkZBQ25CLG1CQUFtQjtrQkFEL0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQUlqQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgTmdab25lLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHlFdmVudERpc3BhdGNoZXIgfSBmcm9tICdAdGV0aHlzL2Nkay9ldmVudCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YnNjcmliZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGlzU3RyaW5nLCBpc1VuZGVmaW5lZE9yTnVsbCB9IGZyb20gJ0B0ZXRoeXMvY2RrL2lzJztcbmltcG9ydCB7IGlzSG90a2V5IH0gZnJvbSAnLi9ob3RrZXknO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRoeUhvdGtleURpc3BhdGNoZXIgZXh0ZW5kcyBUaHlFdmVudERpc3BhdGNoZXIge1xuICAgIHByaXZhdGUga2V5ZG93blN1YnNjcmliZXI6IFN1YnNjcmliZXI8S2V5Ym9hcmRFdmVudD47XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudDogYW55LCBuZ1pvbmU6IE5nWm9uZSkge1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbmdab25lLCAna2V5ZG93bicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlS2V5ZG93bk9ic2VydmFibGUoc2NvcGU6IEVsZW1lbnQgfCBEb2N1bWVudCkge1xuICAgICAgICBpZiAoc2NvcGUgPT09IHRoaXMuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmliZShudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQoc2NvcGUsICdrZXlkb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAg54Ot6ZSu5LqL5Lu26K6i6ZiFXG4gICAgICovXG4gICAga2V5ZG93bihob3RrZXk6IHN0cmluZyB8IHN0cmluZ1tdLCBzY29wZT86IEVsZW1lbnRSZWY8RWxlbWVudD4gfCBFbGVtZW50IHwgRG9jdW1lbnQpOiBPYnNlcnZhYmxlPEtleWJvYXJkRXZlbnQ+IHtcbiAgICAgICAgY29uc3QgaG90a2V5cyA9IGlzU3RyaW5nKGhvdGtleSkgPyBob3RrZXkuc3BsaXQoJywnKSA6IGhvdGtleTtcbiAgICAgICAgY29uc3Qgc2NvcGVFbGVtZW50ID0gY29lcmNlRWxlbWVudChpc1VuZGVmaW5lZE9yTnVsbChzY29wZSkgPyB0aGlzLmRvY3VtZW50IDogc2NvcGUpO1xuICAgICAgICBjb25zdCBrZXlkb3duID0gdGhpcy5jcmVhdGVLZXlkb3duT2JzZXJ2YWJsZShzY29wZUVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8S2V5Ym9hcmRFdmVudD4oc3Vic2NyaWJlciA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBrZXlkb3duXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gaG90a2V5cy5zb21lKGtleSA9PiBpc0hvdGtleShldmVudCwga2V5KSkpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMua2V5ZG93blN1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0IOaYr+S4uuS6huino+WGsyBIb3RrZXkg5Yay56qB5pe25LuF5omn6KGM5pyA5ZCO6K6i6ZiF55qE5LqL5Lu2XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXlkb3duU3Vic2NyaWJlcj8ubmV4dChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleWRvd25TdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -33,7 +33,6 @@ function isHotkey(event, key) {
33
33
  class ThyHotkeyDispatcher extends ThyEventDispatcher {
34
34
  constructor(document, ngZone) {
35
35
  super(document, ngZone, 'keydown');
36
- this.hotkeyRecords = [];
37
36
  }
38
37
  createKeydownObservable(scope) {
39
38
  if (scope === this.document) {
@@ -43,43 +42,27 @@ class ThyHotkeyDispatcher extends ThyEventDispatcher {
43
42
  return fromEvent(scope, 'keydown');
44
43
  }
45
44
  }
46
- checkHotkeyConflict(scope, hotkeys) {
47
- return this.hotkeyRecords.every(record => {
48
- if (scope === record.scope) {
49
- return hotkeys.every(hotkey => {
50
- if (record.hotkeys.includes(hotkey)) {
51
- throw new Error(`'${hotkey}' hotkey conflict detected`);
52
- }
53
- return true;
54
- });
55
- }
56
- else {
57
- return true;
58
- }
59
- });
60
- }
61
45
  /**
62
46
  * 热键事件订阅
63
47
  */
64
48
  keydown(hotkey, scope) {
65
49
  const hotkeys = isString(hotkey) ? hotkey.split(',') : hotkey;
66
50
  const scopeElement = coerceElement(isUndefinedOrNull(scope) ? this.document : scope);
67
- if (!this.checkHotkeyConflict(scopeElement, hotkeys)) {
68
- return;
69
- }
70
- const hotkeyRecord = { scope: scopeElement, hotkeys };
71
- this.hotkeyRecords.push(hotkeyRecord);
72
51
  const keydown = this.createKeydownObservable(scopeElement);
73
- return new Observable(observer => {
52
+ return new Observable(subscriber => {
74
53
  const subscription = keydown
75
54
  .pipe(filter((event) => hotkeys.some(key => isHotkey(event, key))))
76
55
  .subscribe((event) => {
77
- event.stopPropagation();
78
- observer.next(event);
56
+ this.keydownSubscriber = subscriber;
57
+ // setTimeout 是为了解决 Hotkey 冲突时仅执行最后订阅的事件
58
+ setTimeout(() => {
59
+ var _a;
60
+ (_a = this.keydownSubscriber) === null || _a === void 0 ? void 0 : _a.next(event);
61
+ this.keydownSubscriber = null;
62
+ });
79
63
  });
80
64
  return () => {
81
65
  subscription.unsubscribe();
82
- this.hotkeyRecords = this.hotkeyRecords.filter(record => record !== hotkeyRecord);
83
66
  };
84
67
  });
85
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tethys-cdk-hotkey.mjs","sources":["../../../cdk/hotkey/hotkey.ts","../../../cdk/hotkey/hotkey-dispatcher.ts","../../../cdk/hotkey/hotkey.directive.ts","../../../cdk/hotkey/module.ts","../../../cdk/hotkey/tethys-cdk-hotkey.ts"],"sourcesContent":["const modifierKeyNames: string[] = [`Control`, 'Alt', 'Meta', 'Shift'];\n\n// We don't want to show `Shift` when `event.key` is capital\nfunction showShift(event: KeyboardEvent): boolean {\n const { shiftKey, code, key } = event;\n return shiftKey && !(code.startsWith('Key') && key.toUpperCase() === key);\n}\n\nexport function hotkey(event: KeyboardEvent): string {\n const { ctrlKey, altKey, metaKey, key } = event;\n const hotkeyString: string[] = [];\n const modifiers: boolean[] = [ctrlKey, altKey, metaKey, showShift(event)];\n for (const [i, mod] of modifiers.entries()) {\n if (mod) hotkeyString.push(modifierKeyNames[i]);\n }\n\n if (!modifierKeyNames.includes(key)) {\n hotkeyString.push(key);\n }\n\n return hotkeyString.join('+');\n}\n\nexport function isHotkey(event: KeyboardEvent, key: string) {\n return key.toUpperCase() === hotkey(event).toUpperCase();\n}\n","import { coerceElement } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, NgZone, ElementRef } from '@angular/core';\nimport { ThyEventDispatcher } from '@tethys/cdk/event';\nimport { fromEvent, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { isString, isUndefinedOrNull } from '@tethys/cdk/is';\nimport { isHotkey } from './hotkey';\n\n@Injectable({ providedIn: 'root' })\nexport class ThyHotkeyDispatcher extends ThyEventDispatcher {\n private hotkeyRecords: { scope: Element | Document; hotkeys: string[] }[] = [];\n\n constructor(@Inject(DOCUMENT) document: any, ngZone: NgZone) {\n super(document, ngZone, 'keydown');\n }\n\n private createKeydownObservable(scope: Element | Document) {\n if (scope === this.document) {\n return this.subscribe(null);\n } else {\n return fromEvent(scope, 'keydown');\n }\n }\n\n private checkHotkeyConflict(scope: Element | Document, hotkeys: string[]) {\n return this.hotkeyRecords.every(record => {\n if (scope === record.scope) {\n return hotkeys.every(hotkey => {\n if (record.hotkeys.includes(hotkey)) {\n throw new Error(`'${hotkey}' hotkey conflict detected`);\n }\n return true;\n });\n } else {\n return true;\n }\n });\n }\n\n /**\n * 热键事件订阅\n */\n keydown(hotkey: string | string[], scope?: ElementRef<Element> | Element | Document): Observable<KeyboardEvent> {\n const hotkeys = isString(hotkey) ? hotkey.split(',') : hotkey;\n const scopeElement = coerceElement(isUndefinedOrNull(scope) ? this.document : scope);\n if (!this.checkHotkeyConflict(scopeElement, hotkeys)) {\n return;\n }\n const hotkeyRecord = { scope: scopeElement, hotkeys };\n this.hotkeyRecords.push(hotkeyRecord);\n const keydown = this.createKeydownObservable(scopeElement);\n return new Observable<KeyboardEvent>(observer => {\n const subscription = keydown\n .pipe(filter((event: KeyboardEvent) => hotkeys.some(key => isHotkey(event, key))))\n .subscribe((event: KeyboardEvent) => {\n event.stopPropagation();\n observer.next(event);\n });\n return () => {\n subscription.unsubscribe();\n this.hotkeyRecords = this.hotkeyRecords.filter(record => record !== hotkeyRecord);\n };\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, EventEmitter, Inject, Input, OnInit, Output, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { isFormElement, isString } from '@tethys/cdk/is';\nimport { ThyHotkeyDispatcher } from './hotkey-dispatcher';\n\n/**\n * @name thyHotkey\n */\n@Directive({ selector: '[thyHotkey]' })\nexport class ThyHotkeyDirective implements OnInit, OnDestroy {\n /**\n * 热键对应 Code,多个热键组合支持通过数组或逗号分割的形式传入\n */\n @Input() thyHotkey: string | string[];\n\n /**\n * 配置热键触发范围,默认绑定在 document 上\n */\n @Input() thyHotkeyScope?: string | Element | ElementRef<Element>;\n\n /**\n * 热键触发后的事件\n */\n @Output() thyHotkeyListener: EventEmitter<KeyboardEvent> = new EventEmitter();\n\n private subscription: Subscription = null;\n\n constructor(\n @Inject(DOCUMENT) private document: Document,\n private hotkeyDispatcher: ThyHotkeyDispatcher,\n private elementRef: ElementRef<HTMLElement>\n ) {}\n\n ngOnInit(): void {\n const scope = isString(this.thyHotkeyScope) ? this.document.querySelector(this.thyHotkeyScope) : this.thyHotkeyScope;\n this.subscription = this.hotkeyDispatcher.keydown(this.thyHotkey, scope).subscribe(event => {\n event.preventDefault();\n if (isFormElement(this.elementRef)) {\n this.elementRef.nativeElement.focus();\n } else {\n this.elementRef.nativeElement.click();\n }\n this.thyHotkeyListener.emit(event);\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ThyHotkeyDirective } from './hotkey.directive';\n\n@NgModule({\n imports: [],\n exports: [ThyHotkeyDirective],\n declarations: [ThyHotkeyDirective],\n providers: []\n})\nexport class ThyHotkeyModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ThyHotkeyDispatcher"],"mappings":"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"}
1
+ {"version":3,"file":"tethys-cdk-hotkey.mjs","sources":["../../../cdk/hotkey/hotkey.ts","../../../cdk/hotkey/hotkey-dispatcher.ts","../../../cdk/hotkey/hotkey.directive.ts","../../../cdk/hotkey/module.ts","../../../cdk/hotkey/tethys-cdk-hotkey.ts"],"sourcesContent":["const modifierKeyNames: string[] = [`Control`, 'Alt', 'Meta', 'Shift'];\n\n// We don't want to show `Shift` when `event.key` is capital\nfunction showShift(event: KeyboardEvent): boolean {\n const { shiftKey, code, key } = event;\n return shiftKey && !(code.startsWith('Key') && key.toUpperCase() === key);\n}\n\nexport function hotkey(event: KeyboardEvent): string {\n const { ctrlKey, altKey, metaKey, key } = event;\n const hotkeyString: string[] = [];\n const modifiers: boolean[] = [ctrlKey, altKey, metaKey, showShift(event)];\n for (const [i, mod] of modifiers.entries()) {\n if (mod) hotkeyString.push(modifierKeyNames[i]);\n }\n\n if (!modifierKeyNames.includes(key)) {\n hotkeyString.push(key);\n }\n\n return hotkeyString.join('+');\n}\n\nexport function isHotkey(event: KeyboardEvent, key: string) {\n return key.toUpperCase() === hotkey(event).toUpperCase();\n}\n","import { coerceElement } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, NgZone, ElementRef } from '@angular/core';\nimport { ThyEventDispatcher } from '@tethys/cdk/event';\nimport { fromEvent, Observable, Subscriber } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { isString, isUndefinedOrNull } from '@tethys/cdk/is';\nimport { isHotkey } from './hotkey';\n\n@Injectable({ providedIn: 'root' })\nexport class ThyHotkeyDispatcher extends ThyEventDispatcher {\n private keydownSubscriber: Subscriber<KeyboardEvent>;\n\n constructor(@Inject(DOCUMENT) document: any, ngZone: NgZone) {\n super(document, ngZone, 'keydown');\n }\n\n private createKeydownObservable(scope: Element | Document) {\n if (scope === this.document) {\n return this.subscribe(null);\n } else {\n return fromEvent(scope, 'keydown');\n }\n }\n\n /**\n * 热键事件订阅\n */\n keydown(hotkey: string | string[], scope?: ElementRef<Element> | Element | Document): Observable<KeyboardEvent> {\n const hotkeys = isString(hotkey) ? hotkey.split(',') : hotkey;\n const scopeElement = coerceElement(isUndefinedOrNull(scope) ? this.document : scope);\n const keydown = this.createKeydownObservable(scopeElement);\n return new Observable<KeyboardEvent>(subscriber => {\n const subscription = keydown\n .pipe(filter((event: KeyboardEvent) => hotkeys.some(key => isHotkey(event, key))))\n .subscribe((event: KeyboardEvent) => {\n this.keydownSubscriber = subscriber;\n // setTimeout 是为了解决 Hotkey 冲突时仅执行最后订阅的事件\n setTimeout(() => {\n this.keydownSubscriber?.next(event);\n this.keydownSubscriber = null;\n });\n });\n return () => {\n subscription.unsubscribe();\n };\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, EventEmitter, Inject, Input, OnInit, Output, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { isFormElement, isString } from '@tethys/cdk/is';\nimport { ThyHotkeyDispatcher } from './hotkey-dispatcher';\n\n/**\n * @name thyHotkey\n */\n@Directive({ selector: '[thyHotkey]' })\nexport class ThyHotkeyDirective implements OnInit, OnDestroy {\n /**\n * 热键对应 Code,多个热键组合支持通过数组或逗号分割的形式传入\n */\n @Input() thyHotkey: string | string[];\n\n /**\n * 配置热键触发范围,默认绑定在 document 上\n */\n @Input() thyHotkeyScope?: string | Element | ElementRef<Element>;\n\n /**\n * 热键触发后的事件\n */\n @Output() thyHotkeyListener: EventEmitter<KeyboardEvent> = new EventEmitter();\n\n private subscription: Subscription = null;\n\n constructor(\n @Inject(DOCUMENT) private document: Document,\n private hotkeyDispatcher: ThyHotkeyDispatcher,\n private elementRef: ElementRef<HTMLElement>\n ) {}\n\n ngOnInit(): void {\n const scope = isString(this.thyHotkeyScope) ? this.document.querySelector(this.thyHotkeyScope) : this.thyHotkeyScope;\n this.subscription = this.hotkeyDispatcher.keydown(this.thyHotkey, scope).subscribe(event => {\n event.preventDefault();\n if (isFormElement(this.elementRef)) {\n this.elementRef.nativeElement.focus();\n } else {\n this.elementRef.nativeElement.click();\n }\n this.thyHotkeyListener.emit(event);\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ThyHotkeyDirective } from './hotkey.directive';\n\n@NgModule({\n imports: [],\n exports: [ThyHotkeyDirective],\n declarations: [ThyHotkeyDirective],\n providers: []\n})\nexport class ThyHotkeyModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ThyHotkeyDispatcher"],"mappings":"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"}
@@ -33,7 +33,6 @@ function isHotkey(event, key) {
33
33
  class ThyHotkeyDispatcher extends ThyEventDispatcher {
34
34
  constructor(document, ngZone) {
35
35
  super(document, ngZone, 'keydown');
36
- this.hotkeyRecords = [];
37
36
  }
38
37
  createKeydownObservable(scope) {
39
38
  if (scope === this.document) {
@@ -43,43 +42,26 @@ class ThyHotkeyDispatcher extends ThyEventDispatcher {
43
42
  return fromEvent(scope, 'keydown');
44
43
  }
45
44
  }
46
- checkHotkeyConflict(scope, hotkeys) {
47
- return this.hotkeyRecords.every(record => {
48
- if (scope === record.scope) {
49
- return hotkeys.every(hotkey => {
50
- if (record.hotkeys.includes(hotkey)) {
51
- throw new Error(`'${hotkey}' hotkey conflict detected`);
52
- }
53
- return true;
54
- });
55
- }
56
- else {
57
- return true;
58
- }
59
- });
60
- }
61
45
  /**
62
46
  * 热键事件订阅
63
47
  */
64
48
  keydown(hotkey, scope) {
65
49
  const hotkeys = isString(hotkey) ? hotkey.split(',') : hotkey;
66
50
  const scopeElement = coerceElement(isUndefinedOrNull(scope) ? this.document : scope);
67
- if (!this.checkHotkeyConflict(scopeElement, hotkeys)) {
68
- return;
69
- }
70
- const hotkeyRecord = { scope: scopeElement, hotkeys };
71
- this.hotkeyRecords.push(hotkeyRecord);
72
51
  const keydown = this.createKeydownObservable(scopeElement);
73
- return new Observable(observer => {
52
+ return new Observable(subscriber => {
74
53
  const subscription = keydown
75
54
  .pipe(filter((event) => hotkeys.some(key => isHotkey(event, key))))
76
55
  .subscribe((event) => {
77
- event.stopPropagation();
78
- observer.next(event);
56
+ this.keydownSubscriber = subscriber;
57
+ // setTimeout 是为了解决 Hotkey 冲突时仅执行最后订阅的事件
58
+ setTimeout(() => {
59
+ this.keydownSubscriber?.next(event);
60
+ this.keydownSubscriber = null;
61
+ });
79
62
  });
80
63
  return () => {
81
64
  subscription.unsubscribe();
82
- this.hotkeyRecords = this.hotkeyRecords.filter(record => record !== hotkeyRecord);
83
65
  };
84
66
  });
85
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tethys-cdk-hotkey.mjs","sources":["../../../cdk/hotkey/hotkey.ts","../../../cdk/hotkey/hotkey-dispatcher.ts","../../../cdk/hotkey/hotkey.directive.ts","../../../cdk/hotkey/module.ts","../../../cdk/hotkey/tethys-cdk-hotkey.ts"],"sourcesContent":["const modifierKeyNames: string[] = [`Control`, 'Alt', 'Meta', 'Shift'];\n\n// We don't want to show `Shift` when `event.key` is capital\nfunction showShift(event: KeyboardEvent): boolean {\n const { shiftKey, code, key } = event;\n return shiftKey && !(code.startsWith('Key') && key.toUpperCase() === key);\n}\n\nexport function hotkey(event: KeyboardEvent): string {\n const { ctrlKey, altKey, metaKey, key } = event;\n const hotkeyString: string[] = [];\n const modifiers: boolean[] = [ctrlKey, altKey, metaKey, showShift(event)];\n for (const [i, mod] of modifiers.entries()) {\n if (mod) hotkeyString.push(modifierKeyNames[i]);\n }\n\n if (!modifierKeyNames.includes(key)) {\n hotkeyString.push(key);\n }\n\n return hotkeyString.join('+');\n}\n\nexport function isHotkey(event: KeyboardEvent, key: string) {\n return key.toUpperCase() === hotkey(event).toUpperCase();\n}\n","import { coerceElement } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, NgZone, ElementRef } from '@angular/core';\nimport { ThyEventDispatcher } from '@tethys/cdk/event';\nimport { fromEvent, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { isString, isUndefinedOrNull } from '@tethys/cdk/is';\nimport { isHotkey } from './hotkey';\n\n@Injectable({ providedIn: 'root' })\nexport class ThyHotkeyDispatcher extends ThyEventDispatcher {\n private hotkeyRecords: { scope: Element | Document; hotkeys: string[] }[] = [];\n\n constructor(@Inject(DOCUMENT) document: any, ngZone: NgZone) {\n super(document, ngZone, 'keydown');\n }\n\n private createKeydownObservable(scope: Element | Document) {\n if (scope === this.document) {\n return this.subscribe(null);\n } else {\n return fromEvent(scope, 'keydown');\n }\n }\n\n private checkHotkeyConflict(scope: Element | Document, hotkeys: string[]) {\n return this.hotkeyRecords.every(record => {\n if (scope === record.scope) {\n return hotkeys.every(hotkey => {\n if (record.hotkeys.includes(hotkey)) {\n throw new Error(`'${hotkey}' hotkey conflict detected`);\n }\n return true;\n });\n } else {\n return true;\n }\n });\n }\n\n /**\n * 热键事件订阅\n */\n keydown(hotkey: string | string[], scope?: ElementRef<Element> | Element | Document): Observable<KeyboardEvent> {\n const hotkeys = isString(hotkey) ? hotkey.split(',') : hotkey;\n const scopeElement = coerceElement(isUndefinedOrNull(scope) ? this.document : scope);\n if (!this.checkHotkeyConflict(scopeElement, hotkeys)) {\n return;\n }\n const hotkeyRecord = { scope: scopeElement, hotkeys };\n this.hotkeyRecords.push(hotkeyRecord);\n const keydown = this.createKeydownObservable(scopeElement);\n return new Observable<KeyboardEvent>(observer => {\n const subscription = keydown\n .pipe(filter((event: KeyboardEvent) => hotkeys.some(key => isHotkey(event, key))))\n .subscribe((event: KeyboardEvent) => {\n event.stopPropagation();\n observer.next(event);\n });\n return () => {\n subscription.unsubscribe();\n this.hotkeyRecords = this.hotkeyRecords.filter(record => record !== hotkeyRecord);\n };\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, EventEmitter, Inject, Input, OnInit, Output, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { isFormElement, isString } from '@tethys/cdk/is';\nimport { ThyHotkeyDispatcher } from './hotkey-dispatcher';\n\n/**\n * @name thyHotkey\n */\n@Directive({ selector: '[thyHotkey]' })\nexport class ThyHotkeyDirective implements OnInit, OnDestroy {\n /**\n * 热键对应 Code,多个热键组合支持通过数组或逗号分割的形式传入\n */\n @Input() thyHotkey: string | string[];\n\n /**\n * 配置热键触发范围,默认绑定在 document 上\n */\n @Input() thyHotkeyScope?: string | Element | ElementRef<Element>;\n\n /**\n * 热键触发后的事件\n */\n @Output() thyHotkeyListener: EventEmitter<KeyboardEvent> = new EventEmitter();\n\n private subscription: Subscription = null;\n\n constructor(\n @Inject(DOCUMENT) private document: Document,\n private hotkeyDispatcher: ThyHotkeyDispatcher,\n private elementRef: ElementRef<HTMLElement>\n ) {}\n\n ngOnInit(): void {\n const scope = isString(this.thyHotkeyScope) ? this.document.querySelector(this.thyHotkeyScope) : this.thyHotkeyScope;\n this.subscription = this.hotkeyDispatcher.keydown(this.thyHotkey, scope).subscribe(event => {\n event.preventDefault();\n if (isFormElement(this.elementRef)) {\n this.elementRef.nativeElement.focus();\n } else {\n this.elementRef.nativeElement.click();\n }\n this.thyHotkeyListener.emit(event);\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ThyHotkeyDirective } from './hotkey.directive';\n\n@NgModule({\n imports: [],\n exports: [ThyHotkeyDirective],\n declarations: [ThyHotkeyDirective],\n providers: []\n})\nexport class ThyHotkeyModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ThyHotkeyDispatcher"],"mappings":"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"}
1
+ {"version":3,"file":"tethys-cdk-hotkey.mjs","sources":["../../../cdk/hotkey/hotkey.ts","../../../cdk/hotkey/hotkey-dispatcher.ts","../../../cdk/hotkey/hotkey.directive.ts","../../../cdk/hotkey/module.ts","../../../cdk/hotkey/tethys-cdk-hotkey.ts"],"sourcesContent":["const modifierKeyNames: string[] = [`Control`, 'Alt', 'Meta', 'Shift'];\n\n// We don't want to show `Shift` when `event.key` is capital\nfunction showShift(event: KeyboardEvent): boolean {\n const { shiftKey, code, key } = event;\n return shiftKey && !(code.startsWith('Key') && key.toUpperCase() === key);\n}\n\nexport function hotkey(event: KeyboardEvent): string {\n const { ctrlKey, altKey, metaKey, key } = event;\n const hotkeyString: string[] = [];\n const modifiers: boolean[] = [ctrlKey, altKey, metaKey, showShift(event)];\n for (const [i, mod] of modifiers.entries()) {\n if (mod) hotkeyString.push(modifierKeyNames[i]);\n }\n\n if (!modifierKeyNames.includes(key)) {\n hotkeyString.push(key);\n }\n\n return hotkeyString.join('+');\n}\n\nexport function isHotkey(event: KeyboardEvent, key: string) {\n return key.toUpperCase() === hotkey(event).toUpperCase();\n}\n","import { coerceElement } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, NgZone, ElementRef } from '@angular/core';\nimport { ThyEventDispatcher } from '@tethys/cdk/event';\nimport { fromEvent, Observable, Subscriber } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { isString, isUndefinedOrNull } from '@tethys/cdk/is';\nimport { isHotkey } from './hotkey';\n\n@Injectable({ providedIn: 'root' })\nexport class ThyHotkeyDispatcher extends ThyEventDispatcher {\n private keydownSubscriber: Subscriber<KeyboardEvent>;\n\n constructor(@Inject(DOCUMENT) document: any, ngZone: NgZone) {\n super(document, ngZone, 'keydown');\n }\n\n private createKeydownObservable(scope: Element | Document) {\n if (scope === this.document) {\n return this.subscribe(null);\n } else {\n return fromEvent(scope, 'keydown');\n }\n }\n\n /**\n * 热键事件订阅\n */\n keydown(hotkey: string | string[], scope?: ElementRef<Element> | Element | Document): Observable<KeyboardEvent> {\n const hotkeys = isString(hotkey) ? hotkey.split(',') : hotkey;\n const scopeElement = coerceElement(isUndefinedOrNull(scope) ? this.document : scope);\n const keydown = this.createKeydownObservable(scopeElement);\n return new Observable<KeyboardEvent>(subscriber => {\n const subscription = keydown\n .pipe(filter((event: KeyboardEvent) => hotkeys.some(key => isHotkey(event, key))))\n .subscribe((event: KeyboardEvent) => {\n this.keydownSubscriber = subscriber;\n // setTimeout 是为了解决 Hotkey 冲突时仅执行最后订阅的事件\n setTimeout(() => {\n this.keydownSubscriber?.next(event);\n this.keydownSubscriber = null;\n });\n });\n return () => {\n subscription.unsubscribe();\n };\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, EventEmitter, Inject, Input, OnInit, Output, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { isFormElement, isString } from '@tethys/cdk/is';\nimport { ThyHotkeyDispatcher } from './hotkey-dispatcher';\n\n/**\n * @name thyHotkey\n */\n@Directive({ selector: '[thyHotkey]' })\nexport class ThyHotkeyDirective implements OnInit, OnDestroy {\n /**\n * 热键对应 Code,多个热键组合支持通过数组或逗号分割的形式传入\n */\n @Input() thyHotkey: string | string[];\n\n /**\n * 配置热键触发范围,默认绑定在 document 上\n */\n @Input() thyHotkeyScope?: string | Element | ElementRef<Element>;\n\n /**\n * 热键触发后的事件\n */\n @Output() thyHotkeyListener: EventEmitter<KeyboardEvent> = new EventEmitter();\n\n private subscription: Subscription = null;\n\n constructor(\n @Inject(DOCUMENT) private document: Document,\n private hotkeyDispatcher: ThyHotkeyDispatcher,\n private elementRef: ElementRef<HTMLElement>\n ) {}\n\n ngOnInit(): void {\n const scope = isString(this.thyHotkeyScope) ? this.document.querySelector(this.thyHotkeyScope) : this.thyHotkeyScope;\n this.subscription = this.hotkeyDispatcher.keydown(this.thyHotkey, scope).subscribe(event => {\n event.preventDefault();\n if (isFormElement(this.elementRef)) {\n this.elementRef.nativeElement.focus();\n } else {\n this.elementRef.nativeElement.click();\n }\n this.thyHotkeyListener.emit(event);\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ThyHotkeyDirective } from './hotkey.directive';\n\n@NgModule({\n imports: [],\n exports: [ThyHotkeyDirective],\n declarations: [ThyHotkeyDirective],\n providers: []\n})\nexport class ThyHotkeyModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ThyHotkeyDispatcher"],"mappings":"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"}
@@ -3,10 +3,9 @@ import { ThyEventDispatcher } from '@tethys/cdk/event';
3
3
  import { Observable } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class ThyHotkeyDispatcher extends ThyEventDispatcher {
6
- private hotkeyRecords;
6
+ private keydownSubscriber;
7
7
  constructor(document: any, ngZone: NgZone);
8
8
  private createKeydownObservable;
9
- private checkHotkeyConflict;
10
9
  /**
11
10
  * 热键事件订阅
12
11
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tethys/cdk",
3
- "version": "14.2.0-next.7",
3
+ "version": "14.2.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0",