systelab-virtual-keyboard 17.1.0 → 17.3.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.
package/README.md CHANGED
@@ -42,4 +42,4 @@ The configuration params are describe into the interface [SystelabVirtualKeyboar
42
42
  | layout | SystelabVirtualKeyboardLayouts | | Usually the virtual keyboard select the layout between *default* or *numeric* depending on the input type. But with the config object you can override this behaviour and force the desired layout. The available layouts are described in the enum *SystelabVirtualKeyboardLayouts*
43
43
  | inputMethod | SystelabVirtualKeyboardInputMethods | | The method detected for the keyboard to click or touch the keys
44
44
  | showButton | boolean | false | Show or hide the button for showing the keyboard
45
-
45
+ | showOnMouseClick | boolean | false | Shows virtual keyboard upon mouse click on input field
@@ -7,7 +7,8 @@ import * as i1 from "@angular/cdk/overlay";
7
7
  export class SystelabVirtualKeyboardOverlayService {
8
8
  constructor(overlay) {
9
9
  this.overlay = overlay;
10
- this.focusDispatched = false;
10
+ this.clickAlreadyHandled = false;
11
+ this.touchEndAlreadyHandled = false;
11
12
  this.initListener();
12
13
  }
13
14
  isCreated() {
@@ -25,10 +26,11 @@ export class SystelabVirtualKeyboardOverlayService {
25
26
  hasBackdrop: false,
26
27
  scrollStrategy: this.overlay.scrollStrategies.reposition(),
27
28
  disposeOnNavigation: true,
29
+ backdropClass: 'systelab-virtual-keyboard__backdrop',
30
+ panelClass: 'systelab-virtual-keyboard__panel',
28
31
  });
29
- this.overlayRef.addPanelClass('virtual-keyboard-overlay-pane');
30
32
  if (fixedBottom) {
31
- this.overlayRef.addPanelClass('virtual-keyboard-fixed-bottom');
33
+ this.overlayRef.addPanelClass('systelab-virtual-keyboard__panel--fixed-bottom');
32
34
  }
33
35
  this.updatePositionStrategy(inputOrigin, fixedBottom);
34
36
  this.updateSize();
@@ -38,8 +40,11 @@ export class SystelabVirtualKeyboardOverlayService {
38
40
  updatePosition() {
39
41
  this.updatePositionStrategy(this.inputOrigin, this.fixedBottom);
40
42
  }
41
- setFocusDispatched(dispatched) {
42
- this.focusDispatched = dispatched;
43
+ setClickAlreadyHandled() {
44
+ this.clickAlreadyHandled = true;
45
+ }
46
+ setTouchEndAlreadyHandled() {
47
+ this.touchEndAlreadyHandled = true;
43
48
  }
44
49
  destroy() {
45
50
  if (this.overlayRef) {
@@ -50,25 +55,33 @@ export class SystelabVirtualKeyboardOverlayService {
50
55
  }
51
56
  initListener() {
52
57
  document.addEventListener('click', this.handleClick.bind(this));
58
+ document.addEventListener('touchend', this.handleTouchEnd.bind(this));
53
59
  }
54
60
  handleClick(event) {
55
- if (this.focusDispatched) {
56
- this.focusDispatched = false;
61
+ if (this.clickAlreadyHandled) {
62
+ this.clickAlreadyHandled = false;
57
63
  return;
58
64
  }
59
- console.log('Document clicked:', event);
60
65
  event.stopPropagation();
61
- const simpleKeyboardElement = document.querySelector('.simple-keyboard');
62
- const showKeyboardButtonClicked = event.target?.classList.contains('virtual-keyboard-show-button');
63
- const containsKeyboard = simpleKeyboardElement?.contains(event.target);
64
- const containsElementRef = this.inputOrigin?.contains(event.target);
65
- // const containsFocusedElement = this.focusedElement?.contains(event.target as Node);
66
- const containsShowButton = this.showKeyboardButtonElement?.contains(event.target);
67
- if (!containsKeyboard &&
68
- !containsElementRef &&
69
- // !containsFocusedElement &&
66
+ this.handleEventTarget(event.target);
67
+ }
68
+ handleTouchEnd(event) {
69
+ if (this.touchEndAlreadyHandled) {
70
+ this.touchEndAlreadyHandled = false;
71
+ return;
72
+ }
73
+ event.stopPropagation();
74
+ this.handleEventTarget(event.target);
75
+ }
76
+ handleEventTarget(target) {
77
+ const showKeyboardButtonTarget = target?.classList.contains('virtual-keyboard-show-button');
78
+ const virtualKeyboardTarget = document.querySelector('.simple-keyboard')?.contains(target);
79
+ const inputElementTarget = this.inputOrigin?.contains(target);
80
+ const containsShowButton = this.showKeyboardButtonElement?.contains(target);
81
+ if (!virtualKeyboardTarget &&
82
+ !inputElementTarget &&
70
83
  !containsShowButton &&
71
- !showKeyboardButtonClicked) {
84
+ !showKeyboardButtonTarget) {
72
85
  if (this.isCreated()) {
73
86
  this.destroy();
74
87
  }
@@ -78,10 +91,14 @@ export class SystelabVirtualKeyboardOverlayService {
78
91
  return this.overlayRef?.hasAttached();
79
92
  }
80
93
  updatePositionStrategy(inputOrigin, fixedBottom) {
81
- this.overlayRef.updatePositionStrategy(this.getPositionStrategy(inputOrigin, fixedBottom));
94
+ if (!!this.overlayRef) {
95
+ this.overlayRef.updatePositionStrategy(this.getPositionStrategy(inputOrigin, fixedBottom));
96
+ }
82
97
  }
83
98
  updateSize() {
84
- this.overlayRef.updateSize(this.getOverlaySize());
99
+ if (!!this.overlayRef) {
100
+ this.overlayRef.updateSize(this.getOverlaySize());
101
+ }
85
102
  }
86
103
  getPositionStrategy(inputOrigin, fixedBottom) {
87
104
  if (fixedBottom) {
@@ -157,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
157
174
  providedIn: 'root',
158
175
  }]
159
176
  }], ctorParameters: () => [{ type: i1.Overlay }] });
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBWXpGLE1BQU0sT0FBTyxxQ0FBcUM7SUFTOUMsWUFBNkIsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUZyQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUdyQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLFNBQVM7UUFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFTSxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxNQUFNLENBQ1QsV0FBNkIsRUFDN0IseUJBQXNDLEVBQ3RDLFdBQW9CLEVBQ3BCLFNBQXlDLDhCQUE4QixDQUFDLE9BQU87UUFFL0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO1FBQzNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFD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QUFDLENBQUMsQ0FBQztRQUM5RSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFFN0QsTUFBTSxVQUFVLEdBQUcsWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OEdBbkxRLHFDQUFxQztrSEFBckMscUNBQXFDLGNBRmxDLE1BQU07OzJGQUVULHFDQUFxQztrQkFIakQsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIwIC0gMjAyNCAtIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIFN5c3RlbGFiIFRlY2hub2xvZ2llcywgU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOT1RJQ0U6ICBBbGwgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBhbmQgcmVtYWlucyB0aGUgcHJvcGVydHkgb2YgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzXG4gKiBhZmZpbGlhdGVzLCBpZiBhbnkuICBUaGUgaW50ZWxsZWN0dWFsIGFuZCB0ZWNobmljYWwgY29uY2VwdHMgY29udGFpbmVkIGhlcmVpbiBhcmUgcHJvcHJpZXRhcnkgdG8gSW5zdHJ1bWVudGF0aW9uXG4gKiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0cyBhZmZpbGlhdGVzIGFuZCBtYXkgYmUgY292ZXJlZCBieSBVLlMuIGFuZCBmb3JlaWduIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMsIGFuZC9vclxuICogYXJlIHByb3RlY3RlZCBieSB0cmFkZSBzZWNyZXQgb3IgY29weXJpZ2h0IGxhdy4gRGlzc2VtaW5hdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uIG9yIHJlcHJvZHVjdGlvbiBvZiB0aGlzIG1hdGVyaWFsIGlzXG4gKiBzdHJpY3RseSBmb3JiaWRkZW4gdW5sZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55LlxuICovXG5cbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYsIE92ZXJsYXlTaXplQ29uZmlnLCBQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkT3ZlcmxheVNlcnZpY2Uge1xuICAgIHByaXZhdGUgb3ZlcmxheVJlZiE6IE92ZXJsYXlSZWY7XG4gICAgcHJpdmF0ZSBpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudDtcbiAgICBwcml2YXRlIGZpeGVkQm90dG9tOiBib29sZWFuO1xuICAgIHByaXZhdGUgc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBvcGVuOiBib29sZWFuO1xuICAgIHByaXZhdGUgbGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHM7XG4gICAgcHJpdmF0ZSBmb2N1c0Rpc3BhdGNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSkge1xuICAgICAgICB0aGlzLmluaXRMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0NyZWF0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMub3ZlcmxheVJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGUoXG4gICAgICAgIGlucHV0T3JpZ2luOiBIVE1MSW5wdXRFbGVtZW50LFxuICAgICAgICBzaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICAgICAgZml4ZWRCb3R0b206IGJvb2xlYW4sXG4gICAgICAgIGxheW91dDogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzID0gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQsXG4gICAgKTogQ29tcG9uZW50UmVmPFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50PiB7XG4gICAgICAgIHRoaXMuaW5wdXRPcmlnaW4gPSBpbnB1dE9yaWdpbjtcbiAgICAgICAgdGhpcy5maXhlZEJvdHRvbSA9IGZpeGVkQm90dG9tO1xuICAgICAgICB0aGlzLnNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQgPSBzaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50O1xuICAgICAgICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKCd2aXJ0dWFsLWtleWJvYXJkLW92ZXJsYXktcGFuZScpO1xuICAgICAgICBpZiAoZml4ZWRCb3R0b20pIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKCd2aXJ0dWFsLWtleWJvYXJkLWZpeGVkLWJvdHRvbScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KGlucHV0T3JpZ2luLCBmaXhlZEJvdHRvbSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xuXG4gICAgICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKG5ldyBDb21wb25lbnRQb3J0YWwoU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLmlucHV0T3JpZ2luLCB0aGlzLmZpeGVkQm90dG9tKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9jdXNEaXNwYXRjaGVkKGRpc3BhdGNoZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c0Rpc3BhdGNoZWQgPSBkaXNwYXRjaGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdExpc3RlbmVyKCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c0Rpc3BhdGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNEaXNwYXRjaGVkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ0RvY3VtZW50IGNsaWNrZWQ6JywgZXZlbnQpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29uc3Qgc2ltcGxlS2V5Ym9hcmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNpbXBsZS1rZXlib2FyZCcpO1xuICAgICAgICBjb25zdCBzaG93S2V5Ym9hcmRCdXR0b25DbGlja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmNsYXNzTGlzdC5jb250YWlucygndmlydHVhbC1rZXlib2FyZC1zaG93LWJ1dHRvbicpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5zS2V5Ym9hcmQgPSBzaW1wbGVLZXlib2FyZEVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKTtcbiAgICAgICAgY29uc3QgY29udGFpbnNFbGVtZW50UmVmID0gdGhpcy5pbnB1dE9yaWdpbj8uY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpO1xuICAgICAgICAvLyBjb25zdCBjb250YWluc0ZvY3VzZWRFbGVtZW50ID0gdGhpcy5mb2N1c2VkRWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpO1xuICAgICAgICBjb25zdCBjb250YWluc1Nob3dCdXR0b24gPSB0aGlzLnNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWNvbnRhaW5zS2V5Ym9hcmQgJiZcbiAgICAgICFjb250YWluc0VsZW1lbnRSZWYgJiZcbiAgICAgIC8vICFjb250YWluc0ZvY3VzZWRFbGVtZW50ICYmXG4gICAgICAhY29udGFpbnNTaG93QnV0dG9uICYmXG4gICAgICAhc2hvd0tleWJvYXJkQnV0dG9uQ2xpY2tlZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ3JlYXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzQXR0YWNoZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvblN0cmF0ZWd5KGlucHV0T3JpZ2luOiBIVE1MSW5wdXRFbGVtZW50LCBmaXhlZEJvdHRvbTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLmdldFBvc2l0aW9uU3RyYXRlZ3koaW5wdXRPcmlnaW4sIGZpeGVkQm90dG9tKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh0aGlzLmdldE92ZXJsYXlTaXplKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zaXRpb25TdHJhdGVneShpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCwgZml4ZWRCb3R0b206IGJvb2xlYW4pOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICAgICAgaWYgKGZpeGVkQm90dG9tKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuYm90dG9tKCcwJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb2ludFdpdGhEaW1lbnNpb25zOiBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luID0gdGhpcy5jb21wdXRlUG9zaXRpb25TdHJhdGVneU9yaWdpbihpbnB1dE9yaWdpbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHBvaW50V2l0aERpbWVuc2lvbnMpXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24odHJ1ZSlcbiAgICAgICAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPdmVybGF5U2l6ZSgpOiBPdmVybGF5U2l6ZUNvbmZpZyB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlXaWR0aCA9IHRoaXMubGF5b3V0ID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMubnVtZXJpYyA/ICc0MDBweCcgOiAnMTIwMHB4JztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IG92ZXJsYXlXaWR0aCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBvdmVybGF5V2lkdGgsXG4gICAgICAgICAgICBtaW5XaWR0aDogb3ZlcmxheVdpZHRoLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZVBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQpOiBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxheU9mZnNldFggPSB0aGlzLmNvbXB1dGVPdmVybGF5T2Zmc2V0WChpbnB1dE9yaWdpbik7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IG92ZXJsYXlXaWR0aFN0cmluZyB9ID0gdGhpcy5nZXRPdmVybGF5U2l6ZSgpO1xuICAgICAgICBjb25zdCBvdmVybGF5V2lkdGggPSBOdW1iZXIoKG92ZXJsYXlXaWR0aFN0cmluZyBhcyBzdHJpbmcpLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgY29uc3Qge3gsIHksIHdpZHRoLCBoZWlnaHR9ID0gaW5wdXRPcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IHdpZHRoIDwgb3ZlcmxheVdpZHRoID8geCAtIG92ZXJsYXlPZmZzZXRYIDogeCArIG92ZXJsYXlPZmZzZXRYLFxuICAgICAgICAgICAgeSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVPdmVybGF5T2Zmc2V0WChpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IG92ZXJsYXlXaWR0aFN0cmluZyB9ID0gdGhpcy5nZXRPdmVybGF5U2l6ZSgpO1xuICAgICAgICBjb25zdCBvdmVybGF5V2lkdGggPSBOdW1iZXIoKG92ZXJsYXlXaWR0aFN0cmluZyBhcyBzdHJpbmcpLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgY29uc3QgaW5wdXRXaWR0aCA9IGlucHV0T3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG4gICAgICAgIGNvbnN0IGV4dHJhV2lkdGggPSBvdmVybGF5V2lkdGggLSBpbnB1dFdpZHRoO1xuXG4gICAgICAgIHJldHVybiBNYXRoLmFicyhleHRyYVdpZHRoKSAvIDI7XG4gICAgfVxufVxuIl19
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBWXpGLE1BQU0sT0FBTyxxQ0FBcUM7SUFVOUMsWUFBNkIsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUhyQyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBRzVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU0sU0FBUztRQUNaLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVNLE1BQU07UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVNLE1BQU0sQ0FDVCxXQUE2QixFQUM3Qix5QkFBc0MsRUFDdEMsV0FBb0IsRUFDcEIsU0FBeUMsOEJBQThCLENBQUMsT0FBTztRQUUvRSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7UUFDM0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIs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QUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbEUsT0FBTztZQUNILEtBQUs7WUFDTCxNQUFNO1lBQ04sQ0FBQyxFQUFFLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjO1lBQ2pFLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUVPLHFCQUFxQixDQUFDLFdBQTZCO1FBQ3ZELE1BQU0sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFFLGtCQUE2QixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFFN0QsTUFBTSxVQUFVLEdBQUcsWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OEdBdk1RLHFDQUFxQztrSEFBckMscUNBQXFDLGNBRmxDLE1BQU07OzJGQUVULHFDQUFxQztrQkFIakQsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIwIC0gMjAyNCAtIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIFN5c3RlbGFiIFRlY2hub2xvZ2llcywgU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOT1RJQ0U6ICBBbGwgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBhbmQgcmVtYWlucyB0aGUgcHJvcGVydHkgb2YgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzXG4gKiBhZmZpbGlhdGVzLCBpZiBhbnkuICBUaGUgaW50ZWxsZWN0dWFsIGFuZCB0ZWNobmljYWwgY29uY2VwdHMgY29udGFpbmVkIGhlcmVpbiBhcmUgcHJvcHJpZXRhcnkgdG8gSW5zdHJ1bWVudGF0aW9uXG4gKiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0cyBhZmZpbGlhdGVzIGFuZCBtYXkgYmUgY292ZXJlZCBieSBVLlMuIGFuZCBmb3JlaWduIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMsIGFuZC9vclxuICogYXJlIHByb3RlY3RlZCBieSB0cmFkZSBzZWNyZXQgb3IgY29weXJpZ2h0IGxhdy4gRGlzc2VtaW5hdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uIG9yIHJlcHJvZHVjdGlvbiBvZiB0aGlzIG1hdGVyaWFsIGlzXG4gKiBzdHJpY3RseSBmb3JiaWRkZW4gdW5sZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55LlxuICovXG5cbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYsIE92ZXJsYXlTaXplQ29uZmlnLCBQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudCc7XG5cbmludGVyZmFjZSBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkT3ZlcmxheVNlcnZpY2Uge1xuICAgIHByaXZhdGUgb3ZlcmxheVJlZiE6IE92ZXJsYXlSZWY7XG4gICAgcHJpdmF0ZSBpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudDtcbiAgICBwcml2YXRlIGZpeGVkQm90dG9tOiBib29sZWFuO1xuICAgIHByaXZhdGUgc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBvcGVuOiBib29sZWFuO1xuICAgIHByaXZhdGUgbGF5b3V0OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHM7XG4gICAgcHJpdmF0ZSBjbGlja0FscmVhZHlIYW5kbGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSB0b3VjaEVuZEFscmVhZHlIYW5kbGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXk6IE92ZXJsYXkpIHtcbiAgICAgICAgdGhpcy5pbml0TGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDcmVhdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLm92ZXJsYXlSZWY7XG4gICAgfVxuXG4gICAgcHVibGljIGlzT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlKFxuICAgICAgICBpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCxcbiAgICAgICAgc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgICAgIGZpeGVkQm90dG9tOiBib29sZWFuLFxuICAgICAgICBsYXlvdXQ6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyA9IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5kZWZhdWx0LFxuICAgICk6IENvbXBvbmVudFJlZjxTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbXBvbmVudD4ge1xuICAgICAgICB0aGlzLmlucHV0T3JpZ2luID0gaW5wdXRPcmlnaW47XG4gICAgICAgIHRoaXMuZml4ZWRCb3R0b20gPSBmaXhlZEJvdHRvbTtcbiAgICAgICAgdGhpcy5zaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50ID0gc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudDtcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcbiAgICAgICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiAnc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZF9fYmFja2Ryb3AnLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmRfX3BhbmVsJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmaXhlZEJvdHRvbSkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoJ3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmRfX3BhbmVsLS1maXhlZC1ib3R0b20nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25TdHJhdGVneShpbnB1dE9yaWdpbiwgZml4ZWRCb3R0b20pO1xuICAgICAgICB0aGlzLnVwZGF0ZVNpemUoKTtcblxuICAgICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgQ29tcG9uZW50UG9ydGFsKFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5pbnB1dE9yaWdpbiwgdGhpcy5maXhlZEJvdHRvbSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENsaWNrQWxyZWFkeUhhbmRsZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xpY2tBbHJlYWR5SGFuZGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFRvdWNoRW5kQWxyZWFkeUhhbmRsZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91Y2hFbmRBbHJlYWR5SGFuZGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0TGlzdGVuZXIoKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLmhhbmRsZVRvdWNoRW5kLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xpY2tBbHJlYWR5SGFuZGxlZCkge1xuICAgICAgICAgICAgdGhpcy5jbGlja0FscmVhZHlIYW5kbGVkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFdmVudFRhcmdldChldmVudC50YXJnZXQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlVG91Y2hFbmQoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMudG91Y2hFbmRBbHJlYWR5SGFuZGxlZCkge1xuICAgICAgICAgICAgdGhpcy50b3VjaEVuZEFscmVhZHlIYW5kbGVkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFdmVudFRhcmdldChldmVudC50YXJnZXQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRXZlbnRUYXJnZXQodGFyZ2V0OiBFdmVudFRhcmdldCkge1xuICAgICAgICBjb25zdCBzaG93S2V5Ym9hcmRCdXR0b25UYXJnZXQ6IGJvb2xlYW4gPSAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2aXJ0dWFsLWtleWJvYXJkLXNob3ctYnV0dG9uJyk7XG4gICAgICAgIGNvbnN0IHZpcnR1YWxLZXlib2FyZFRhcmdldDogYm9vbGVhbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zaW1wbGUta2V5Ym9hcmQnKT8uY29udGFpbnModGFyZ2V0IGFzIE5vZGUpO1xuICAgICAgICBjb25zdCBpbnB1dEVsZW1lbnRUYXJnZXQ6IGJvb2xlYW4gPSB0aGlzLmlucHV0T3JpZ2luPy5jb250YWlucyh0YXJnZXQgYXMgTm9kZSk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5zU2hvd0J1dHRvbjogYm9vbGVhbiA9IHRoaXMuc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudD8uY29udGFpbnModGFyZ2V0IGFzIE5vZGUpO1xuXG4gICAgICAgIGlmICghdmlydHVhbEtleWJvYXJkVGFyZ2V0ICYmXG4gICAgICAgICAgICAhaW5wdXRFbGVtZW50VGFyZ2V0ICYmXG4gICAgICAgICAgICAhY29udGFpbnNTaG93QnV0dG9uICYmXG4gICAgICAgICAgICAhc2hvd0tleWJvYXJkQnV0dG9uVGFyZ2V0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0NyZWF0ZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0F0dGFjaGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUG9zaXRpb25TdHJhdGVneShpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCwgZml4ZWRCb3R0b206IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCEhdGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLmdldFBvc2l0aW9uU3RyYXRlZ3koaW5wdXRPcmlnaW4sIGZpeGVkQm90dG9tKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNpemUoKTogdm9pZCB7XG4gICAgICAgIGlmICghIXRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVNpemUodGhpcy5nZXRPdmVybGF5U2l6ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zaXRpb25TdHJhdGVneShpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCwgZml4ZWRCb3R0b206IGJvb2xlYW4pOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICAgICAgaWYgKGZpeGVkQm90dG9tKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuYm90dG9tKCcwJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb2ludFdpdGhEaW1lbnNpb25zOiBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luID0gdGhpcy5jb21wdXRlUG9zaXRpb25TdHJhdGVneU9yaWdpbihpbnB1dE9yaWdpbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHBvaW50V2l0aERpbWVuc2lvbnMpXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24odHJ1ZSlcbiAgICAgICAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPdmVybGF5U2l6ZSgpOiBPdmVybGF5U2l6ZUNvbmZpZyB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlXaWR0aCA9IHRoaXMubGF5b3V0ID09PSBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMubnVtZXJpYyA/ICc0MDBweCcgOiAnMTIwMHB4JztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IG92ZXJsYXlXaWR0aCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBvdmVybGF5V2lkdGgsXG4gICAgICAgICAgICBtaW5XaWR0aDogb3ZlcmxheVdpZHRoLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZVBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oaW5wdXRPcmlnaW46IEhUTUxJbnB1dEVsZW1lbnQpOiBQb3NpdGlvblN0cmF0ZWd5T3JpZ2luIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxheU9mZnNldFggPSB0aGlzLmNvbXB1dGVPdmVybGF5T2Zmc2V0WChpbnB1dE9yaWdpbik7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IG92ZXJsYXlXaWR0aFN0cmluZyB9ID0gdGhpcy5nZXRPdmVybGF5U2l6ZSgpO1xuICAgICAgICBjb25zdCBvdmVybGF5V2lkdGggPSBOdW1iZXIoKG92ZXJsYXlXaWR0aFN0cmluZyBhcyBzdHJpbmcpLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgY29uc3Qge3gsIHksIHdpZHRoLCBoZWlnaHR9ID0gaW5wdXRPcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHg6IHdpZHRoIDwgb3ZlcmxheVdpZHRoID8geCAtIG92ZXJsYXlPZmZzZXRYIDogeCArIG92ZXJsYXlPZmZzZXRYLFxuICAgICAgICAgICAgeSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVPdmVybGF5T2Zmc2V0WChpbnB1dE9yaWdpbjogSFRNTElucHV0RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IG92ZXJsYXlXaWR0aFN0cmluZyB9ID0gdGhpcy5nZXRPdmVybGF5U2l6ZSgpO1xuICAgICAgICBjb25zdCBvdmVybGF5V2lkdGggPSBOdW1iZXIoKG92ZXJsYXlXaWR0aFN0cmluZyBhcyBzdHJpbmcpLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgY29uc3QgaW5wdXRXaWR0aCA9IGlucHV0T3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG4gICAgICAgIGNvbnN0IGV4dHJhV2lkdGggPSBvdmVybGF5V2lkdGggLSBpbnB1dFdpZHRoO1xuXG4gICAgICAgIHJldHVybiBNYXRoLmFicyhleHRyYVdpZHRoKSAvIDI7XG4gICAgfVxufVxuIl19
@@ -356,11 +356,11 @@ export class SystelabVirtualKeyboardComponent {
356
356
  this.caretPositionEnd = endPosition;
357
357
  }
358
358
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardComponent, deps: [{ token: i0.ElementRef }, { token: VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
359
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardComponent, isStandalone: true, selector: "systelab-virtual-keyboard.component", outputs: { closePanel: "closePanel" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:pointerup": "handleMouseUp($event)", "window:mouseup": "handleMouseUp($event)", "window:select": "handleSelect($event)", "window:selectionchange": "handleSelectionChange($event)" } }, ngImport: i0, template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:Lato,HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}\n"] }); }
359
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardComponent, isStandalone: true, selector: "systelab-virtual-keyboard.component", outputs: { closePanel: "closePanel" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:pointerup": "handleMouseUp($event)", "window:mouseup": "handleMouseUp($event)", "window:select": "handleSelect($event)", "window:selectionchange": "handleSelectionChange($event)" } }, ngImport: i0, template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:var(--systelab-virtual-keyboard-font-family)}\n"] }); }
360
360
  }
361
361
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardComponent, decorators: [{
362
362
  type: Component,
363
- args: [{ selector: 'systelab-virtual-keyboard.component', standalone: true, imports: [], template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:Lato,HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}\n"] }]
363
+ args: [{ selector: 'systelab-virtual-keyboard.component', standalone: true, imports: [], template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:var(--systelab-virtual-keyboard-font-family)}\n"] }]
364
364
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: undefined, decorators: [{
365
365
  type: Optional
366
366
  }, {
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const VIRTUAL_KEYBOARD_CONFIG = new InjectionToken('VIRTUAL_KEYBOARD_CONFIG');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FBZ0MseUJBQXlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcywgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgVklSVFVBTF9LRVlCT0FSRF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWc+KCdWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnIHtcbiAgICBsYXlvdXQ/OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHM7XG4gICAgaW5wdXRNZXRob2Q/OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcztcbiAgICBzaG93SWNvbj86IGJvb2xlYW47XG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FBZ0MseUJBQXlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcywgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgVklSVFVBTF9LRVlCT0FSRF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWc+KCdWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnIHtcbiAgICBsYXlvdXQ/OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHM7XG4gICAgaW5wdXRNZXRob2Q/OiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TWV0aG9kcztcbiAgICBzaG93SWNvbj86IGJvb2xlYW47XG4gICAgc2hvd09uTW91c2VDbGljaz86IGJvb2xlYW47XG59XG4iXX0=
@@ -17,21 +17,23 @@ export class SystelabVirtualKeyboardDirective {
17
17
  if (!this.vkEnabled) {
18
18
  return;
19
19
  }
20
- if (this.overlayService.isCreated()) {
21
- this.overlayService.updatePosition();
20
+ this.overlayService.updatePosition();
21
+ }
22
+ onClick() {
23
+ if (!this.vkEnabled || !this.config.showOnMouseClick) {
24
+ return;
22
25
  }
26
+ this.closePanel();
27
+ this.overlayService.setClickAlreadyHandled();
28
+ this.openPanel();
23
29
  }
24
- onFocus() {
30
+ onTouchEnd() {
25
31
  if (!this.vkEnabled) {
26
32
  return;
27
33
  }
28
- if (this.overlayService.isCreated()) {
29
- this.closePanel();
30
- }
31
- this.overlayService.setFocusDispatched(true);
32
- if (!this.overlayService.isOpen()) {
33
- this.openPanel();
34
- }
34
+ this.closePanel();
35
+ this.overlayService.setTouchEndAlreadyHandled();
36
+ this.openPanel();
35
37
  }
36
38
  set vkEnabled(enabled) {
37
39
  if (typeof enabled === 'string') {
@@ -95,9 +97,7 @@ export class SystelabVirtualKeyboardDirective {
95
97
  const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');
96
98
  keyboardIcon.removeEventListener('click', this.togglePanel.bind(this));
97
99
  }
98
- if (this.overlayService.isCreated()) {
99
- this.overlayService.destroy();
100
- }
100
+ this.overlayService.destroy();
101
101
  }
102
102
  togglePanel() {
103
103
  if (!this.vkEnabled) {
@@ -163,13 +163,13 @@ export class SystelabVirtualKeyboardDirective {
163
163
  const child = this.document.createElement('i');
164
164
  child.classList.add('fa');
165
165
  child.classList.add('fa-keyboard');
166
- child.classList.add('virtual-keyboard-show-button');
166
+ child.classList.add('systelab-virtual-keyboard__show-button');
167
167
  this.renderer.appendChild(this.elementRef.nativeElement.parentElement, child);
168
168
  this.showKeyboardButtonElement = child;
169
169
  }
170
170
  }
171
171
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardDirective, deps: [{ token: i0.ElementRef }, { token: i1.SystelabVirtualKeyboardOverlayService }, { token: i0.Renderer2 }, { token: DOCUMENT }, { token: VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
172
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardDirective, selector: "input[vkEnabled], textarea[vkEnabled]", inputs: { vkEnabled: "vkEnabled", vkFixedBottom: "vkFixedBottom", vkDebug: "vkDebug", vkConfig: "vkConfig" }, host: { listeners: { "window:touchmove": "onDocumentScroll($event)", "window:touchend": "onDocumentScroll($event)", "window:wheel": "onDocumentScroll($event)", "document:scroll": "onDocumentScroll($event)", "focus": "onFocus($event)" } }, ngImport: i0 }); }
172
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardDirective, selector: "input[vkEnabled], textarea[vkEnabled]", inputs: { vkEnabled: "vkEnabled", vkFixedBottom: "vkFixedBottom", vkDebug: "vkDebug", vkConfig: "vkConfig" }, host: { listeners: { "window:touchmove": "onDocumentScroll($event)", "window:touchend": "onDocumentScroll($event)", "window:wheel": "onDocumentScroll($event)", "document:scroll": "onDocumentScroll($event)", "click": "onClick($event)", "touchend": "onTouchEnd($event)" } }, ngImport: i0 }); }
173
173
  }
174
174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardDirective, decorators: [{
175
175
  type: Directive,
@@ -196,9 +196,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
196
196
  }, {
197
197
  type: HostListener,
198
198
  args: ['document:scroll', ['$event']]
199
- }], onFocus: [{
199
+ }], onClick: [{
200
+ type: HostListener,
201
+ args: ['click', ['$event']]
202
+ }], onTouchEnd: [{
200
203
  type: HostListener,
201
- args: ['focus', ['$event']]
204
+ args: ['touchend', ['$event']]
202
205
  }], vkEnabled: [{
203
206
  type: Input
204
207
  }], vkFixedBottom: [{
@@ -208,4 +211,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
208
211
  }], vkConfig: [{
209
212
  type: Input
210
213
  }] } });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxHQUVYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHaEcsT0FBTyxFQUFpQyx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUFLNUcsTUFBTSxPQUFPLGdDQUFnQztJQUt6QyxnQkFBZ0I7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QztJQUNMLENBQUM7SUFHRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNyQjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFD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QkFXM0MsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFpQjdCLFNBQVM7c0JBRFosS0FBSztnQkFnQkYsYUFBYTtzQkFEaEIsS0FBSztnQkFnQkYsT0FBTztzQkFEVixLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgLSAyMDI0IC0gSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgU3lzdGVsYWIgVGVjaG5vbG9naWVzLCBTQS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5PVElDRTogIEFsbCBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIGFuZCByZW1haW5zIHRoZSBwcm9wZXJ0eSBvZiBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55IGFuZCBpdHNcbiAqIGFmZmlsaWF0ZXMsIGlmIGFueS4gIFRoZSBpbnRlbGxlY3R1YWwgYW5kIHRlY2huaWNhbCBjb25jZXB0cyBjb250YWluZWQgaGVyZWluIGFyZSBwcm9wcmlldGFyeSB0byBJbnN0cnVtZW50YXRpb25cbiAqIExhYm9yYXRvcnkgQ29tcGFueSBhbmQgaXRzIGFmZmlsaWF0ZXMgYW5kIG1heSBiZSBjb3ZlcmVkIGJ5IFUuUy4gYW5kIGZvcmVpZ24gcGF0ZW50cyBhbmQgcGF0ZW50IGFwcGxpY2F0aW9ucywgYW5kL29yXG4gKiBhcmUgcHJvdGVjdGVkIGJ5IHRyYWRlIHNlY3JldCBvciBjb3B5cmlnaHQgbGF3LiBEaXNzZW1pbmF0aW9uIG9mIHRoaXMgaW5mb3JtYXRpb24gb3IgcmVwcm9kdWN0aW9uIG9mIHRoaXMgbWF0ZXJpYWwgaXNcbiAqIHN0cmljdGx5IGZvcmJpZGRlbiB1bmxlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGlzIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TW9kZXMsIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLW92ZXJsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZywgVklSVFVBTF9LRVlCT0FSRF9DT05GSUcgfSBmcm9tICcuL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuY29uZmlnJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpbnB1dFt2a0VuYWJsZWRdLCB0ZXh0YXJlYVt2a0VuYWJsZWRdJyxcbn0pXG5leHBvcnQgY2xhc3MgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnRvdWNobW92ZScsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnRvdWNoZW5kJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6d2hlZWwnLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnNjcm9sbCcsIFsnJGV2ZW50J10pXG4gICAgb25Eb2N1bWVudFNjcm9sbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZrRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlTZXJ2aWNlLmlzQ3JlYXRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycsIFsnJGV2ZW50J10pXG4gICAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZrRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlTZXJ2aWNlLmlzQ3JlYXRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLnNldEZvY3VzRGlzcGF0Y2hlZCh0cnVlKTtcbiAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlTZXJ2aWNlLmlzT3BlbigpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYW5lbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmFibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB2a0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbiB8IHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIGVuYWJsZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBnZXQgdmtFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmFibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZml4ZWRCb3R0b20gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHZrRml4ZWRCb3R0b20oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpeGVkQm90dG9tO1xuICAgIH1cblxuICAgIHNldCB2a0ZpeGVkQm90dG9tKGZpeGVkQm90dG9tOiBib29sZWFuIHwgc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZml4ZWRCb3R0b20gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmZpeGVkQm90dG9tID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZml4ZWRCb3R0b20gPSBmaXhlZEJvdHRvbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVidWcgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHZrRGVidWcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlYnVnO1xuICAgIH1cblxuICAgIHNldCB2a0RlYnVnKGRlYnVnOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZzogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWc7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCB2a0NvbmZpZygpOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgICB9XG5cbiAgICBzZXQgdmtDb25maWcoY29uZmlnOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhbmVsUmVmITogQ29tcG9uZW50UmVmPFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29tcG9uZW50PjtcbiAgICBwcml2YXRlIHNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5U2VydmljZTogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBhbnksXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVklSVFVBTF9LRVlCT0FSRF9DT05GSUcpIHByaXZhdGUgdmlydHVhbEtleWJvYXJkQ29uZmlnOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZyxcbiAgICApIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLnZpcnR1YWxLZXlib2FyZENvbmZpZztcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5zaG93SWNvbikge1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hLZXlib2FyZEljb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmtFbmFibGVkICYmIHRoaXMuY29uZmlnPy5zaG93SWNvbikge1xuICAgICAgICAgICAgY29uc3Qga2V5Ym9hcmRJY29uID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpJyk7XG4gICAgICAgICAgICBrZXlib2FyZEljb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnRvZ2dsZVBhbmVsLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZrRW5hYmxlZCAmJiB0aGlzLmNvbmZpZz8uc2hvd0ljb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGtleWJvYXJkSWNvbiA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcignaScpO1xuICAgICAgICAgICAga2V5Ym9hcmRJY29uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50b2dnbGVQYW5lbC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5pc0NyZWF0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmtFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVNlcnZpY2UuaXNPcGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb3BlblBhbmVsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmtFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVNlcnZpY2UuaXNDcmVhdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlTZXJ2aWNlLmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYXlvdXQgPSB0aGlzLmdldExheW91dCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5wYW5lbFJlZiA9IHRoaXMub3ZlcmxheVNlcnZpY2UuY3JlYXRlKHRoaXMuaW5wdXRPcmlnaW4oKSwgdGhpcy5zaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50LCB0aGlzLnZrRml4ZWRCb3R0b20sIGN1cnJlbnRMYXlvdXQpO1xuICAgICAgICB0aGlzLnBhbmVsUmVmLmluc3RhbmNlLmRlYnVnID0gdGhpcy52a0RlYnVnO1xuICAgICAgICB0aGlzLnBhbmVsUmVmLmluc3RhbmNlLnNldEFjdGl2ZUlucHV0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5pbnN0YW5jZS5zZXRMYXlvdXQoY3VycmVudExheW91dCk7XG4gICAgICAgIHRoaXMucGFuZWxSZWYuaW5zdGFuY2UuY2xvc2VQYW5lbC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZVBhbmVsKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGF5b3V0KGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMge1xuICAgICAgICBpZiAodGhpcy5jb25maWc/Lmhhc093blByb3BlcnR5KCdsYXlvdXQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmxheW91dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0lucHV0QWxwaGFiZXRpYyhhY3RpdmVJbnB1dEVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0lucHV0TnVtZXJpYyhhY3RpdmVJbnB1dEVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLm51bWVyaWM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzSW5wdXRBbHBoYWJldGljKGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaW5wdXRNb2RlID0gdGhpcy5nZXRJbnB1dE1vZGUoYWN0aXZlSW5wdXRFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGlucHV0TW9kZSAmJiAgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRNb2Rlcy50ZXh0LCBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0TW9kZXMucGFzc3dvcmRdLnNvbWUoKGkpID0+IGkgPT09IGlucHV0TW9kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0lucHV0TnVtZXJpYyhhY3RpdmVJbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGlucHV0TW9kZSA9IHRoaXMuZ2V0SW5wdXRNb2RlKGFjdGl2ZUlucHV0RWxlbWVudCk7XG4gICAgICAgIHJldHVybiBpbnB1dE1vZGUgJiYgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRNb2Rlcy5udW1lcmljXS5zb21lKChpKSA9PiBpID09PSBpbnB1dE1vZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SW5wdXRNb2RlKGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYWN0aXZlSW5wdXRFbGVtZW50Py5pbnB1dE1vZGUgPz8gYWN0aXZlSW5wdXRFbGVtZW50Py50eXBlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VQYW5lbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnB1dE9yaWdpbigpOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoS2V5Ym9hcmRJY29uKCkge1xuICAgICAgICBpZiAodGhpcy52a0VuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7XG4gICAgICAgICAgICBjaGlsZC5jbGFzc0xpc3QuYWRkKCdmYScpO1xuICAgICAgICAgICAgY2hpbGQuY2xhc3NMaXN0LmFkZCgnZmEta2V5Ym9hcmQnKTtcbiAgICAgICAgICAgIGNoaWxkLmNsYXNzTGlzdC5hZGQoJ3ZpcnR1YWwta2V5Ym9hcmQtc2hvdy1idXR0b24nKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCwgY2hpbGQpO1xuICAgICAgICAgICAgdGhpcy5zaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50ID0gY2hpbGQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxHQUVYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHaEcsT0FBTyxFQUFpQyx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUFLNUcsTUFBTSxPQUFPLGdDQUFnQztJQUt6QyxnQkFBZ0I7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFHRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFO1lBQ2xELE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFHRCxVQUFVO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElB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T0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFZakMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjaEMsU0FBUztzQkFEWixLQUFLO2dCQWdCRixhQUFhO3NCQURoQixLQUFLO2dCQWdCRixPQUFPO3NCQURWLEtBQUs7Z0JBWUYsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMCAtIDIwMjQgLSBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55IGFuZCBTeXN0ZWxhYiBUZWNobm9sb2dpZXMsIFNBLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTk9USUNFOiAgQWxsIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgYW5kIHJlbWFpbnMgdGhlIHByb3BlcnR5IG9mIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0c1xuICogYWZmaWxpYXRlcywgaWYgYW55LiAgVGhlIGludGVsbGVjdHVhbCBhbmQgdGVjaG5pY2FsIGNvbmNlcHRzIGNvbnRhaW5lZCBoZXJlaW4gYXJlIHByb3ByaWV0YXJ5IHRvIEluc3RydW1lbnRhdGlvblxuICogTGFib3JhdG9yeSBDb21wYW55IGFuZCBpdHMgYWZmaWxpYXRlcyBhbmQgbWF5IGJlIGNvdmVyZWQgYnkgVS5TLiBhbmQgZm9yZWlnbiBwYXRlbnRzIGFuZCBwYXRlbnQgYXBwbGljYXRpb25zLCBhbmQvb3JcbiAqIGFyZSBwcm90ZWN0ZWQgYnkgdHJhZGUgc2VjcmV0IG9yIGNvcHlyaWdodCBsYXcuIERpc3NlbWluYXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbiBvciByZXByb2R1Y3Rpb24gb2YgdGhpcyBtYXRlcmlhbCBpc1xuICogc3RyaWN0bHkgZm9yYmlkZGVuIHVubGVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gaXMgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueS5cbiAqL1xuXG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRNb2RlcywgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb21wb25lbnQgfSBmcm9tICcuL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQtb3ZlcmxheS5zZXJ2aWNlJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnLCBWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRyB9IGZyb20gJy4vc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2lucHV0W3ZrRW5hYmxlZF0sIHRleHRhcmVhW3ZrRW5hYmxlZF0nLFxufSlcbmV4cG9ydCBjbGFzcyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6dG91Y2htb3ZlJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6dG91Y2hlbmQnLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzp3aGVlbCcsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6c2Nyb2xsJywgWyckZXZlbnQnXSlcbiAgICBvbkRvY3VtZW50U2Nyb2xsKCkge1xuICAgICAgICBpZiAoIXRoaXMudmtFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS51cGRhdGVQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmtFbmFibGVkIHx8ICF0aGlzLmNvbmZpZy5zaG93T25Nb3VzZUNsaWNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5zZXRDbGlja0FscmVhZHlIYW5kbGVkKCk7XG4gICAgICAgIHRoaXMub3BlblBhbmVsKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbJyRldmVudCddKVxuICAgIG9uVG91Y2hFbmQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52a0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLnNldFRvdWNoRW5kQWxyZWFkeUhhbmRsZWQoKTtcbiAgICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZrRW5hYmxlZChlbmFibGVkOiBib29sZWFuIHwgc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW5hYmxlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGdldCB2a0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaXhlZEJvdHRvbSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgdmtGaXhlZEJvdHRvbSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZml4ZWRCb3R0b207XG4gICAgfVxuXG4gICAgc2V0IHZrRml4ZWRCb3R0b20oZml4ZWRCb3R0b206IGJvb2xlYW4gfCBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmaXhlZEJvdHRvbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuZml4ZWRCb3R0b20gPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maXhlZEJvdHRvbSA9IGZpeGVkQm90dG9tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWJ1ZyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgdmtEZWJ1ZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVidWc7XG4gICAgfVxuXG4gICAgc2V0IHZrRGVidWcoZGVidWc6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kZWJ1ZyA9IGRlYnVnO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlnOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZztcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHZrQ29uZmlnKCk6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICAgIH1cblxuICAgIHNldCB2a0NvbmZpZyhjb25maWc6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFuZWxSZWYhOiBDb21wb25lbnRSZWY8U3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb21wb25lbnQ+O1xuICAgIHByaXZhdGUgc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXlTZXJ2aWNlOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQ6IGFueSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRykgcHJpdmF0ZSB2aXJ0dWFsS2V5Ym9hcmRDb25maWc6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnLFxuICAgICkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IHRoaXMudmlydHVhbEtleWJvYXJkQ29uZmlnO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWc/LnNob3dJY29uKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaEtleWJvYXJkSWNvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy52a0VuYWJsZWQgJiYgdGhpcy5jb25maWc/LnNob3dJY29uKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlib2FyZEljb24gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2knKTtcbiAgICAgICAgICAgIGtleWJvYXJkSWNvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMudG9nZ2xlUGFuZWwuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudmtFbmFibGVkICYmIHRoaXMuY29uZmlnPy5zaG93SWNvbikge1xuICAgICAgICAgICAgY29uc3Qga2V5Ym9hcmRJY29uID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpJyk7XG4gICAgICAgICAgICBrZXlib2FyZEljb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnRvZ2dsZVBhbmVsLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52a0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5pc09wZW4oKSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYW5lbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52a0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5pc0NyZWF0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVNlcnZpY2UuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudExheW91dCA9IHRoaXMuZ2V0TGF5b3V0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICB0aGlzLnBhbmVsUmVmID0gdGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGUodGhpcy5pbnB1dE9yaWdpbigpLCB0aGlzLnNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQsIHRoaXMudmtGaXhlZEJvdHRvbSwgY3VycmVudExheW91dCk7XG4gICAgICAgIHRoaXMucGFuZWxSZWYuaW5zdGFuY2UuZGVidWcgPSB0aGlzLnZrRGVidWc7XG4gICAgICAgIHRoaXMucGFuZWxSZWYuaW5zdGFuY2Uuc2V0QWN0aXZlSW5wdXQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnBhbmVsUmVmLmluc3RhbmNlLnNldExheW91dChjdXJyZW50TGF5b3V0KTtcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5pbnN0YW5jZS5jbG9zZVBhbmVsLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlUGFuZWwoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMYXlvdXQoYWN0aXZlSW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCk6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cyB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZz8uaGFzT3duUHJvcGVydHkoJ2xheW91dCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25maWcubGF5b3V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzSW5wdXRBbHBoYWJldGljKGFjdGl2ZUlucHV0RWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5wdXROdW1lcmljKGFjdGl2ZUlucHV0RWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMubnVtZXJpYztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNJbnB1dEFscGhhYmV0aWMoYWN0aXZlSW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpbnB1dE1vZGUgPSB0aGlzLmdldElucHV0TW9kZShhY3RpdmVJbnB1dEVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gaW5wdXRNb2RlICYmICBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dE1vZGVzLnRleHQsIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRNb2Rlcy5wYXNzd29yZF0uc29tZSgoaSkgPT4gaSA9PT0gaW5wdXRNb2RlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzSW5wdXROdW1lcmljKGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaW5wdXRNb2RlID0gdGhpcy5nZXRJbnB1dE1vZGUoYWN0aXZlSW5wdXRFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGlucHV0TW9kZSAmJiBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dE1vZGVzLm51bWVyaWNdLnNvbWUoKGkpID0+IGkgPT09IGlucHV0TW9kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbnB1dE1vZGUoYWN0aXZlSW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBhY3RpdmVJbnB1dEVsZW1lbnQ/LmlucHV0TW9kZSA/PyBhY3RpdmVJbnB1dEVsZW1lbnQ/LnR5cGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlucHV0T3JpZ2luKCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdHRhY2hLZXlib2FyZEljb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnZrRW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcbiAgICAgICAgICAgIGNoaWxkLmNsYXNzTGlzdC5hZGQoJ2ZhJyk7XG4gICAgICAgICAgICBjaGlsZC5jbGFzc0xpc3QuYWRkKCdmYS1rZXlib2FyZCcpO1xuICAgICAgICAgICAgY2hpbGQuY2xhc3NMaXN0LmFkZCgnc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZF9fc2hvdy1idXR0b24nKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCwgY2hpbGQpO1xuICAgICAgICAgICAgdGhpcy5zaG93S2V5Ym9hcmRCdXR0b25FbGVtZW50ID0gY2hpbGQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -398,11 +398,11 @@ class SystelabVirtualKeyboardComponent {
398
398
  this.caretPositionEnd = endPosition;
399
399
  }
400
400
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardComponent, deps: [{ token: i0.ElementRef }, { token: VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
401
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardComponent, isStandalone: true, selector: "systelab-virtual-keyboard.component", outputs: { closePanel: "closePanel" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:pointerup": "handleMouseUp($event)", "window:mouseup": "handleMouseUp($event)", "window:select": "handleSelect($event)", "window:selectionchange": "handleSelectionChange($event)" } }, ngImport: i0, template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:Lato,HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}\n"] }); }
401
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardComponent, isStandalone: true, selector: "systelab-virtual-keyboard.component", outputs: { closePanel: "closePanel" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:pointerup": "handleMouseUp($event)", "window:mouseup": "handleMouseUp($event)", "window:select": "handleSelect($event)", "window:selectionchange": "handleSelectionChange($event)" } }, ngImport: i0, template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:var(--systelab-virtual-keyboard-font-family)}\n"] }); }
402
402
  }
403
403
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardComponent, decorators: [{
404
404
  type: Component,
405
- args: [{ selector: 'systelab-virtual-keyboard.component', standalone: true, imports: [], template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:Lato,HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}\n"] }]
405
+ args: [{ selector: 'systelab-virtual-keyboard.component', standalone: true, imports: [], template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:var(--systelab-virtual-keyboard-font-family)}\n"] }]
406
406
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: undefined, decorators: [{
407
407
  type: Optional
408
408
  }, {
@@ -430,7 +430,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
430
430
  class SystelabVirtualKeyboardOverlayService {
431
431
  constructor(overlay) {
432
432
  this.overlay = overlay;
433
- this.focusDispatched = false;
433
+ this.clickAlreadyHandled = false;
434
+ this.touchEndAlreadyHandled = false;
434
435
  this.initListener();
435
436
  }
436
437
  isCreated() {
@@ -448,10 +449,11 @@ class SystelabVirtualKeyboardOverlayService {
448
449
  hasBackdrop: false,
449
450
  scrollStrategy: this.overlay.scrollStrategies.reposition(),
450
451
  disposeOnNavigation: true,
452
+ backdropClass: 'systelab-virtual-keyboard__backdrop',
453
+ panelClass: 'systelab-virtual-keyboard__panel',
451
454
  });
452
- this.overlayRef.addPanelClass('virtual-keyboard-overlay-pane');
453
455
  if (fixedBottom) {
454
- this.overlayRef.addPanelClass('virtual-keyboard-fixed-bottom');
456
+ this.overlayRef.addPanelClass('systelab-virtual-keyboard__panel--fixed-bottom');
455
457
  }
456
458
  this.updatePositionStrategy(inputOrigin, fixedBottom);
457
459
  this.updateSize();
@@ -461,8 +463,11 @@ class SystelabVirtualKeyboardOverlayService {
461
463
  updatePosition() {
462
464
  this.updatePositionStrategy(this.inputOrigin, this.fixedBottom);
463
465
  }
464
- setFocusDispatched(dispatched) {
465
- this.focusDispatched = dispatched;
466
+ setClickAlreadyHandled() {
467
+ this.clickAlreadyHandled = true;
468
+ }
469
+ setTouchEndAlreadyHandled() {
470
+ this.touchEndAlreadyHandled = true;
466
471
  }
467
472
  destroy() {
468
473
  if (this.overlayRef) {
@@ -473,25 +478,33 @@ class SystelabVirtualKeyboardOverlayService {
473
478
  }
474
479
  initListener() {
475
480
  document.addEventListener('click', this.handleClick.bind(this));
481
+ document.addEventListener('touchend', this.handleTouchEnd.bind(this));
476
482
  }
477
483
  handleClick(event) {
478
- if (this.focusDispatched) {
479
- this.focusDispatched = false;
484
+ if (this.clickAlreadyHandled) {
485
+ this.clickAlreadyHandled = false;
486
+ return;
487
+ }
488
+ event.stopPropagation();
489
+ this.handleEventTarget(event.target);
490
+ }
491
+ handleTouchEnd(event) {
492
+ if (this.touchEndAlreadyHandled) {
493
+ this.touchEndAlreadyHandled = false;
480
494
  return;
481
495
  }
482
- console.log('Document clicked:', event);
483
496
  event.stopPropagation();
484
- const simpleKeyboardElement = document.querySelector('.simple-keyboard');
485
- const showKeyboardButtonClicked = event.target?.classList.contains('virtual-keyboard-show-button');
486
- const containsKeyboard = simpleKeyboardElement?.contains(event.target);
487
- const containsElementRef = this.inputOrigin?.contains(event.target);
488
- // const containsFocusedElement = this.focusedElement?.contains(event.target as Node);
489
- const containsShowButton = this.showKeyboardButtonElement?.contains(event.target);
490
- if (!containsKeyboard &&
491
- !containsElementRef &&
492
- // !containsFocusedElement &&
497
+ this.handleEventTarget(event.target);
498
+ }
499
+ handleEventTarget(target) {
500
+ const showKeyboardButtonTarget = target?.classList.contains('virtual-keyboard-show-button');
501
+ const virtualKeyboardTarget = document.querySelector('.simple-keyboard')?.contains(target);
502
+ const inputElementTarget = this.inputOrigin?.contains(target);
503
+ const containsShowButton = this.showKeyboardButtonElement?.contains(target);
504
+ if (!virtualKeyboardTarget &&
505
+ !inputElementTarget &&
493
506
  !containsShowButton &&
494
- !showKeyboardButtonClicked) {
507
+ !showKeyboardButtonTarget) {
495
508
  if (this.isCreated()) {
496
509
  this.destroy();
497
510
  }
@@ -501,10 +514,14 @@ class SystelabVirtualKeyboardOverlayService {
501
514
  return this.overlayRef?.hasAttached();
502
515
  }
503
516
  updatePositionStrategy(inputOrigin, fixedBottom) {
504
- this.overlayRef.updatePositionStrategy(this.getPositionStrategy(inputOrigin, fixedBottom));
517
+ if (!!this.overlayRef) {
518
+ this.overlayRef.updatePositionStrategy(this.getPositionStrategy(inputOrigin, fixedBottom));
519
+ }
505
520
  }
506
521
  updateSize() {
507
- this.overlayRef.updateSize(this.getOverlaySize());
522
+ if (!!this.overlayRef) {
523
+ this.overlayRef.updateSize(this.getOverlaySize());
524
+ }
508
525
  }
509
526
  getPositionStrategy(inputOrigin, fixedBottom) {
510
527
  if (fixedBottom) {
@@ -594,21 +611,23 @@ class SystelabVirtualKeyboardDirective {
594
611
  if (!this.vkEnabled) {
595
612
  return;
596
613
  }
597
- if (this.overlayService.isCreated()) {
598
- this.overlayService.updatePosition();
614
+ this.overlayService.updatePosition();
615
+ }
616
+ onClick() {
617
+ if (!this.vkEnabled || !this.config.showOnMouseClick) {
618
+ return;
599
619
  }
620
+ this.closePanel();
621
+ this.overlayService.setClickAlreadyHandled();
622
+ this.openPanel();
600
623
  }
601
- onFocus() {
624
+ onTouchEnd() {
602
625
  if (!this.vkEnabled) {
603
626
  return;
604
627
  }
605
- if (this.overlayService.isCreated()) {
606
- this.closePanel();
607
- }
608
- this.overlayService.setFocusDispatched(true);
609
- if (!this.overlayService.isOpen()) {
610
- this.openPanel();
611
- }
628
+ this.closePanel();
629
+ this.overlayService.setTouchEndAlreadyHandled();
630
+ this.openPanel();
612
631
  }
613
632
  set vkEnabled(enabled) {
614
633
  if (typeof enabled === 'string') {
@@ -672,9 +691,7 @@ class SystelabVirtualKeyboardDirective {
672
691
  const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');
673
692
  keyboardIcon.removeEventListener('click', this.togglePanel.bind(this));
674
693
  }
675
- if (this.overlayService.isCreated()) {
676
- this.overlayService.destroy();
677
- }
694
+ this.overlayService.destroy();
678
695
  }
679
696
  togglePanel() {
680
697
  if (!this.vkEnabled) {
@@ -740,13 +757,13 @@ class SystelabVirtualKeyboardDirective {
740
757
  const child = this.document.createElement('i');
741
758
  child.classList.add('fa');
742
759
  child.classList.add('fa-keyboard');
743
- child.classList.add('virtual-keyboard-show-button');
760
+ child.classList.add('systelab-virtual-keyboard__show-button');
744
761
  this.renderer.appendChild(this.elementRef.nativeElement.parentElement, child);
745
762
  this.showKeyboardButtonElement = child;
746
763
  }
747
764
  }
748
765
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardDirective, deps: [{ token: i0.ElementRef }, { token: SystelabVirtualKeyboardOverlayService }, { token: i0.Renderer2 }, { token: DOCUMENT }, { token: VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
749
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardDirective, selector: "input[vkEnabled], textarea[vkEnabled]", inputs: { vkEnabled: "vkEnabled", vkFixedBottom: "vkFixedBottom", vkDebug: "vkDebug", vkConfig: "vkConfig" }, host: { listeners: { "window:touchmove": "onDocumentScroll($event)", "window:touchend": "onDocumentScroll($event)", "window:wheel": "onDocumentScroll($event)", "document:scroll": "onDocumentScroll($event)", "focus": "onFocus($event)" } }, ngImport: i0 }); }
766
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardDirective, selector: "input[vkEnabled], textarea[vkEnabled]", inputs: { vkEnabled: "vkEnabled", vkFixedBottom: "vkFixedBottom", vkDebug: "vkDebug", vkConfig: "vkConfig" }, host: { listeners: { "window:touchmove": "onDocumentScroll($event)", "window:touchend": "onDocumentScroll($event)", "window:wheel": "onDocumentScroll($event)", "document:scroll": "onDocumentScroll($event)", "click": "onClick($event)", "touchend": "onTouchEnd($event)" } }, ngImport: i0 }); }
750
767
  }
751
768
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardDirective, decorators: [{
752
769
  type: Directive,
@@ -773,9 +790,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
773
790
  }, {
774
791
  type: HostListener,
775
792
  args: ['document:scroll', ['$event']]
776
- }], onFocus: [{
793
+ }], onClick: [{
794
+ type: HostListener,
795
+ args: ['click', ['$event']]
796
+ }], onTouchEnd: [{
777
797
  type: HostListener,
778
- args: ['focus', ['$event']]
798
+ args: ['touchend', ['$event']]
779
799
  }], vkEnabled: [{
780
800
  type: Input
781
801
  }], vkFixedBottom: [{
@@ -1 +1 @@
1
- {"version":3,"file":"systelab-virtual-keyboard.mjs","sources":["../../../projects/systelab-virtual-keyboard/src/lib/constants.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.config.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.html","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard-overlay.service.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.directive.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.module.ts","../../../projects/systelab-virtual-keyboard/src/public-api.ts","../../../projects/systelab-virtual-keyboard/src/systelab-virtual-keyboard.ts"],"sourcesContent":["/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nexport enum SystelabVirtualKeyboardButton {\n Done = '{done}',\n Enter = '{enter}',\n Shift = '{shift}',\n Lock = '{lock}',\n Backspace = '{bksp}',\n Language = '{language}',\n Space = '{space}',\n Tab = '{tab}',\n}\n\nexport enum SystelabVirtualKeyboardLayouts {\n default = 'default',\n shift = 'shift',\n numeric = 'numeric',\n}\n\nexport enum SystelabVirtualKeyboardInputMethods {\n onlyMouseEvents = 'onlyMouseEvents',\n onlyTouchEvents = 'onlyTouchEvents',\n}\n\nexport enum SystelabVirtualKeyboardInputModes {\n text = 'text',\n numeric = 'numeric',\n password = 'password',\n}\n","import { InjectionToken } from '@angular/core';\nimport { SystelabVirtualKeyboardInputMethods, SystelabVirtualKeyboardLayouts } from './constants';\n\nexport const VIRTUAL_KEYBOARD_CONFIG = new InjectionToken<SystelabVirtualKeyboardConfig>('VIRTUAL_KEYBOARD_CONFIG');\n\nexport interface SystelabVirtualKeyboardConfig {\n layout?: SystelabVirtualKeyboardLayouts;\n inputMethod?: SystelabVirtualKeyboardInputMethods;\n showIcon?: boolean;\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Optional,\n Output\n} from '@angular/core';\nimport { SimpleKeyboard } from 'simple-keyboard';\nimport {\n SystelabVirtualKeyboardButton,\n SystelabVirtualKeyboardInputMethods,\n SystelabVirtualKeyboardLayouts\n} from './constants';\nimport { SystelabVirtualKeyboardConfig, VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';\nimport { KeyboardOptions } from 'simple-keyboard/build/interfaces';\n\n@Component({\n selector: 'systelab-virtual-keyboard.component',\n standalone: true,\n imports: [],\n templateUrl: './systelab-virtual-keyboard.component.html',\n styleUrl: 'systelab-virtual-keyboard.component.scss',\n})\nexport class SystelabVirtualKeyboardComponent implements AfterViewInit {\n @HostListener('window:keyup', ['$event'])\n handleKeyUp(event: KeyboardEvent): void {\n if (event.isTrusted) {\n this.caretEventHandler(event);\n }\n }\n\n @HostListener('window:pointerup', ['$event'])\n @HostListener('window:mouseup', ['$event'])\n handleMouseUp(event: PointerEvent): void {\n this.caretEventHandler(event);\n }\n\n @HostListener('window:select', ['$event'])\n handleSelect(event: Event): void {\n this.caretEventHandler(event);\n }\n\n @HostListener('window:selectionchange', ['$event'])\n handleSelectionChange(event: Event): void {\n this.caretEventHandler(event);\n }\n\n get maxLength(): number {\n return this.activeInputElement?.maxLength ?? -1;\n }\n\n get isTextarea(): boolean {\n return this.activeInputElement?.type === 'textarea';\n }\n\n public debug = false;\n private selectedLayout: SystelabVirtualKeyboardLayouts = SystelabVirtualKeyboardLayouts.default;\n private keyboard: SimpleKeyboard;\n private caretPosition: number | null = null;\n private caretPositionEnd: number | null = null;\n private activeInputElement!: HTMLInputElement | HTMLTextAreaElement | null;\n private shiftPressed: boolean = false;\n\n @Output() closePanel = new EventEmitter<void>();\n\n constructor(private elementRef: ElementRef<HTMLInputElement>, @Optional() @Inject(VIRTUAL_KEYBOARD_CONFIG) private virtualKeyboardConfig: SystelabVirtualKeyboardConfig,) {\n }\n\n ngAfterViewInit() {\n const layout = {\n [SystelabVirtualKeyboardLayouts.default]: [\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\n '{tab} q w e r t y u i o p [ ] \\\\',\n \"{lock} a s d f g h j k l ; ' {enter}\",\n '{shift} z x c v b n m , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.shift]: [\n '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',\n '{tab} Q W E R T Y U I O P { } |',\n '{lock} A S D F G H J K L : \" {enter}',\n '{shift} Z X C V B N M &lt; &gt; ? {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.numeric]: ['7 8 9', '4 5 6', '1 2 3', '0 {bksp}'],\n };\n\n const keyboardOptions: KeyboardOptions = this.prepareKeyboardConfig();\n this.keyboard = new SimpleKeyboard('.simple-keyboard', keyboardOptions);\n this.setLayout(this.selectedLayout);\n if (this.debug) {\n console.log('Layout: ', layout);\n }\n }\n\n public setActiveInput(input: HTMLInputElement | HTMLTextAreaElement): void {\n this.activeInputElement = input;\n\n if (this.debug) {\n const inputType = this.activeInputElement?.type;\n console.log('Layout:', `${inputType}_${this.selectedLayout}`);\n }\n\n const { selectionStart, selectionEnd } = this.activeInputElement;\n this.setCaretPosition(selectionStart, selectionEnd);\n\n if (this.debug) {\n console.log('Caret start at:', this.caretPosition, this.caretPositionEnd);\n }\n this.focusActiveInput();\n }\n\n public setLayout(layout: SystelabVirtualKeyboardLayouts): void {\n this.selectedLayout = layout;\n if (this.keyboard) {\n this.keyboard.setOptions({\n layoutName: layout,\n });\n }\n }\n\n private prepareKeyboardConfig(): KeyboardOptions {\n const layout = {\n [SystelabVirtualKeyboardLayouts.default]: [\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\n '{tab} q w e r t y u i o p [ ] \\\\',\n \"{lock} a s d f g h j k l ; ' {enter}\",\n '{shift} z x c v b n m , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.shift]: [\n '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',\n '{tab} Q W E R T Y U I O P { } |',\n '{lock} A S D F G H J K L : \" {enter}',\n '{shift} Z X C V B N M &lt; &gt; ? {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.numeric]: ['7 8 9', '4 5 6', '1 2 3', '0 {bksp}'],\n };\n\n let keyboardOptions: KeyboardOptions = {\n onKeyPress: (button) => this.handleKeyPress(button),\n mergeDisplay: true,\n theme: 'hg-theme-default hg-layout-default myTheme',\n display: {\n [SystelabVirtualKeyboardButton.Backspace]: 'delete',\n },\n buttonTheme: [\n {\n class: 'virtual-keyboard-delete-button',\n buttons: `${SystelabVirtualKeyboardButton.Backspace}`,\n },\n ],\n layout,\n };\n\n if (this.virtualKeyboardConfig?.hasOwnProperty('inputMethod')) {\n if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboardInputMethods.onlyMouseEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useMouseEvents: true,\n }\n } else if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboardInputMethods.onlyTouchEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useTouchEvents: true,\n }\n }\n }\n\n return keyboardOptions;\n }\n\n private handleKeyPress(button: string, e?: Event): void {\n if (this.debug) {\n console.log('Key press:', button);\n }\n\n if (button[0] === '&' && button.length > 1) {\n button = new DOMParser().parseFromString(button, 'text/html').body.textContent;\n }\n\n if (button === SystelabVirtualKeyboardButton.Shift || button === SystelabVirtualKeyboardButton.Lock) {\n this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;\n this.toggleShiftLayout();\n } else if (button === SystelabVirtualKeyboardButton.Done) {\n this.closePanel.emit();\n return;\n }\n\n if (!this.isAcceptedNonStandardButton(button) && !this.isStandardButton(button)) {\n return;\n }\n\n const output = this.handleButtonOutput(button);\n\n if (this.activeInputElement) {\n this.activeInputElement.value = output;\n\n if (this.debug) {\n console.log('Caret at:', this.caretPosition, this.caretPositionEnd, 'Button', e);\n }\n }\n\n this.dispatchEvents(button);\n\n if (this.shiftPressed) {\n this.toggleShiftLayout();\n }\n this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;\n }\n\n private handleButtonOutput(button: string): string {\n const commonParams: [number, number, boolean] = this.getCommonParams();\n let output = this.activeInputElement?.value || '';\n if (!this.isStandardButton(button)) {\n if (button === SystelabVirtualKeyboardButton.Backspace) {\n output = this.removeAt(output, ...commonParams);\n } else if (button === SystelabVirtualKeyboardButton.Space) {\n output = this.addStringAt(output, ' ', ...commonParams);\n } else if (button === SystelabVirtualKeyboardButton.Tab) {\n // Do nothing for tab\n } else if (button === SystelabVirtualKeyboardButton.Enter) {\n if (this.isTextarea) {\n output = this.addStringAt(output, '\\n', ...commonParams);\n }\n } else {\n return;\n }\n } else {\n output = this.addStringAt(output, button, ...commonParams);\n }\n\n return output;\n }\n\n private getCommonParams(): [number, number, boolean] {\n return [this.caretPosition || 0, this.caretPositionEnd || 0, true];\n }\n\n private isAcceptedNonStandardButton(button: string): boolean {\n return [\n SystelabVirtualKeyboardButton.Backspace.toString(),\n SystelabVirtualKeyboardButton.Space.toString(),\n SystelabVirtualKeyboardButton.Tab.toString(),\n SystelabVirtualKeyboardButton.Enter.toString(),\n ].includes(button);\n }\n\n private dispatchEvents(button: string) {\n const {key, code} = this.convertFromButtonToCode(button);\n\n const eventInit: KeyboardEventInit = {\n bubbles: true,\n cancelable: true,\n shiftKey: this.selectedLayout === SystelabVirtualKeyboardLayouts.shift,\n key: key,\n code: code,\n location: 0,\n };\n // Simulate all needed events on base element\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keydown', eventInit));\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keypress', eventInit));\n this.activeInputElement?.dispatchEvent(new Event('input', {bubbles: true}));\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keyup', eventInit));\n }\n\n /*\n * AUXILIARY METHODS\n * */\n private convertFromButtonToCode(button: string): { key: string; code: string } {\n let key: string;\n let code: string;\n if (button.includes('{') && button.includes('}')) {\n // Capitalize name\n key = button.slice(1, button.length - 1).toLowerCase();\n key = key.charAt(0).toUpperCase() + key.slice(1);\n code = key;\n\n // Fix to standard key code\n if (code.toLowerCase() === SystelabVirtualKeyboardButton.Backspace.slice(1, SystelabVirtualKeyboardButton.Backspace.length - 1).toLowerCase()) {\n code = 'Backspace';\n }\n } else {\n key = button;\n code = Number.isInteger(Number(button)) ? `Digit${button}` : `Key${button.toUpperCase()}`;\n }\n\n return {key, code};\n }\n\n private toggleShiftLayout(): void {\n const currentLayout = this.keyboard.options.layoutName;\n const selectedLayout: SystelabVirtualKeyboardLayouts =\n currentLayout === SystelabVirtualKeyboardLayouts.default ? SystelabVirtualKeyboardLayouts.shift : SystelabVirtualKeyboardLayouts.default;\n\n this.setLayout(selectedLayout);\n }\n\n private isStandardButton(button: string) {\n return button && !(button[0] === '{' && button[button.length - 1] === '}');\n }\n\n /*\n * OUTPUT STRING METHODS\n * */\n private removeAt(source: string, position = source.length, positionEnd = source.length, moveCaret = false): string {\n if (position === 0 && positionEnd === 0) {\n return source;\n }\n\n let output: string;\n\n if (position === positionEnd) {\n if (position && position >= 0) {\n output = source.slice(0, position - 1) + source.slice(position);\n if (moveCaret) {\n this.updateCaretPosition(1, true);\n }\n } else {\n output = source.slice(0, -1);\n if (moveCaret) {\n this.updateCaretPosition(1, true);\n }\n }\n } else {\n output = source.slice(0, position) + source.slice(positionEnd);\n if (moveCaret) {\n this.setCaretPosition(position);\n }\n }\n\n return output;\n }\n\n private addStringAt(source: string, str: string, position = source.length, positionEnd = source.length, moveCaret = false): string {\n if (this.maxLength !== -1 && source.length >= this.maxLength) {\n return source;\n }\n\n let output: string;\n\n if (!position && position !== 0) {\n output = source + str;\n } else {\n output = [source.slice(0, position), str, source.slice(positionEnd)].join('');\n if (moveCaret) {\n this.updateCaretPosition(str.length, false);\n }\n }\n\n return output;\n }\n\n /*\n * CARET METHODS\n * */\n private caretEventHandler(event: any) {\n let targetTagName = '';\n if (event.target.tagName) {\n targetTagName = event.target.tagName.toLowerCase();\n }\n\n const isTextInput =\n targetTagName === 'textarea' ||\n (targetTagName === 'input' && ['text', 'search', 'email', 'password', 'url', 'tel'].includes(event.target.type));\n\n const isKeyboard =\n event.target === this.elementRef.nativeElement || (event.target && this.elementRef.nativeElement.contains(event.target));\n\n if (isTextInput && this.activeInputElement == event.target) {\n /**\n * Tracks current cursor position\n * As keys are pressed, text will be added/removed at that position within the input.\n */\n this.setCaretPosition(event.target.selectionStart, event.target.selectionEnd);\n\n if (this.debug) {\n console.log('Caret at:', this.caretPosition, this.caretPositionEnd, event && event.target.tagName.toLowerCase(), event);\n }\n } else if (event.type === 'pointerup' && this.activeInputElement === document.activeElement) {\n return;\n } else if (!isKeyboard && event?.type !== 'selectionchange') {\n /**\n * we must ensure caretPosition doesn't persist once reactivated.\n */\n this.setCaretPosition(null);\n\n if (this.debug) {\n console.log(`Caret position reset due to \"${event?.type}\" event`, event);\n }\n }\n }\n\n private focusActiveInput(): void {\n this.activeInputElement?.focus();\n this.activeInputElement?.setSelectionRange(\n this.caretPosition,\n this.caretPositionEnd\n );\n }\n\n private updateCaretPosition(length: number, minus = false) {\n const newCaretPos = this.computeNewCaretPosition(length, minus);\n this.setCaretPosition(newCaretPos);\n // Scroll to bottom\n setTimeout(() => {\n this.activeInputElement?.scrollTo({\n top: this.activeInputElement.scrollHeight,\n } as ScrollToOptions);\n });\n }\n\n private computeNewCaretPosition(length: number, minus = false) {\n let caretPosition = this.caretPosition;\n\n if (caretPosition != null) {\n if (minus) {\n if (caretPosition > 0) caretPosition = caretPosition - length;\n } else {\n caretPosition = caretPosition + length;\n }\n }\n return caretPosition;\n }\n\n private setCaretPosition(position: number | null, endPosition = position): void {\n this.caretPosition = position;\n this.caretPositionEnd = endPosition;\n }\n}\n","<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n","/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nimport { Overlay, OverlayRef, OverlaySizeConfig, PositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentRef, Injectable } from '@angular/core';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { SystelabVirtualKeyboardLayouts } from './constants';\nimport { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\n\ninterface PositionStrategyOrigin {\n x: number;\n y: number;\n width?: number;\n height?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SystelabVirtualKeyboardOverlayService {\n private overlayRef!: OverlayRef;\n private inputOrigin: HTMLInputElement;\n private fixedBottom: boolean;\n private showKeyboardButtonElement: HTMLElement;\n private open: boolean;\n private layout: SystelabVirtualKeyboardLayouts;\n private focusDispatched: boolean = false;\n\n constructor(private readonly overlay: Overlay) {\n this.initListener();\n }\n\n public isCreated(): boolean {\n return !!this.overlayRef;\n }\n\n public isOpen(): boolean {\n return this.open;\n }\n\n public create(\n inputOrigin: HTMLInputElement,\n showKeyboardButtonElement: HTMLElement,\n fixedBottom: boolean,\n layout: SystelabVirtualKeyboardLayouts = SystelabVirtualKeyboardLayouts.default,\n ): ComponentRef<SystelabVirtualKeyboardComponent> {\n this.inputOrigin = inputOrigin;\n this.fixedBottom = fixedBottom;\n this.showKeyboardButtonElement = showKeyboardButtonElement;\n this.layout = layout;\n this.overlayRef = this.overlay.create({\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n disposeOnNavigation: true,\n });\n this.overlayRef.addPanelClass('virtual-keyboard-overlay-pane');\n if (fixedBottom) {\n this.overlayRef.addPanelClass('virtual-keyboard-fixed-bottom');\n }\n\n this.updatePositionStrategy(inputOrigin, fixedBottom);\n this.updateSize();\n\n this.open = true;\n return this.overlayRef.attach(new ComponentPortal(SystelabVirtualKeyboardComponent));\n }\n\n public updatePosition(): void {\n this.updatePositionStrategy(this.inputOrigin, this.fixedBottom);\n }\n\n public setFocusDispatched(dispatched: boolean): void {\n this.focusDispatched = dispatched;\n }\n\n public destroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n this.overlayRef = null;\n this.open = false;\n }\n\n private initListener() {\n document.addEventListener('click', this.handleClick.bind(this));\n }\n\n private handleClick(event: MouseEvent) {\n if (this.focusDispatched) {\n this.focusDispatched = false;\n return;\n }\n console.log('Document clicked:', event);\n event.stopPropagation();\n const simpleKeyboardElement = document.querySelector('.simple-keyboard');\n const showKeyboardButtonClicked = (event.target as HTMLElement)?.classList.contains('virtual-keyboard-show-button');\n\n const containsKeyboard = simpleKeyboardElement?.contains(event.target as Node);\n const containsElementRef = this.inputOrigin?.contains(event.target as Node);\n // const containsFocusedElement = this.focusedElement?.contains(event.target as Node);\n const containsShowButton = this.showKeyboardButtonElement?.contains(event.target as Node);\n if (\n !containsKeyboard &&\n !containsElementRef &&\n // !containsFocusedElement &&\n !containsShowButton &&\n !showKeyboardButtonClicked\n ) {\n if (this.isCreated()) {\n this.destroy();\n }\n }\n }\n\n public hasAttached(): boolean {\n return this.overlayRef?.hasAttached();\n }\n\n private updatePositionStrategy(inputOrigin: HTMLInputElement, fixedBottom: boolean): void {\n this.overlayRef.updatePositionStrategy(this.getPositionStrategy(inputOrigin, fixedBottom));\n }\n\n private updateSize(): void {\n this.overlayRef.updateSize(this.getOverlaySize());\n }\n\n private getPositionStrategy(inputOrigin: HTMLInputElement, fixedBottom: boolean): PositionStrategy {\n if (fixedBottom) {\n return this.overlay.position().global().centerHorizontally().bottom('0');\n }\n\n const pointWithDimensions: PositionStrategyOrigin = this.computePositionStrategyOrigin(inputOrigin);\n\n return this.overlay\n .position()\n .flexibleConnectedTo(pointWithDimensions)\n .withFlexibleDimensions(false)\n .withLockedPosition(true)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n ]);\n }\n\n private getOverlaySize(): OverlaySizeConfig {\n const overlayWidth = this.layout === SystelabVirtualKeyboardLayouts.numeric ? '400px' : '1200px';\n\n return {\n width: overlayWidth,\n maxWidth: overlayWidth,\n minWidth: overlayWidth,\n };\n }\n\n private computePositionStrategyOrigin(inputOrigin: HTMLInputElement): PositionStrategyOrigin {\n const overlayOffsetX = this.computeOverlayOffsetX(inputOrigin);\n const { width: overlayWidthString } = this.getOverlaySize();\n const overlayWidth = Number((overlayWidthString as string).replace('px', ''));\n const {x, y, width, height} = inputOrigin.getBoundingClientRect();\n return {\n width,\n height,\n x: width < overlayWidth ? x - overlayOffsetX : x + overlayOffsetX,\n y,\n };\n }\n\n private computeOverlayOffsetX(inputOrigin: HTMLInputElement): number {\n const { width: overlayWidthString } = this.getOverlaySize();\n const overlayWidth = Number((overlayWidthString as string).replace('px', ''));\n const inputWidth = inputOrigin.getBoundingClientRect().width;\n\n const extraWidth = overlayWidth - inputWidth;\n\n return Math.abs(extraWidth) / 2;\n }\n}\n","/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nimport {\n AfterViewInit,\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n} from '@angular/core';\n\nimport { DOCUMENT } from '@angular/common';\n\nimport { SystelabVirtualKeyboardInputModes, SystelabVirtualKeyboardLayouts } from './constants';\nimport { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\nimport { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\nimport { SystelabVirtualKeyboardConfig, VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';\n\n@Directive({\n selector: 'input[vkEnabled], textarea[vkEnabled]',\n})\nexport class SystelabVirtualKeyboardDirective implements OnInit, AfterViewInit, OnDestroy {\n @HostListener('window:touchmove', ['$event'])\n @HostListener('window:touchend', ['$event'])\n @HostListener('window:wheel', ['$event'])\n @HostListener('document:scroll', ['$event'])\n onDocumentScroll() {\n if (!this.vkEnabled) {\n return;\n }\n if (this.overlayService.isCreated()) {\n this.overlayService.updatePosition();\n }\n }\n\n @HostListener('focus', ['$event'])\n onFocus(): void {\n if (!this.vkEnabled) {\n return;\n }\n if (this.overlayService.isCreated()) {\n this.closePanel();\n }\n this.overlayService.setFocusDispatched(true);\n if (!this.overlayService.isOpen()) {\n this.openPanel();\n }\n }\n\n private enabled = false;\n\n @Input()\n set vkEnabled(enabled: boolean | string) {\n if (typeof enabled === 'string') {\n this.enabled = true;\n } else {\n this.enabled = enabled;\n }\n };\n\n get vkEnabled(): boolean {\n return this.enabled;\n }\n\n private fixedBottom = false;\n\n @Input()\n get vkFixedBottom(): boolean {\n return this.fixedBottom;\n }\n\n set vkFixedBottom(fixedBottom: boolean | string) {\n if (typeof fixedBottom === 'string') {\n this.fixedBottom = true;\n } else {\n this.fixedBottom = fixedBottom;\n }\n }\n\n private debug = false;\n\n @Input()\n get vkDebug(): boolean {\n return this.debug;\n }\n\n set vkDebug(debug: boolean) {\n this.debug = debug;\n }\n\n private config: SystelabVirtualKeyboardConfig;\n\n @Input()\n get vkConfig(): SystelabVirtualKeyboardConfig {\n return this.config;\n }\n\n set vkConfig(config: SystelabVirtualKeyboardConfig) {\n this.config = config;\n }\n\n private panelRef!: ComponentRef<SystelabVirtualKeyboardComponent>;\n private showKeyboardButtonElement: HTMLElement;\n\n constructor(\n private readonly elementRef: ElementRef<HTMLInputElement>,\n private readonly overlayService: SystelabVirtualKeyboardOverlayService,\n private readonly renderer: Renderer2,\n @Inject(DOCUMENT) private readonly document: any,\n @Optional() @Inject(VIRTUAL_KEYBOARD_CONFIG) private virtualKeyboardConfig: SystelabVirtualKeyboardConfig,\n ) {\n this.config = this.virtualKeyboardConfig;\n }\n\n ngOnInit() {\n if (this.config?.showIcon) {\n this.attachKeyboardIcon();\n }\n }\n\n ngAfterViewInit() {\n if (this.vkEnabled && this.config?.showIcon) {\n const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');\n keyboardIcon.addEventListener('click', this.togglePanel.bind(this));\n }\n }\n\n ngOnDestroy(): void {\n if (this.vkEnabled && this.config?.showIcon) {\n const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');\n keyboardIcon.removeEventListener('click', this.togglePanel.bind(this));\n }\n if (this.overlayService.isCreated()) {\n this.overlayService.destroy();\n }\n }\n\n private togglePanel(): void {\n if (!this.vkEnabled) {\n return;\n }\n if (this.overlayService.isOpen()) {\n this.closePanel();\n } else {\n this.openPanel();\n }\n }\n\n private openPanel(): void {\n if (!this.vkEnabled) {\n return;\n }\n if (this.overlayService.isCreated()) {\n this.overlayService.destroy();\n }\n if (this.overlayService.hasAttached()) {\n return;\n }\n\n const currentLayout = this.getLayout(this.elementRef.nativeElement);\n\n this.panelRef = this.overlayService.create(this.inputOrigin(), this.showKeyboardButtonElement, this.vkFixedBottom, currentLayout);\n this.panelRef.instance.debug = this.vkDebug;\n this.panelRef.instance.setActiveInput(this.elementRef.nativeElement);\n this.panelRef.instance.setLayout(currentLayout);\n this.panelRef.instance.closePanel.subscribe(() => this.closePanel());\n }\n\n private getLayout(activeInputElement: HTMLInputElement | HTMLTextAreaElement): SystelabVirtualKeyboardLayouts {\n if (this.config?.hasOwnProperty('layout')) {\n return this.config.layout;\n }\n if (this.isInputAlphabetic(activeInputElement)) {\n return SystelabVirtualKeyboardLayouts.default;\n } else if (this.isInputNumeric(activeInputElement)) {\n return SystelabVirtualKeyboardLayouts.numeric;\n } else {\n return SystelabVirtualKeyboardLayouts.default;\n }\n }\n\n private isInputAlphabetic(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardInputModes.text, SystelabVirtualKeyboardInputModes.password].some((i) => i === inputMode);\n }\n\n private isInputNumeric(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardInputModes.numeric].some((i) => i === inputMode);\n }\n\n private getInputMode(activeInputElement: HTMLInputElement | HTMLTextAreaElement): string {\n return activeInputElement?.inputMode ?? activeInputElement?.type;\n }\n\n private closePanel(): void {\n this.overlayService.destroy();\n }\n\n private inputOrigin(): HTMLInputElement {\n return this.elementRef.nativeElement;\n }\n\n private attachKeyboardIcon() {\n if (this.vkEnabled) {\n const child = this.document.createElement('i');\n child.classList.add('fa');\n child.classList.add('fa-keyboard');\n child.classList.add('virtual-keyboard-show-button');\n this.renderer.appendChild(this.elementRef.nativeElement.parentElement, child);\n this.showKeyboardButtonElement = child;\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SystelabVirtualKeyboardDirective } from './systelab-virtual-keyboard.directive';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { SystelabVirtualKeyboardConfig, VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';\nimport { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\n\nexport const factory = () => {\n const systelabVirtualKeyboardModuleCreated = (factory as any)._systelabVirtualKeyboardModuleCreated || false;\n if (systelabVirtualKeyboardModuleCreated) {\n throw new Error('SystelabVirtualKeyboardModuleCreated.forRoot imported to many times');\n }\n (factory as any)._systelabVirtualKeyboardModuleCreated = true;\n};\n\n@NgModule({\n imports: [CommonModule, OverlayModule],\n declarations: [SystelabVirtualKeyboardDirective],\n exports: [SystelabVirtualKeyboardDirective],\n})\nexport class SystelabVirtualKeyboardModule {\n public static forRoot(conf?: SystelabVirtualKeyboardConfig): ModuleWithProviders<SystelabVirtualKeyboardModule> {\n return {\n ngModule: SystelabVirtualKeyboardModule,\n providers: [\n SystelabVirtualKeyboardOverlayService,\n {\n provide: VIRTUAL_KEYBOARD_CONFIG, useValue: conf\n }\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders<SystelabVirtualKeyboardModule> {\n return {\n ngModule: SystelabVirtualKeyboardModule,\n providers: [],\n };\n }\n}\n","/*\n * Public API Surface of systelab-virtual-keyboard\n */\n\nexport * from './lib/constants';\nexport { SystelabVirtualKeyboardConfig } from './lib/systelab-virtual-keyboard.config';\nexport * from './lib/systelab-virtual-keyboard.directive';\nexport * from './lib/systelab-virtual-keyboard.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SystelabVirtualKeyboardOverlayService"],"mappings":"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"}
1
+ {"version":3,"file":"systelab-virtual-keyboard.mjs","sources":["../../../projects/systelab-virtual-keyboard/src/lib/constants.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.config.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.html","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard-overlay.service.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.directive.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.module.ts","../../../projects/systelab-virtual-keyboard/src/public-api.ts","../../../projects/systelab-virtual-keyboard/src/systelab-virtual-keyboard.ts"],"sourcesContent":["/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nexport enum SystelabVirtualKeyboardButton {\n Done = '{done}',\n Enter = '{enter}',\n Shift = '{shift}',\n Lock = '{lock}',\n Backspace = '{bksp}',\n Language = '{language}',\n Space = '{space}',\n Tab = '{tab}',\n}\n\nexport enum SystelabVirtualKeyboardLayouts {\n default = 'default',\n shift = 'shift',\n numeric = 'numeric',\n}\n\nexport enum SystelabVirtualKeyboardInputMethods {\n onlyMouseEvents = 'onlyMouseEvents',\n onlyTouchEvents = 'onlyTouchEvents',\n}\n\nexport enum SystelabVirtualKeyboardInputModes {\n text = 'text',\n numeric = 'numeric',\n password = 'password',\n}\n","import { InjectionToken } from '@angular/core';\nimport { SystelabVirtualKeyboardInputMethods, SystelabVirtualKeyboardLayouts } from './constants';\n\nexport const VIRTUAL_KEYBOARD_CONFIG = new InjectionToken<SystelabVirtualKeyboardConfig>('VIRTUAL_KEYBOARD_CONFIG');\n\nexport interface SystelabVirtualKeyboardConfig {\n layout?: SystelabVirtualKeyboardLayouts;\n inputMethod?: SystelabVirtualKeyboardInputMethods;\n showIcon?: boolean;\n showOnMouseClick?: boolean;\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Optional,\n Output\n} from '@angular/core';\nimport { SimpleKeyboard } from 'simple-keyboard';\nimport {\n SystelabVirtualKeyboardButton,\n SystelabVirtualKeyboardInputMethods,\n SystelabVirtualKeyboardLayouts\n} from './constants';\nimport { SystelabVirtualKeyboardConfig, VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';\nimport { KeyboardOptions } from 'simple-keyboard/build/interfaces';\n\n@Component({\n selector: 'systelab-virtual-keyboard.component',\n standalone: true,\n imports: [],\n templateUrl: './systelab-virtual-keyboard.component.html',\n styleUrl: 'systelab-virtual-keyboard.component.scss',\n})\nexport class SystelabVirtualKeyboardComponent implements AfterViewInit {\n @HostListener('window:keyup', ['$event'])\n handleKeyUp(event: KeyboardEvent): void {\n if (event.isTrusted) {\n this.caretEventHandler(event);\n }\n }\n\n @HostListener('window:pointerup', ['$event'])\n @HostListener('window:mouseup', ['$event'])\n handleMouseUp(event: PointerEvent): void {\n this.caretEventHandler(event);\n }\n\n @HostListener('window:select', ['$event'])\n handleSelect(event: Event): void {\n this.caretEventHandler(event);\n }\n\n @HostListener('window:selectionchange', ['$event'])\n handleSelectionChange(event: Event): void {\n this.caretEventHandler(event);\n }\n\n get maxLength(): number {\n return this.activeInputElement?.maxLength ?? -1;\n }\n\n get isTextarea(): boolean {\n return this.activeInputElement?.type === 'textarea';\n }\n\n public debug = false;\n private selectedLayout: SystelabVirtualKeyboardLayouts = SystelabVirtualKeyboardLayouts.default;\n private keyboard: SimpleKeyboard;\n private caretPosition: number | null = null;\n private caretPositionEnd: number | null = null;\n private activeInputElement!: HTMLInputElement | HTMLTextAreaElement | null;\n private shiftPressed: boolean = false;\n\n @Output() closePanel = new EventEmitter<void>();\n\n constructor(private elementRef: ElementRef<HTMLInputElement>, @Optional() @Inject(VIRTUAL_KEYBOARD_CONFIG) private virtualKeyboardConfig: SystelabVirtualKeyboardConfig,) {\n }\n\n ngAfterViewInit() {\n const layout = {\n [SystelabVirtualKeyboardLayouts.default]: [\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\n '{tab} q w e r t y u i o p [ ] \\\\',\n \"{lock} a s d f g h j k l ; ' {enter}\",\n '{shift} z x c v b n m , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.shift]: [\n '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',\n '{tab} Q W E R T Y U I O P { } |',\n '{lock} A S D F G H J K L : \" {enter}',\n '{shift} Z X C V B N M &lt; &gt; ? {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.numeric]: ['7 8 9', '4 5 6', '1 2 3', '0 {bksp}'],\n };\n\n const keyboardOptions: KeyboardOptions = this.prepareKeyboardConfig();\n this.keyboard = new SimpleKeyboard('.simple-keyboard', keyboardOptions);\n this.setLayout(this.selectedLayout);\n if (this.debug) {\n console.log('Layout: ', layout);\n }\n }\n\n public setActiveInput(input: HTMLInputElement | HTMLTextAreaElement): void {\n this.activeInputElement = input;\n\n if (this.debug) {\n const inputType = this.activeInputElement?.type;\n console.log('Layout:', `${inputType}_${this.selectedLayout}`);\n }\n\n const { selectionStart, selectionEnd } = this.activeInputElement;\n this.setCaretPosition(selectionStart, selectionEnd);\n\n if (this.debug) {\n console.log('Caret start at:', this.caretPosition, this.caretPositionEnd);\n }\n this.focusActiveInput();\n }\n\n public setLayout(layout: SystelabVirtualKeyboardLayouts): void {\n this.selectedLayout = layout;\n if (this.keyboard) {\n this.keyboard.setOptions({\n layoutName: layout,\n });\n }\n }\n\n private prepareKeyboardConfig(): KeyboardOptions {\n const layout = {\n [SystelabVirtualKeyboardLayouts.default]: [\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\n '{tab} q w e r t y u i o p [ ] \\\\',\n \"{lock} a s d f g h j k l ; ' {enter}\",\n '{shift} z x c v b n m , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.shift]: [\n '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',\n '{tab} Q W E R T Y U I O P { } |',\n '{lock} A S D F G H J K L : \" {enter}',\n '{shift} Z X C V B N M &lt; &gt; ? {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.numeric]: ['7 8 9', '4 5 6', '1 2 3', '0 {bksp}'],\n };\n\n let keyboardOptions: KeyboardOptions = {\n onKeyPress: (button) => this.handleKeyPress(button),\n mergeDisplay: true,\n theme: 'hg-theme-default hg-layout-default myTheme',\n display: {\n [SystelabVirtualKeyboardButton.Backspace]: 'delete',\n },\n buttonTheme: [\n {\n class: 'virtual-keyboard-delete-button',\n buttons: `${SystelabVirtualKeyboardButton.Backspace}`,\n },\n ],\n layout,\n };\n\n if (this.virtualKeyboardConfig?.hasOwnProperty('inputMethod')) {\n if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboardInputMethods.onlyMouseEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useMouseEvents: true,\n }\n } else if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboardInputMethods.onlyTouchEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useTouchEvents: true,\n }\n }\n }\n\n return keyboardOptions;\n }\n\n private handleKeyPress(button: string, e?: Event): void {\n if (this.debug) {\n console.log('Key press:', button);\n }\n\n if (button[0] === '&' && button.length > 1) {\n button = new DOMParser().parseFromString(button, 'text/html').body.textContent;\n }\n\n if (button === SystelabVirtualKeyboardButton.Shift || button === SystelabVirtualKeyboardButton.Lock) {\n this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;\n this.toggleShiftLayout();\n } else if (button === SystelabVirtualKeyboardButton.Done) {\n this.closePanel.emit();\n return;\n }\n\n if (!this.isAcceptedNonStandardButton(button) && !this.isStandardButton(button)) {\n return;\n }\n\n const output = this.handleButtonOutput(button);\n\n if (this.activeInputElement) {\n this.activeInputElement.value = output;\n\n if (this.debug) {\n console.log('Caret at:', this.caretPosition, this.caretPositionEnd, 'Button', e);\n }\n }\n\n this.dispatchEvents(button);\n\n if (this.shiftPressed) {\n this.toggleShiftLayout();\n }\n this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;\n }\n\n private handleButtonOutput(button: string): string {\n const commonParams: [number, number, boolean] = this.getCommonParams();\n let output = this.activeInputElement?.value || '';\n if (!this.isStandardButton(button)) {\n if (button === SystelabVirtualKeyboardButton.Backspace) {\n output = this.removeAt(output, ...commonParams);\n } else if (button === SystelabVirtualKeyboardButton.Space) {\n output = this.addStringAt(output, ' ', ...commonParams);\n } else if (button === SystelabVirtualKeyboardButton.Tab) {\n // Do nothing for tab\n } else if (button === SystelabVirtualKeyboardButton.Enter) {\n if (this.isTextarea) {\n output = this.addStringAt(output, '\\n', ...commonParams);\n }\n } else {\n return;\n }\n } else {\n output = this.addStringAt(output, button, ...commonParams);\n }\n\n return output;\n }\n\n private getCommonParams(): [number, number, boolean] {\n return [this.caretPosition || 0, this.caretPositionEnd || 0, true];\n }\n\n private isAcceptedNonStandardButton(button: string): boolean {\n return [\n SystelabVirtualKeyboardButton.Backspace.toString(),\n SystelabVirtualKeyboardButton.Space.toString(),\n SystelabVirtualKeyboardButton.Tab.toString(),\n SystelabVirtualKeyboardButton.Enter.toString(),\n ].includes(button);\n }\n\n private dispatchEvents(button: string) {\n const {key, code} = this.convertFromButtonToCode(button);\n\n const eventInit: KeyboardEventInit = {\n bubbles: true,\n cancelable: true,\n shiftKey: this.selectedLayout === SystelabVirtualKeyboardLayouts.shift,\n key: key,\n code: code,\n location: 0,\n };\n // Simulate all needed events on base element\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keydown', eventInit));\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keypress', eventInit));\n this.activeInputElement?.dispatchEvent(new Event('input', {bubbles: true}));\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keyup', eventInit));\n }\n\n /*\n * AUXILIARY METHODS\n * */\n private convertFromButtonToCode(button: string): { key: string; code: string } {\n let key: string;\n let code: string;\n if (button.includes('{') && button.includes('}')) {\n // Capitalize name\n key = button.slice(1, button.length - 1).toLowerCase();\n key = key.charAt(0).toUpperCase() + key.slice(1);\n code = key;\n\n // Fix to standard key code\n if (code.toLowerCase() === SystelabVirtualKeyboardButton.Backspace.slice(1, SystelabVirtualKeyboardButton.Backspace.length - 1).toLowerCase()) {\n code = 'Backspace';\n }\n } else {\n key = button;\n code = Number.isInteger(Number(button)) ? `Digit${button}` : `Key${button.toUpperCase()}`;\n }\n\n return {key, code};\n }\n\n private toggleShiftLayout(): void {\n const currentLayout = this.keyboard.options.layoutName;\n const selectedLayout: SystelabVirtualKeyboardLayouts =\n currentLayout === SystelabVirtualKeyboardLayouts.default ? SystelabVirtualKeyboardLayouts.shift : SystelabVirtualKeyboardLayouts.default;\n\n this.setLayout(selectedLayout);\n }\n\n private isStandardButton(button: string) {\n return button && !(button[0] === '{' && button[button.length - 1] === '}');\n }\n\n /*\n * OUTPUT STRING METHODS\n * */\n private removeAt(source: string, position = source.length, positionEnd = source.length, moveCaret = false): string {\n if (position === 0 && positionEnd === 0) {\n return source;\n }\n\n let output: string;\n\n if (position === positionEnd) {\n if (position && position >= 0) {\n output = source.slice(0, position - 1) + source.slice(position);\n if (moveCaret) {\n this.updateCaretPosition(1, true);\n }\n } else {\n output = source.slice(0, -1);\n if (moveCaret) {\n this.updateCaretPosition(1, true);\n }\n }\n } else {\n output = source.slice(0, position) + source.slice(positionEnd);\n if (moveCaret) {\n this.setCaretPosition(position);\n }\n }\n\n return output;\n }\n\n private addStringAt(source: string, str: string, position = source.length, positionEnd = source.length, moveCaret = false): string {\n if (this.maxLength !== -1 && source.length >= this.maxLength) {\n return source;\n }\n\n let output: string;\n\n if (!position && position !== 0) {\n output = source + str;\n } else {\n output = [source.slice(0, position), str, source.slice(positionEnd)].join('');\n if (moveCaret) {\n this.updateCaretPosition(str.length, false);\n }\n }\n\n return output;\n }\n\n /*\n * CARET METHODS\n * */\n private caretEventHandler(event: any) {\n let targetTagName = '';\n if (event.target.tagName) {\n targetTagName = event.target.tagName.toLowerCase();\n }\n\n const isTextInput =\n targetTagName === 'textarea' ||\n (targetTagName === 'input' && ['text', 'search', 'email', 'password', 'url', 'tel'].includes(event.target.type));\n\n const isKeyboard =\n event.target === this.elementRef.nativeElement || (event.target && this.elementRef.nativeElement.contains(event.target));\n\n if (isTextInput && this.activeInputElement == event.target) {\n /**\n * Tracks current cursor position\n * As keys are pressed, text will be added/removed at that position within the input.\n */\n this.setCaretPosition(event.target.selectionStart, event.target.selectionEnd);\n\n if (this.debug) {\n console.log('Caret at:', this.caretPosition, this.caretPositionEnd, event && event.target.tagName.toLowerCase(), event);\n }\n } else if (event.type === 'pointerup' && this.activeInputElement === document.activeElement) {\n return;\n } else if (!isKeyboard && event?.type !== 'selectionchange') {\n /**\n * we must ensure caretPosition doesn't persist once reactivated.\n */\n this.setCaretPosition(null);\n\n if (this.debug) {\n console.log(`Caret position reset due to \"${event?.type}\" event`, event);\n }\n }\n }\n\n private focusActiveInput(): void {\n this.activeInputElement?.focus();\n this.activeInputElement?.setSelectionRange(\n this.caretPosition,\n this.caretPositionEnd\n );\n }\n\n private updateCaretPosition(length: number, minus = false) {\n const newCaretPos = this.computeNewCaretPosition(length, minus);\n this.setCaretPosition(newCaretPos);\n // Scroll to bottom\n setTimeout(() => {\n this.activeInputElement?.scrollTo({\n top: this.activeInputElement.scrollHeight,\n } as ScrollToOptions);\n });\n }\n\n private computeNewCaretPosition(length: number, minus = false) {\n let caretPosition = this.caretPosition;\n\n if (caretPosition != null) {\n if (minus) {\n if (caretPosition > 0) caretPosition = caretPosition - length;\n } else {\n caretPosition = caretPosition + length;\n }\n }\n return caretPosition;\n }\n\n private setCaretPosition(position: number | null, endPosition = position): void {\n this.caretPosition = position;\n this.caretPositionEnd = endPosition;\n }\n}\n","<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n","/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nimport { Overlay, OverlayRef, OverlaySizeConfig, PositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentRef, Injectable } from '@angular/core';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { SystelabVirtualKeyboardLayouts } from './constants';\nimport { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\n\ninterface PositionStrategyOrigin {\n x: number;\n y: number;\n width?: number;\n height?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SystelabVirtualKeyboardOverlayService {\n private overlayRef!: OverlayRef;\n private inputOrigin: HTMLInputElement;\n private fixedBottom: boolean;\n private showKeyboardButtonElement: HTMLElement;\n private open: boolean;\n private layout: SystelabVirtualKeyboardLayouts;\n private clickAlreadyHandled: boolean = false;\n private touchEndAlreadyHandled: boolean = false;\n\n constructor(private readonly overlay: Overlay) {\n this.initListener();\n }\n\n public isCreated(): boolean {\n return !!this.overlayRef;\n }\n\n public isOpen(): boolean {\n return this.open;\n }\n\n public create(\n inputOrigin: HTMLInputElement,\n showKeyboardButtonElement: HTMLElement,\n fixedBottom: boolean,\n layout: SystelabVirtualKeyboardLayouts = SystelabVirtualKeyboardLayouts.default,\n ): ComponentRef<SystelabVirtualKeyboardComponent> {\n this.inputOrigin = inputOrigin;\n this.fixedBottom = fixedBottom;\n this.showKeyboardButtonElement = showKeyboardButtonElement;\n this.layout = layout;\n this.overlayRef = this.overlay.create({\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n disposeOnNavigation: true,\n backdropClass: 'systelab-virtual-keyboard__backdrop',\n panelClass: 'systelab-virtual-keyboard__panel',\n });\n if (fixedBottom) {\n this.overlayRef.addPanelClass('systelab-virtual-keyboard__panel--fixed-bottom');\n }\n\n this.updatePositionStrategy(inputOrigin, fixedBottom);\n this.updateSize();\n\n this.open = true;\n return this.overlayRef.attach(new ComponentPortal(SystelabVirtualKeyboardComponent));\n }\n\n public updatePosition(): void {\n this.updatePositionStrategy(this.inputOrigin, this.fixedBottom);\n }\n\n public setClickAlreadyHandled(): void {\n this.clickAlreadyHandled = true;\n }\n\n public setTouchEndAlreadyHandled(): void {\n this.touchEndAlreadyHandled = true;\n }\n\n public destroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n this.overlayRef = null;\n this.open = false;\n }\n\n private initListener() {\n document.addEventListener('click', this.handleClick.bind(this));\n document.addEventListener('touchend', this.handleTouchEnd.bind(this));\n }\n\n private handleClick(event: MouseEvent) {\n if (this.clickAlreadyHandled) {\n this.clickAlreadyHandled = false;\n return;\n }\n\n event.stopPropagation();\n this.handleEventTarget(event.target);\n }\n\n private handleTouchEnd(event: TouchEvent) {\n if (this.touchEndAlreadyHandled) {\n this.touchEndAlreadyHandled = false;\n return;\n }\n\n event.stopPropagation();\n this.handleEventTarget(event.target);\n }\n\n private handleEventTarget(target: EventTarget) {\n const showKeyboardButtonTarget: boolean = (target as HTMLElement)?.classList.contains('virtual-keyboard-show-button');\n const virtualKeyboardTarget: boolean = document.querySelector('.simple-keyboard')?.contains(target as Node);\n const inputElementTarget: boolean = this.inputOrigin?.contains(target as Node);\n const containsShowButton: boolean = this.showKeyboardButtonElement?.contains(target as Node);\n\n if (!virtualKeyboardTarget &&\n !inputElementTarget &&\n !containsShowButton &&\n !showKeyboardButtonTarget) {\n if (this.isCreated()) {\n this.destroy();\n }\n }\n }\n\n public hasAttached(): boolean {\n return this.overlayRef?.hasAttached();\n }\n\n private updatePositionStrategy(inputOrigin: HTMLInputElement, fixedBottom: boolean): void {\n if (!!this.overlayRef) {\n this.overlayRef.updatePositionStrategy(this.getPositionStrategy(inputOrigin, fixedBottom));\n }\n }\n\n private updateSize(): void {\n if (!!this.overlayRef) {\n this.overlayRef.updateSize(this.getOverlaySize());\n }\n }\n\n private getPositionStrategy(inputOrigin: HTMLInputElement, fixedBottom: boolean): PositionStrategy {\n if (fixedBottom) {\n return this.overlay.position().global().centerHorizontally().bottom('0');\n }\n\n const pointWithDimensions: PositionStrategyOrigin = this.computePositionStrategyOrigin(inputOrigin);\n\n return this.overlay\n .position()\n .flexibleConnectedTo(pointWithDimensions)\n .withFlexibleDimensions(false)\n .withLockedPosition(true)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n ]);\n }\n\n private getOverlaySize(): OverlaySizeConfig {\n const overlayWidth = this.layout === SystelabVirtualKeyboardLayouts.numeric ? '400px' : '1200px';\n\n return {\n width: overlayWidth,\n maxWidth: overlayWidth,\n minWidth: overlayWidth,\n };\n }\n\n private computePositionStrategyOrigin(inputOrigin: HTMLInputElement): PositionStrategyOrigin {\n const overlayOffsetX = this.computeOverlayOffsetX(inputOrigin);\n const { width: overlayWidthString } = this.getOverlaySize();\n const overlayWidth = Number((overlayWidthString as string).replace('px', ''));\n const {x, y, width, height} = inputOrigin.getBoundingClientRect();\n return {\n width,\n height,\n x: width < overlayWidth ? x - overlayOffsetX : x + overlayOffsetX,\n y,\n };\n }\n\n private computeOverlayOffsetX(inputOrigin: HTMLInputElement): number {\n const { width: overlayWidthString } = this.getOverlaySize();\n const overlayWidth = Number((overlayWidthString as string).replace('px', ''));\n const inputWidth = inputOrigin.getBoundingClientRect().width;\n\n const extraWidth = overlayWidth - inputWidth;\n\n return Math.abs(extraWidth) / 2;\n }\n}\n","/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nimport {\n AfterViewInit,\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n} from '@angular/core';\n\nimport { DOCUMENT } from '@angular/common';\n\nimport { SystelabVirtualKeyboardInputModes, SystelabVirtualKeyboardLayouts } from './constants';\nimport { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\nimport { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\nimport { SystelabVirtualKeyboardConfig, VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';\n\n@Directive({\n selector: 'input[vkEnabled], textarea[vkEnabled]',\n})\nexport class SystelabVirtualKeyboardDirective implements OnInit, AfterViewInit, OnDestroy {\n @HostListener('window:touchmove', ['$event'])\n @HostListener('window:touchend', ['$event'])\n @HostListener('window:wheel', ['$event'])\n @HostListener('document:scroll', ['$event'])\n onDocumentScroll() {\n if (!this.vkEnabled) {\n return;\n }\n this.overlayService.updatePosition();\n }\n\n @HostListener('click', ['$event'])\n onClick(): void {\n if (!this.vkEnabled || !this.config.showOnMouseClick) {\n return;\n }\n\n this.closePanel();\n this.overlayService.setClickAlreadyHandled();\n this.openPanel();\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(): void {\n if (!this.vkEnabled) {\n return;\n }\n\n this.closePanel();\n this.overlayService.setTouchEndAlreadyHandled();\n this.openPanel();\n }\n\n private enabled = false;\n\n @Input()\n set vkEnabled(enabled: boolean | string) {\n if (typeof enabled === 'string') {\n this.enabled = true;\n } else {\n this.enabled = enabled;\n }\n };\n\n get vkEnabled(): boolean {\n return this.enabled;\n }\n\n private fixedBottom = false;\n\n @Input()\n get vkFixedBottom(): boolean {\n return this.fixedBottom;\n }\n\n set vkFixedBottom(fixedBottom: boolean | string) {\n if (typeof fixedBottom === 'string') {\n this.fixedBottom = true;\n } else {\n this.fixedBottom = fixedBottom;\n }\n }\n\n private debug = false;\n\n @Input()\n get vkDebug(): boolean {\n return this.debug;\n }\n\n set vkDebug(debug: boolean) {\n this.debug = debug;\n }\n\n private config: SystelabVirtualKeyboardConfig;\n\n @Input()\n get vkConfig(): SystelabVirtualKeyboardConfig {\n return this.config;\n }\n\n set vkConfig(config: SystelabVirtualKeyboardConfig) {\n this.config = config;\n }\n\n private panelRef!: ComponentRef<SystelabVirtualKeyboardComponent>;\n private showKeyboardButtonElement: HTMLElement;\n\n constructor(\n private readonly elementRef: ElementRef<HTMLInputElement>,\n private readonly overlayService: SystelabVirtualKeyboardOverlayService,\n private readonly renderer: Renderer2,\n @Inject(DOCUMENT) private readonly document: any,\n @Optional() @Inject(VIRTUAL_KEYBOARD_CONFIG) private virtualKeyboardConfig: SystelabVirtualKeyboardConfig,\n ) {\n this.config = this.virtualKeyboardConfig;\n }\n\n ngOnInit() {\n if (this.config?.showIcon) {\n this.attachKeyboardIcon();\n }\n }\n\n ngAfterViewInit() {\n if (this.vkEnabled && this.config?.showIcon) {\n const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');\n keyboardIcon.addEventListener('click', this.togglePanel.bind(this));\n }\n }\n\n ngOnDestroy(): void {\n if (this.vkEnabled && this.config?.showIcon) {\n const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');\n keyboardIcon.removeEventListener('click', this.togglePanel.bind(this));\n }\n this.overlayService.destroy();\n }\n\n private togglePanel(): void {\n if (!this.vkEnabled) {\n return;\n }\n if (this.overlayService.isOpen()) {\n this.closePanel();\n } else {\n this.openPanel();\n }\n }\n\n private openPanel(): void {\n if (!this.vkEnabled) {\n return;\n }\n if (this.overlayService.isCreated()) {\n this.overlayService.destroy();\n }\n if (this.overlayService.hasAttached()) {\n return;\n }\n\n const currentLayout = this.getLayout(this.elementRef.nativeElement);\n\n this.panelRef = this.overlayService.create(this.inputOrigin(), this.showKeyboardButtonElement, this.vkFixedBottom, currentLayout);\n this.panelRef.instance.debug = this.vkDebug;\n this.panelRef.instance.setActiveInput(this.elementRef.nativeElement);\n this.panelRef.instance.setLayout(currentLayout);\n this.panelRef.instance.closePanel.subscribe(() => this.closePanel());\n }\n\n private getLayout(activeInputElement: HTMLInputElement | HTMLTextAreaElement): SystelabVirtualKeyboardLayouts {\n if (this.config?.hasOwnProperty('layout')) {\n return this.config.layout;\n }\n if (this.isInputAlphabetic(activeInputElement)) {\n return SystelabVirtualKeyboardLayouts.default;\n } else if (this.isInputNumeric(activeInputElement)) {\n return SystelabVirtualKeyboardLayouts.numeric;\n } else {\n return SystelabVirtualKeyboardLayouts.default;\n }\n }\n\n private isInputAlphabetic(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardInputModes.text, SystelabVirtualKeyboardInputModes.password].some((i) => i === inputMode);\n }\n\n private isInputNumeric(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardInputModes.numeric].some((i) => i === inputMode);\n }\n\n private getInputMode(activeInputElement: HTMLInputElement | HTMLTextAreaElement): string {\n return activeInputElement?.inputMode ?? activeInputElement?.type;\n }\n\n private closePanel(): void {\n this.overlayService.destroy();\n }\n\n private inputOrigin(): HTMLInputElement {\n return this.elementRef.nativeElement;\n }\n\n private attachKeyboardIcon() {\n if (this.vkEnabled) {\n const child = this.document.createElement('i');\n child.classList.add('fa');\n child.classList.add('fa-keyboard');\n child.classList.add('systelab-virtual-keyboard__show-button');\n this.renderer.appendChild(this.elementRef.nativeElement.parentElement, child);\n this.showKeyboardButtonElement = child;\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SystelabVirtualKeyboardDirective } from './systelab-virtual-keyboard.directive';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { SystelabVirtualKeyboardConfig, VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';\nimport { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\n\nexport const factory = () => {\n const systelabVirtualKeyboardModuleCreated = (factory as any)._systelabVirtualKeyboardModuleCreated || false;\n if (systelabVirtualKeyboardModuleCreated) {\n throw new Error('SystelabVirtualKeyboardModuleCreated.forRoot imported to many times');\n }\n (factory as any)._systelabVirtualKeyboardModuleCreated = true;\n};\n\n@NgModule({\n imports: [CommonModule, OverlayModule],\n declarations: [SystelabVirtualKeyboardDirective],\n exports: [SystelabVirtualKeyboardDirective],\n})\nexport class SystelabVirtualKeyboardModule {\n public static forRoot(conf?: SystelabVirtualKeyboardConfig): ModuleWithProviders<SystelabVirtualKeyboardModule> {\n return {\n ngModule: SystelabVirtualKeyboardModule,\n providers: [\n SystelabVirtualKeyboardOverlayService,\n {\n provide: VIRTUAL_KEYBOARD_CONFIG, useValue: conf\n }\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders<SystelabVirtualKeyboardModule> {\n return {\n ngModule: SystelabVirtualKeyboardModule,\n providers: [],\n };\n }\n}\n","/*\n * Public API Surface of systelab-virtual-keyboard\n */\n\nexport * from './lib/constants';\nexport { SystelabVirtualKeyboardConfig } from './lib/systelab-virtual-keyboard.config';\nexport * from './lib/systelab-virtual-keyboard.directive';\nexport * from './lib/systelab-virtual-keyboard.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SystelabVirtualKeyboardOverlayService"],"mappings":"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"}
@@ -11,16 +11,20 @@ export declare class SystelabVirtualKeyboardOverlayService {
11
11
  private showKeyboardButtonElement;
12
12
  private open;
13
13
  private layout;
14
- private focusDispatched;
14
+ private clickAlreadyHandled;
15
+ private touchEndAlreadyHandled;
15
16
  constructor(overlay: Overlay);
16
17
  isCreated(): boolean;
17
18
  isOpen(): boolean;
18
19
  create(inputOrigin: HTMLInputElement, showKeyboardButtonElement: HTMLElement, fixedBottom: boolean, layout?: SystelabVirtualKeyboardLayouts): ComponentRef<SystelabVirtualKeyboardComponent>;
19
20
  updatePosition(): void;
20
- setFocusDispatched(dispatched: boolean): void;
21
+ setClickAlreadyHandled(): void;
22
+ setTouchEndAlreadyHandled(): void;
21
23
  destroy(): void;
22
24
  private initListener;
23
25
  private handleClick;
26
+ private handleTouchEnd;
27
+ private handleEventTarget;
24
28
  hasAttached(): boolean;
25
29
  private updatePositionStrategy;
26
30
  private updateSize;
@@ -1 +1 @@
1
- {"version":3,"file":"systelab-virtual-keyboard-overlay.service.d.ts","sourceRoot":"","sources":["../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard-overlay.service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAmD,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,YAAY,EAAc,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;;AASzF,qBAGa,qCAAqC;IASlC,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,yBAAyB,CAAc;IAC/C,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,eAAe,CAAkB;gBAEZ,OAAO,EAAE,OAAO;IAItC,SAAS,IAAI,OAAO;IAIpB,MAAM,IAAI,OAAO;IAIjB,MAAM,CACT,WAAW,EAAE,gBAAgB,EAC7B,yBAAyB,EAAE,WAAW,EACtC,WAAW,EAAE,OAAO,EACpB,MAAM,GAAE,8BAAuE,GAChF,YAAY,CAAC,gCAAgC,CAAC;IAsB1C,cAAc,IAAI,IAAI;IAItB,kBAAkB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAI7C,OAAO,IAAI,IAAI;IAQtB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,WAAW;IA2BZ,WAAW,IAAI,OAAO;IAI7B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,mBAAmB;IAyC3B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,6BAA6B;IAarC,OAAO,CAAC,qBAAqB;yCA3KpB,qCAAqC;6CAArC,qCAAqC;CAoLjD"}
1
+ {"version":3,"file":"systelab-virtual-keyboard-overlay.service.d.ts","sourceRoot":"","sources":["../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard-overlay.service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAmD,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,YAAY,EAAc,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;;AASzF,qBAGa,qCAAqC;IAUlC,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,yBAAyB,CAAc;IAC/C,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,sBAAsB,CAAkB;gBAEnB,OAAO,EAAE,OAAO;IAItC,SAAS,IAAI,OAAO;IAIpB,MAAM,IAAI,OAAO;IAIjB,MAAM,CACT,WAAW,EAAE,gBAAgB,EAC7B,yBAAyB,EAAE,WAAW,EACtC,WAAW,EAAE,OAAO,EACpB,MAAM,GAAE,8BAAuE,GAChF,YAAY,CAAC,gCAAgC,CAAC;IAuB1C,cAAc,IAAI,IAAI;IAItB,sBAAsB,IAAI,IAAI;IAI9B,yBAAyB,IAAI,IAAI;IAIjC,OAAO,IAAI,IAAI;IAQtB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,iBAAiB;IAgBlB,WAAW,IAAI,OAAO;IAI7B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,mBAAmB;IAyC3B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,6BAA6B;IAarC,OAAO,CAAC,qBAAqB;yCA/LpB,qCAAqC;6CAArC,qCAAqC;CAwMjD"}
@@ -5,5 +5,6 @@ export interface SystelabVirtualKeyboardConfig {
5
5
  layout?: SystelabVirtualKeyboardLayouts;
6
6
  inputMethod?: SystelabVirtualKeyboardInputMethods;
7
7
  showIcon?: boolean;
8
+ showOnMouseClick?: boolean;
8
9
  }
9
10
  //# sourceMappingURL=systelab-virtual-keyboard.config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"systelab-virtual-keyboard.config.d.ts","sourceRoot":"","sources":["../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,mCAAmC,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElG,eAAO,MAAM,uBAAuB,+CAA+E,CAAC;AAEpH,MAAM,WAAW,6BAA6B;IAC1C,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,WAAW,CAAC,EAAE,mCAAmC,CAAC;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB"}
1
+ {"version":3,"file":"systelab-virtual-keyboard.config.d.ts","sourceRoot":"","sources":["../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,mCAAmC,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElG,eAAO,MAAM,uBAAuB,+CAA+E,CAAC;AAEpH,MAAM,WAAW,6BAA6B;IAC1C,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,WAAW,CAAC,EAAE,mCAAmC,CAAC;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B"}
@@ -9,7 +9,8 @@ export declare class SystelabVirtualKeyboardDirective implements OnInit, AfterVi
9
9
  private readonly document;
10
10
  private virtualKeyboardConfig;
11
11
  onDocumentScroll(): void;
12
- onFocus(): void;
12
+ onClick(): void;
13
+ onTouchEnd(): void;
13
14
  private enabled;
14
15
  set vkEnabled(enabled: boolean | string);
15
16
  get vkEnabled(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"systelab-virtual-keyboard.directive.d.ts","sourceRoot":"","sources":["../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.directive.ts"],"names":[],"mappings":"AASA,OAAO,EACH,aAAa,EAGb,UAAU,EAIV,SAAS,EACT,MAAM,EAEN,SAAS,EACZ,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,qCAAqC,EAAE,MAAM,6CAA6C,CAAC;AACpG,OAAO,EAAE,6BAA6B,EAA2B,MAAM,oCAAoC,CAAC;;AAE5G,qBAGa,gCAAiC,YAAW,MAAM,EAAE,aAAa,EAAE,SAAS;IAoFjF,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACE,OAAO,CAAC,qBAAqB;IAnF9E,gBAAgB;IAUhB,OAAO,IAAI,IAAI;IAaf,OAAO,CAAC,OAAO,CAAS;IAExB,IACI,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAMtC;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,OAAO,CAAC,WAAW,CAAS;IAE5B,IACI,aAAa,IAAI,OAAO,CAE3B;IAED,IAAI,aAAa,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,EAM9C;IAED,OAAO,CAAC,KAAK,CAAS;IAEtB,IACI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED,OAAO,CAAC,MAAM,CAAgC;IAE9C,IACI,QAAQ,IAAI,6BAA6B,CAE5C;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE,6BAA6B,EAEjD;IAED,OAAO,CAAC,QAAQ,CAAkD;IAClE,OAAO,CAAC,yBAAyB,CAAc;gBAG1B,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,EACxC,cAAc,EAAE,qCAAqC,EACrD,QAAQ,EAAE,SAAS,EACD,QAAQ,EAAE,GAAG,EACK,qBAAqB,EAAE,6BAA6B;IAK7G,QAAQ;IAMR,eAAe;IAOf,WAAW,IAAI,IAAI;IAUnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,kBAAkB;yCAtLjB,gCAAgC;2CAAhC,gCAAgC;CAgM5C"}
1
+ {"version":3,"file":"systelab-virtual-keyboard.directive.d.ts","sourceRoot":"","sources":["../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.directive.ts"],"names":[],"mappings":"AASA,OAAO,EACH,aAAa,EAGb,UAAU,EAIV,SAAS,EACT,MAAM,EAEN,SAAS,EACZ,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,qCAAqC,EAAE,MAAM,6CAA6C,CAAC;AACpG,OAAO,EAAE,6BAA6B,EAA2B,MAAM,oCAAoC,CAAC;;AAE5G,qBAGa,gCAAiC,YAAW,MAAM,EAAE,aAAa,EAAE,SAAS;IA0FjF,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACE,OAAO,CAAC,qBAAqB;IAzF9E,gBAAgB;IAQhB,OAAO,IAAI,IAAI;IAWf,UAAU,IAAI,IAAI;IAUlB,OAAO,CAAC,OAAO,CAAS;IAExB,IACI,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAMtC;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,OAAO,CAAC,WAAW,CAAS;IAE5B,IACI,aAAa,IAAI,OAAO,CAE3B;IAED,IAAI,aAAa,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,EAM9C;IAED,OAAO,CAAC,KAAK,CAAS;IAEtB,IACI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED,OAAO,CAAC,MAAM,CAAgC;IAE9C,IACI,QAAQ,IAAI,6BAA6B,CAE5C;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE,6BAA6B,EAEjD;IAED,OAAO,CAAC,QAAQ,CAAkD;IAClE,OAAO,CAAC,yBAAyB,CAAc;gBAG1B,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,EACxC,cAAc,EAAE,qCAAqC,EACrD,QAAQ,EAAE,SAAS,EACD,QAAQ,EAAE,GAAG,EACK,qBAAqB,EAAE,6BAA6B;IAK7G,QAAQ;IAMR,eAAe;IAOf,WAAW,IAAI,IAAI;IAQnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,kBAAkB;yCA1LjB,gCAAgC;2CAAhC,gCAAgC;CAoM5C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "systelab-virtual-keyboard",
3
- "version": "17.1.0",
3
+ "version": "17.3.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.0.0",
6
6
  "@angular/core": "^17.0.0",