systelab-virtual-keyboard 0.0.6 → 17.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,4 +42,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
42
42
  exports: [SystelabVirtualKeyboardDirective],
43
43
  }]
44
44
  }] });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQWlDLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUcsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBRXBHLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7SUFDMUIsTUFBTSxvQ0FBb0MsR0FBSSxPQUFlLENBQUMscUNBQXFDLElBQUksS0FBSyxDQUFDO0lBQzdHLElBQUksb0NBQW9DLEVBQUU7UUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0tBQ3hGO0lBQ0EsT0FBZSxDQUFDLHFDQUFxQyxHQUFHLElBQUksQ0FBQztBQUNoRSxDQUFDLENBQUM7QUFPRixNQUFNLE9BQU8sNkJBQTZCO0lBQ2pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBb0M7UUFDeEQsT0FBTztZQUNMLFFBQVEsRUFBRSw2QkFBNkI7WUFDdkMsU0FBUyxFQUFFO2dCQUNULHFDQUFxQztnQkFDckM7b0JBQ0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxJQUFJO2lCQUNqRDthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUTtRQUNwQixPQUFPO1lBQ0wsUUFBUSxFQUFFLDZCQUE2QjtZQUN2QyxTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUM7SUFDSixDQUFDOzhHQWxCVSw2QkFBNkI7K0dBQTdCLDZCQUE2QixpQkFIekIsZ0NBQWdDLGFBRHJDLFlBQVksRUFBRSxhQUFhLGFBRTNCLGdDQUFnQzsrR0FFL0IsNkJBQTZCLFlBSjlCLFlBQVksRUFBRSxhQUFhOzsyRkFJMUIsNkJBQTZCO2tCQUx6QyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7b0JBQ3RDLFlBQVksRUFBRSxDQUFDLGdDQUFnQyxDQUFDO29CQUNoRCxPQUFPLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztpQkFDNUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkRGlyZWN0aXZlIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWcsIFZJUlRVQUxfS0VZQk9BUkRfQ09ORklHIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbmZpZyc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLW92ZXJsYXkuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBmYWN0b3J5ID0gKCkgPT4ge1xuICBjb25zdCBzeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZUNyZWF0ZWQgPSAoZmFjdG9yeSBhcyBhbnkpLl9zeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZUNyZWF0ZWQgfHwgZmFsc2U7XG4gIGlmIChzeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZUNyZWF0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTW9kdWxlQ3JlYXRlZC5mb3JSb290IGltcG9ydGVkIHRvIG1hbnkgdGltZXMnKTtcbiAgfVxuICAoZmFjdG9yeSBhcyBhbnkpLl9zeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZUNyZWF0ZWQgPSB0cnVlO1xufTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgT3ZlcmxheU1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZj86IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRPdmVybGF5U2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFZJUlRVQUxfS0VZQk9BUkRfQ09ORklHLCB1c2VWYWx1ZTogY29uZlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZm9yQ2hpbGQoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQWlDLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUcsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBRXBHLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7SUFDeEIsTUFBTSxvQ0FBb0MsR0FBSSxPQUFlLENBQUMscUNBQXFDLElBQUksS0FBSyxDQUFDO0lBQzdHLElBQUksb0NBQW9DLEVBQUU7UUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0tBQzFGO0lBQ0EsT0FBZSxDQUFDLHFDQUFxQyxHQUFHLElBQUksQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFPRixNQUFNLE9BQU8sNkJBQTZCO0lBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBb0M7UUFDdEQsT0FBTztZQUNILFFBQVEsRUFBRSw2QkFBNkI7WUFDdkMsU0FBUyxFQUFFO2dCQUNQLHFDQUFxQztnQkFDckM7b0JBQ0ksT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxJQUFJO2lCQUNuRDthQUNKO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUTtRQUNsQixPQUFPO1lBQ0gsUUFBUSxFQUFFLDZCQUE2QjtZQUN2QyxTQUFTLEVBQUUsRUFBRTtTQUNoQixDQUFDO0lBQ04sQ0FBQzs4R0FsQlEsNkJBQTZCOytHQUE3Qiw2QkFBNkIsaUJBSHZCLGdDQUFnQyxhQURyQyxZQUFZLEVBQUUsYUFBYSxhQUUzQixnQ0FBZ0M7K0dBRWpDLDZCQUE2QixZQUo1QixZQUFZLEVBQUUsYUFBYTs7MkZBSTVCLDZCQUE2QjtrQkFMekMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO29CQUN0QyxZQUFZLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztvQkFDaEQsT0FBTyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7aUJBQzlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZERpcmVjdGl2ZSB9IGZyb20gJy4vc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnLCBWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRyB9IGZyb20gJy4vc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb25maWcnO1xuaW1wb3J0IHsgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRPdmVybGF5U2VydmljZSB9IGZyb20gJy4vc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgZmFjdG9yeSA9ICgpID0+IHtcbiAgICBjb25zdCBzeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZUNyZWF0ZWQgPSAoZmFjdG9yeSBhcyBhbnkpLl9zeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZUNyZWF0ZWQgfHwgZmFsc2U7XG4gICAgaWYgKHN5c3RlbGFiVmlydHVhbEtleWJvYXJkTW9kdWxlQ3JlYXRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTW9kdWxlQ3JlYXRlZC5mb3JSb290IGltcG9ydGVkIHRvIG1hbnkgdGltZXMnKTtcbiAgICB9XG4gICAgKGZhY3RvcnkgYXMgYW55KS5fc3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRNb2R1bGVDcmVhdGVkID0gdHJ1ZTtcbn07XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgT3ZlcmxheU1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmREaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZERpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTW9kdWxlIHtcbiAgICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZj86IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRPdmVybGF5U2VydmljZSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFZJUlRVQUxfS0VZQk9BUkRfQ09ORklHLCB1c2VWYWx1ZTogY29uZlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZvckNoaWxkKCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8U3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW10sXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
@@ -36,12 +36,12 @@ var SystelabVirtualKeyboardInputMethods;
36
36
  SystelabVirtualKeyboardInputMethods["onlyMouseEvents"] = "onlyMouseEvents";
37
37
  SystelabVirtualKeyboardInputMethods["onlyTouchEvents"] = "onlyTouchEvents";
38
38
  })(SystelabVirtualKeyboardInputMethods || (SystelabVirtualKeyboardInputMethods = {}));
39
- var SystelabVirtualKeyboardInputTypes;
40
- (function (SystelabVirtualKeyboardInputTypes) {
41
- SystelabVirtualKeyboardInputTypes["text"] = "text";
42
- SystelabVirtualKeyboardInputTypes["number"] = "number";
43
- SystelabVirtualKeyboardInputTypes["password"] = "password";
44
- })(SystelabVirtualKeyboardInputTypes || (SystelabVirtualKeyboardInputTypes = {}));
39
+ var SystelabVirtualKeyboardInputModes;
40
+ (function (SystelabVirtualKeyboardInputModes) {
41
+ SystelabVirtualKeyboardInputModes["text"] = "text";
42
+ SystelabVirtualKeyboardInputModes["numeric"] = "numeric";
43
+ SystelabVirtualKeyboardInputModes["password"] = "password";
44
+ })(SystelabVirtualKeyboardInputModes || (SystelabVirtualKeyboardInputModes = {}));
45
45
 
46
46
  const VIRTUAL_KEYBOARD_CONFIG = new InjectionToken('VIRTUAL_KEYBOARD_CONFIG');
47
47
 
@@ -73,6 +73,7 @@ class SystelabVirtualKeyboardComponent {
73
73
  this.selectedLayout = SystelabVirtualKeyboardLayouts.default;
74
74
  this.caretPosition = null;
75
75
  this.caretPositionEnd = null;
76
+ this.shiftPressed = false;
76
77
  this.closePanel = new EventEmitter();
77
78
  }
78
79
  ngAfterViewInit() {
@@ -106,20 +107,12 @@ class SystelabVirtualKeyboardComponent {
106
107
  const inputType = this.activeInputElement?.type;
107
108
  console.log('Layout:', `${inputType}_${this.selectedLayout}`);
108
109
  }
109
- let selectionStart;
110
- let selectionEnd;
111
- if (this.isInputNumeric(input)) {
112
- selectionStart = this.activeInputElement.value.toString().length;
113
- selectionEnd = this.activeInputElement.value.toString().length;
114
- }
115
- else {
116
- selectionStart = this.activeInputElement.selectionStart;
117
- selectionEnd = this.activeInputElement.selectionEnd;
118
- }
110
+ const { selectionStart, selectionEnd } = this.activeInputElement;
119
111
  this.setCaretPosition(selectionStart, selectionEnd);
120
112
  if (this.debug) {
121
113
  console.log('Caret start at:', this.caretPosition, this.caretPositionEnd);
122
114
  }
115
+ this.focusActiveInput();
123
116
  }
124
117
  setLayout(layout) {
125
118
  this.selectedLayout = layout;
@@ -178,14 +171,6 @@ class SystelabVirtualKeyboardComponent {
178
171
  }
179
172
  return keyboardOptions;
180
173
  }
181
- isInputAlphabetic(activeInputElement) {
182
- const inputType = activeInputElement?.type;
183
- return inputType && [SystelabVirtualKeyboardInputTypes.text, SystelabVirtualKeyboardInputTypes.password].some((i) => i === inputType);
184
- }
185
- isInputNumeric(activeInputElement) {
186
- const inputType = activeInputElement?.type;
187
- return inputType && [SystelabVirtualKeyboardInputTypes.number].some((i) => i === inputType);
188
- }
189
174
  handleKeyPress(button, e) {
190
175
  if (this.debug) {
191
176
  console.log('Key press:', button);
@@ -194,7 +179,8 @@ class SystelabVirtualKeyboardComponent {
194
179
  button = new DOMParser().parseFromString(button, 'text/html').body.textContent;
195
180
  }
196
181
  if (button === SystelabVirtualKeyboardButton.Shift || button === SystelabVirtualKeyboardButton.Lock) {
197
- this.toggleShift();
182
+ this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;
183
+ this.toggleShiftLayout();
198
184
  }
199
185
  else if (button === SystelabVirtualKeyboardButton.Done) {
200
186
  this.closePanel.emit();
@@ -211,6 +197,10 @@ class SystelabVirtualKeyboardComponent {
211
197
  }
212
198
  }
213
199
  this.dispatchEvents(button);
200
+ if (this.shiftPressed) {
201
+ this.toggleShiftLayout();
202
+ }
203
+ this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;
214
204
  }
215
205
  handleButtonOutput(button) {
216
206
  const commonParams = this.getCommonParams();
@@ -223,7 +213,7 @@ class SystelabVirtualKeyboardComponent {
223
213
  output = this.addStringAt(output, ' ', ...commonParams);
224
214
  }
225
215
  else if (button === SystelabVirtualKeyboardButton.Tab) {
226
- output = this.addStringAt(output, '\t', ...commonParams);
216
+ // Do nothing for tab
227
217
  }
228
218
  else if (button === SystelabVirtualKeyboardButton.Enter) {
229
219
  if (this.isTextarea) {
@@ -288,9 +278,9 @@ class SystelabVirtualKeyboardComponent {
288
278
  }
289
279
  return { key, code };
290
280
  }
291
- toggleShift() {
292
- let currentLayout = this.keyboard.options.layoutName;
293
- let selectedLayout = currentLayout === SystelabVirtualKeyboardLayouts.default ? SystelabVirtualKeyboardLayouts.shift : SystelabVirtualKeyboardLayouts.default;
281
+ toggleShiftLayout() {
282
+ const currentLayout = this.keyboard.options.layoutName;
283
+ const selectedLayout = currentLayout === SystelabVirtualKeyboardLayouts.default ? SystelabVirtualKeyboardLayouts.shift : SystelabVirtualKeyboardLayouts.default;
294
284
  this.setLayout(selectedLayout);
295
285
  }
296
286
  isStandardButton(button) {
@@ -343,8 +333,8 @@ class SystelabVirtualKeyboardComponent {
343
333
  return output;
344
334
  }
345
335
  /*
346
- * CARET METHODS
347
- * */
336
+ * CARET METHODS
337
+ * */
348
338
  caretEventHandler(event) {
349
339
  let targetTagName = '';
350
340
  if (event.target.tagName) {
@@ -376,6 +366,10 @@ class SystelabVirtualKeyboardComponent {
376
366
  }
377
367
  }
378
368
  }
369
+ focusActiveInput() {
370
+ this.activeInputElement?.focus();
371
+ this.activeInputElement?.setSelectionRange(this.caretPosition, this.caretPositionEnd);
372
+ }
379
373
  updateCaretPosition(length, minus = false) {
380
374
  const newCaretPos = this.computeNewCaretPosition(length, minus);
381
375
  this.setCaretPosition(newCaretPos);
@@ -404,7 +398,7 @@ class SystelabVirtualKeyboardComponent {
404
398
  this.caretPositionEnd = endPosition;
405
399
  }
406
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 }); }
407
- 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: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:Lato,HelveticaNeue-Light,Helvetica Neue Light,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif}\n"] }); }
408
402
  }
409
403
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardComponent, decorators: [{
410
404
  type: Component,
@@ -420,6 +414,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
420
414
  }], handleMouseUp: [{
421
415
  type: HostListener,
422
416
  args: ['window:pointerup', ['$event']]
417
+ }, {
418
+ type: HostListener,
419
+ args: ['window:mouseup', ['$event']]
423
420
  }], handleSelect: [{
424
421
  type: HostListener,
425
422
  args: ['window:select', ['$event']]
@@ -594,12 +591,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
594
591
  */
595
592
  class SystelabVirtualKeyboardDirective {
596
593
  onDocumentScroll() {
594
+ if (!this.vkEnabled) {
595
+ return;
596
+ }
597
597
  if (this.overlayService.isCreated()) {
598
598
  this.overlayService.updatePosition();
599
599
  }
600
600
  }
601
- onFocus(event) {
602
- console.log('Focused');
601
+ onFocus() {
602
+ if (!this.vkEnabled) {
603
+ return;
604
+ }
603
605
  if (this.overlayService.isCreated()) {
604
606
  this.closePanel();
605
607
  }
@@ -666,11 +668,18 @@ class SystelabVirtualKeyboardDirective {
666
668
  }
667
669
  }
668
670
  ngOnDestroy() {
671
+ if (this.vkEnabled && this.config?.showIcon) {
672
+ const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');
673
+ keyboardIcon.removeEventListener('click', this.togglePanel.bind(this));
674
+ }
669
675
  if (this.overlayService.isCreated()) {
670
676
  this.overlayService.destroy();
671
677
  }
672
678
  }
673
679
  togglePanel() {
680
+ if (!this.vkEnabled) {
681
+ return;
682
+ }
674
683
  if (this.overlayService.isOpen()) {
675
684
  this.closePanel();
676
685
  }
@@ -679,6 +688,9 @@ class SystelabVirtualKeyboardDirective {
679
688
  }
680
689
  }
681
690
  openPanel() {
691
+ if (!this.vkEnabled) {
692
+ return;
693
+ }
682
694
  if (this.overlayService.isCreated()) {
683
695
  this.overlayService.destroy();
684
696
  }
@@ -707,12 +719,15 @@ class SystelabVirtualKeyboardDirective {
707
719
  }
708
720
  }
709
721
  isInputAlphabetic(activeInputElement) {
710
- const inputType = activeInputElement?.type;
711
- return inputType && [SystelabVirtualKeyboardInputTypes.text, SystelabVirtualKeyboardInputTypes.password].some((i) => i === inputType);
722
+ const inputMode = this.getInputMode(activeInputElement);
723
+ return inputMode && [SystelabVirtualKeyboardInputModes.text, SystelabVirtualKeyboardInputModes.password].some((i) => i === inputMode);
712
724
  }
713
725
  isInputNumeric(activeInputElement) {
714
- const inputType = activeInputElement?.type;
715
- return inputType && [SystelabVirtualKeyboardInputTypes.number].some((i) => i === inputType);
726
+ const inputMode = this.getInputMode(activeInputElement);
727
+ return inputMode && [SystelabVirtualKeyboardInputModes.numeric].some((i) => i === inputMode);
728
+ }
729
+ getInputMode(activeInputElement) {
730
+ return activeInputElement?.inputMode ?? activeInputElement?.type;
716
731
  }
717
732
  closePanel() {
718
733
  this.overlayService.destroy();
@@ -817,5 +832,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
817
832
  * Generated bundle index. Do not edit.
818
833
  */
819
834
 
820
- export { SystelabVirtualKeyboardButton, SystelabVirtualKeyboardDirective, SystelabVirtualKeyboardInputMethods, SystelabVirtualKeyboardInputTypes, SystelabVirtualKeyboardLayouts, SystelabVirtualKeyboardModule, factory };
835
+ export { SystelabVirtualKeyboardButton, SystelabVirtualKeyboardDirective, SystelabVirtualKeyboardInputMethods, SystelabVirtualKeyboardInputModes, SystelabVirtualKeyboardLayouts, SystelabVirtualKeyboardModule, factory };
821
836
  //# sourceMappingURL=systelab-virtual-keyboard.mjs.map
@@ -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 SystelabVirtualKeyboardInputTypes {\n text = 'text',\n number = 'number',\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 SystelabVirtualKeyboardInputTypes,\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 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\n @Output() closePanel = new EventEmitter<void>();\n\n constructor(private elementRef: ElementRef<HTMLInputElement>, @Optional() @Inject(VIRTUAL_KEYBOARD_CONFIG) private virtualKeyboardConfig: SystelabVirtualKeyboardConfig,) {}\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 let selectionStart: number;\n let selectionEnd: number;\n if (this.isInputNumeric(input)) {\n selectionStart = this.activeInputElement.value.toString().length;\n selectionEnd = this.activeInputElement.value.toString().length;\n } else {\n selectionStart = this.activeInputElement.selectionStart;\n selectionEnd = this.activeInputElement.selectionEnd;\n }\n\n this.setCaretPosition(selectionStart, selectionEnd);\n\n if (this.debug) {\n console.log('Caret start at:', this.caretPosition, this.caretPositionEnd);\n }\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 isInputAlphabetic(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputType = activeInputElement?.type;\n return inputType && [SystelabVirtualKeyboardInputTypes.text, SystelabVirtualKeyboardInputTypes.password].some((i) => i === inputType);\n }\n\n private isInputNumeric(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputType = activeInputElement?.type;\n return inputType && [SystelabVirtualKeyboardInputTypes.number].some((i) => i === inputType);\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.toggleShift();\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\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 output = this.addStringAt(output, '\\t', ...commonParams);\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\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 toggleShift() {\n let currentLayout = this.keyboard.options.layoutName;\n let 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 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 { SystelabVirtualKeyboardInputTypes, 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.overlayService.isCreated()) {\n this.overlayService.updatePosition();\n }\n }\n\n @HostListener('focus', ['$event'])\n onFocus(event: MouseEvent | TouchEvent): void {\n console.log('Focused');\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 @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 get vkEnabled(): boolean {\n return this.enabled;\n }\n\n private fixedBottom = false;\n @Input()\n get vkFixedBottom(): boolean {\n return this.fixedBottom;\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 @Input()\n get vkDebug(): boolean {\n return this.debug;\n }\n set vkDebug(debug: boolean) {\n this.debug = debug;\n }\n\n private config: SystelabVirtualKeyboardConfig;\n @Input()\n get vkConfig(): SystelabVirtualKeyboardConfig {\n return this.config;\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.overlayService.isCreated()) {\n this.overlayService.destroy();\n }\n }\n\n private togglePanel(): void {\n if (this.overlayService.isOpen()) {\n this.closePanel();\n } else {\n this.openPanel();\n }\n }\n\n private openPanel(): void {\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 inputType = activeInputElement?.type;\n return inputType && [SystelabVirtualKeyboardInputTypes.text, SystelabVirtualKeyboardInputTypes.password].some((i) => i === inputType);\n }\n\n private isInputNumeric(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputType = activeInputElement?.type;\n return inputType && [SystelabVirtualKeyboardInputTypes.number].some((i) => i === inputType);\n }\n\n private closePanel(): void {\n this.overlayService.destroy();\n }\n\n private inputOrigin(): any {\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}\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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"}
@@ -17,9 +17,9 @@ export declare enum SystelabVirtualKeyboardInputMethods {
17
17
  onlyMouseEvents = "onlyMouseEvents",
18
18
  onlyTouchEvents = "onlyTouchEvents"
19
19
  }
20
- export declare enum SystelabVirtualKeyboardInputTypes {
20
+ export declare enum SystelabVirtualKeyboardInputModes {
21
21
  text = "text",
22
- number = "number",
22
+ numeric = "numeric",
23
23
  password = "password"
24
24
  }
25
25
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../projects/systelab-virtual-keyboard/src/lib/constants.ts"],"names":[],"mappings":"AASA,oBAAY,6BAA6B;IACvC,IAAI,WAAW;IACf,KAAK,YAAY;IACjB,KAAK,YAAY;IACjB,IAAI,WAAW;IACf,SAAS,WAAW;IACpB,QAAQ,eAAe;IACvB,KAAK,YAAY;IACjB,GAAG,UAAU;CACd;AAED,oBAAY,8BAA8B;IACxC,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,mCAAmC;IAC7C,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;CACpC;AAED,oBAAY,iCAAiC;IAC3C,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../projects/systelab-virtual-keyboard/src/lib/constants.ts"],"names":[],"mappings":"AASA,oBAAY,6BAA6B;IACrC,IAAI,WAAW;IACf,KAAK,YAAY;IACjB,KAAK,YAAY;IACjB,IAAI,WAAW;IACf,SAAS,WAAW;IACpB,QAAQ,eAAe;IACvB,KAAK,YAAY;IACjB,GAAG,UAAU;CAChB;AAED,oBAAY,8BAA8B;IACtC,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;CACtB;AAED,oBAAY,mCAAmC;IAC3C,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;CACtC;AAED,oBAAY,iCAAiC;IACzC,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,QAAQ,aAAa;CACxB"}
@@ -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;IASpC,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,CACX,WAAW,EAAE,gBAAgB,EAC7B,yBAAyB,EAAE,WAAW,EACtC,WAAW,EAAE,OAAO,EACpB,MAAM,GAAE,8BAAuE,GAC9E,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;yCA3KlB,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;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"}
@@ -17,25 +17,25 @@ export declare class SystelabVirtualKeyboardComponent implements AfterViewInit {
17
17
  private caretPosition;
18
18
  private caretPositionEnd;
19
19
  private activeInputElement;
20
+ private shiftPressed;
20
21
  closePanel: EventEmitter<void>;
21
22
  constructor(elementRef: ElementRef<HTMLInputElement>, virtualKeyboardConfig: SystelabVirtualKeyboardConfig);
22
23
  ngAfterViewInit(): void;
23
24
  setActiveInput(input: HTMLInputElement | HTMLTextAreaElement): void;
24
25
  setLayout(layout: SystelabVirtualKeyboardLayouts): void;
25
26
  private prepareKeyboardConfig;
26
- private isInputAlphabetic;
27
- private isInputNumeric;
28
27
  private handleKeyPress;
29
28
  private handleButtonOutput;
30
29
  private getCommonParams;
31
30
  private isAcceptedNonStandardButton;
32
31
  private dispatchEvents;
33
32
  private convertFromButtonToCode;
34
- private toggleShift;
33
+ private toggleShiftLayout;
35
34
  private isStandardButton;
36
35
  private removeAt;
37
36
  private addStringAt;
38
37
  private caretEventHandler;
38
+ private focusActiveInput;
39
39
  private updateCaretPosition;
40
40
  private computeNewCaretPosition;
41
41
  private setCaretPosition;
@@ -1 +1 @@
1
- {"version":3,"file":"systelab-virtual-keyboard.component.d.ts","sourceRoot":"","sources":["../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,UAAU,EACV,YAAY,EAKb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAIL,8BAA8B,EAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,6BAA6B,EAA2B,MAAM,oCAAoC,CAAC;;AAG5G,qBAOa,gCAAiC,YAAW,aAAa;IAwCxD,OAAO,CAAC,UAAU;IAA6E,OAAO,CAAC,qBAAqB;IAtCxI,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAOvC,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKxC,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKhC,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIzC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAEM,KAAK,UAAS;IACrB,OAAO,CAAC,cAAc,CAA0E;IAChG,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,kBAAkB,CAAiD;IAEjE,UAAU,qBAA4B;gBAE5B,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,EAAuD,qBAAqB,EAAE,6BAA6B;IAEvK,eAAe;IA2BR,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,IAAI;IAyBnE,SAAS,CAAC,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAS9D,OAAO,CAAC,qBAAqB;IAoD7B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,QAAQ;IA6BhB,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,iBAAiB;IAqCzB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,gBAAgB;yCArZb,gCAAgC;2CAAhC,gCAAgC;CAyZ5C"}
1
+ {"version":3,"file":"systelab-virtual-keyboard.component.d.ts","sourceRoot":"","sources":["../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EAEb,UAAU,EACV,YAAY,EAKf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAGH,8BAA8B,EACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,6BAA6B,EAA2B,MAAM,oCAAoC,CAAC;;AAG5G,qBAOa,gCAAiC,YAAW,aAAa;IA0CtD,OAAO,CAAC,UAAU;IAA6E,OAAO,CAAC,qBAAqB;IAxCxI,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAQvC,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKxC,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKhC,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIzC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAEM,KAAK,UAAS;IACrB,OAAO,CAAC,cAAc,CAA0E;IAChG,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,kBAAkB,CAAiD;IAC3E,OAAO,CAAC,YAAY,CAAkB;IAE5B,UAAU,qBAA4B;gBAE5B,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,EAAuD,qBAAqB,EAAE,6BAA6B;IAGvK,eAAe;IA2BR,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,IAAI;IAiBnE,SAAS,CAAC,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAS9D,OAAO,CAAC,qBAAqB;IAoD7B,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,QAAQ;IA6BhB,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,iBAAiB;IAqCzB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,gBAAgB;yCAnZf,gCAAgC;2CAAhC,gCAAgC;CAuZ5C"}