systelab-virtual-keyboard 20.2.2 → 20.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
@@ -37,13 +37,14 @@ The default behaviour can be changed through some attributes:
37
37
 
38
38
  The configuration params are describe into the interface [Config](src/lib/systelab-virtual-keyboard.public.ts)
39
39
 
40
- | Name | Type | Default | Description |
41
- |-----------|:----:|:-------:| ----------- |
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
- | inputMethod | SystelabVirtualKeyboardInputMethods | | The method detected for the keyboard to click or touch the keys
44
- | showButton | boolean | false | Show or hide the button for showing the keyboard
45
- | showOnMouseClick | boolean | false | Shows virtual keyboard upon mouse click on input field
46
- | numericCloseOnEnter | boolean | false | Close virtual keyboard on numeric layouts upon a *enter* action
40
+ | Name | Type | Default | Description |
41
+ |-----------|:-----------------------------------:|:-------:| ----------- |
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
+ | inputMethod | SystelabVirtualKeyboardInputMethods | | The method detected for the keyboard to click or touch the keys
44
+ | showButton | boolean | false | Show or hide the button for showing the keyboard
45
+ | showOnMouseClick | boolean | false | Shows virtual keyboard upon mouse click on input field
46
+ | numericCloseOnEnter | boolean | false | Close virtual keyboard on numeric layouts upon a *enter* action
47
+ | actionText | string | null | Set the text for the action button ( enter one )
47
48
 
48
49
  ### Styling variables
49
50
 
@@ -53,5 +54,7 @@ The configuration params are describe into the interface [Config](src/lib/systel
53
54
  | --systelab-virtual-keyboard-background-color | #B2B2B2 | Background of the keyboard
54
55
  | --systelab-virtual-keyboard-button-color | #E5E5E5 | Normal button background color
55
56
  | --systelab-virtual-keyboard-button-font-color | #000000 | Normal button font color
57
+ | --systelab-virtual-keyboard-action-button-color | #06038D | Action button background color
58
+ | --systelab-virtual-keyboard-action-button-font-color | #FFFFFF | Action button font color
56
59
  | --systelab-virtual-keyboard-active-special-button-color | #4D4D4D | Special buttons activation background color
57
60
  | --systelab-virtual-keyboard-active-special-button-font-color | #FFFFFF | Special buttons activation font color
@@ -30,6 +30,17 @@ var SystelabVirtualKeyboard;
30
30
  Layouts["Numeric"] = "numeric";
31
31
  Layouts["NumericShift"] = "numeric-shift";
32
32
  })(Layouts = SystelabVirtualKeyboard.Layouts || (SystelabVirtualKeyboard.Layouts = {}));
33
+ let Buttons;
34
+ (function (Buttons) {
35
+ Buttons["Done"] = "{done}";
36
+ Buttons["Enter"] = "{enter}";
37
+ Buttons["Shift"] = "{shift}";
38
+ Buttons["Lock"] = "{lock}";
39
+ Buttons["Backspace"] = "{bksp}";
40
+ Buttons["Language"] = "{language}";
41
+ Buttons["Space"] = "{space}";
42
+ Buttons["Tab"] = "{tab}";
43
+ })(Buttons = SystelabVirtualKeyboard.Buttons || (SystelabVirtualKeyboard.Buttons = {}));
33
44
  })(SystelabVirtualKeyboard || (SystelabVirtualKeyboard = {}));
34
45
 
35
46
  /*
@@ -82,17 +93,6 @@ var SystelabVirtualKeyboardConstants;
82
93
  [SystelabVirtualKeyboard.Layouts.Numeric]: ['7 8 9 {bksp}', '4 5 6 +', '1 2 3 -', '{shift} 0 . {enter}'],
83
94
  [SystelabVirtualKeyboard.Layouts.NumericShift]: ['! @ # {bksp}', '$ % _ =', '& * ( -', '{shift} ) . {enter}'],
84
95
  };
85
- let Button;
86
- (function (Button) {
87
- Button["Done"] = "{done}";
88
- Button["Enter"] = "{enter}";
89
- Button["Shift"] = "{shift}";
90
- Button["Lock"] = "{lock}";
91
- Button["Backspace"] = "{bksp}";
92
- Button["Language"] = "{language}";
93
- Button["Space"] = "{space}";
94
- Button["Tab"] = "{tab}";
95
- })(Button = SystelabVirtualKeyboardConstants.Button || (SystelabVirtualKeyboardConstants.Button = {}));
96
96
  let InputModes;
97
97
  (function (InputModes) {
98
98
  InputModes["text"] = "text";
@@ -127,6 +127,7 @@ class SystelabVirtualKeyboardComponent {
127
127
  this.specialKeysAlwaysUppercase = false;
128
128
  this.capsLockOn = false;
129
129
  this.closePanel = new EventEmitter();
130
+ this.keyPressed = new EventEmitter();
130
131
  }
131
132
  ngAfterViewInit() {
132
133
  const keyboardOptions = this.prepareKeyboardConfig();
@@ -165,9 +166,9 @@ class SystelabVirtualKeyboardComponent {
165
166
  mergeDisplay: true,
166
167
  theme: 'hg-theme-default hg-layout-default systelab-virtual-keyboard-theme',
167
168
  display: {
168
- [SystelabVirtualKeyboardConstants.Button.Backspace]: 'back',
169
- [SystelabVirtualKeyboardConstants.Button.Enter]: 'enter',
170
- [SystelabVirtualKeyboardConstants.Button.Lock]: 'lock',
169
+ [SystelabVirtualKeyboard.Buttons.Backspace]: 'back',
170
+ [SystelabVirtualKeyboard.Buttons.Enter]: this.config?.actionText ?? 'enter',
171
+ [SystelabVirtualKeyboard.Buttons.Lock]: 'lock',
171
172
  },
172
173
  buttonTheme: this.buildButtonThemes(),
173
174
  layout: SystelabVirtualKeyboardConstants.LayoutDefinitions,
@@ -192,20 +193,20 @@ class SystelabVirtualKeyboardComponent {
192
193
  return [
193
194
  {
194
195
  class: 'virtual-keyboard-delete-button',
195
- buttons: `${SystelabVirtualKeyboardConstants.Button.Backspace}`,
196
+ buttons: `${SystelabVirtualKeyboard.Buttons.Backspace}`,
196
197
  },
197
198
  {
198
- class: 'virtual-keyboard-enter-button',
199
- buttons: `${SystelabVirtualKeyboardConstants.Button.Enter}`,
199
+ class: this.config?.actionText ? 'virtual-keyboard-enter-button virtual-keyboard-enter-button--action' : 'virtual-keyboard-enter-button',
200
+ buttons: `${SystelabVirtualKeyboard.Buttons.Enter}`,
200
201
  },
201
202
  {
202
203
  class: 'virtual-keyboard-function-button',
203
- buttons: `${SystelabVirtualKeyboardConstants.Button.Shift} ${SystelabVirtualKeyboardConstants.Button.Lock}`,
204
+ buttons: `${SystelabVirtualKeyboard.Buttons.Shift} ${SystelabVirtualKeyboard.Buttons.Lock}`,
204
205
  }
205
206
  ];
206
207
  }
207
208
  setButtonClasses() {
208
- this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-button');
209
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-shift-button');
209
210
  }
210
211
  handleKeyPress(button, e) {
211
212
  if (this.debug) {
@@ -214,39 +215,32 @@ class SystelabVirtualKeyboardComponent {
214
215
  if (button.startsWith('&') && button.length > 1) {
215
216
  button = new DOMParser().parseFromString(button, 'text/html').body.textContent;
216
217
  }
217
- if (button === SystelabVirtualKeyboardConstants.Button.Shift) {
218
+ this.keyPressed.emit(button);
219
+ if (button === SystelabVirtualKeyboard.Buttons.Shift) {
218
220
  this.shiftPressed = !this.shiftPressed;
219
221
  this.toggleShiftLayout();
220
222
  if (this.shiftPressed) {
221
- this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');
223
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-shift-active');
222
224
  this.addUppercaseClass();
223
225
  }
224
226
  else {
225
- this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');
227
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-shift-active');
226
228
  this.removeUppercaseClass();
227
229
  }
228
230
  }
229
- else if (button === SystelabVirtualKeyboardConstants.Button.Lock) {
231
+ else if (button === SystelabVirtualKeyboard.Buttons.Lock) {
230
232
  this.capsLockOn = !this.capsLockOn;
231
233
  this.toggleShiftLayout();
232
234
  if (this.capsLockOn) {
233
- this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-lock-active');
235
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Lock, 'virtual-keyboard-lock-active');
234
236
  this.addUppercaseClass();
235
237
  }
236
238
  else {
237
- this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-lock-active');
239
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Lock, 'virtual-keyboard-lock-active');
238
240
  this.removeUppercaseClass();
239
241
  }
240
242
  }
241
- else if (button === SystelabVirtualKeyboardConstants.Button.Done) {
242
- this.closePanel.emit();
243
- e?.stopPropagation();
244
- e?.preventDefault();
245
- return;
246
- }
247
- else if (this.virtualKeyboardConfig.numericCloseOnEnter &&
248
- button === SystelabVirtualKeyboardConstants.Button.Enter &&
249
- (this.selectedLayout === SystelabVirtualKeyboard.Layouts.Numeric || this.selectedLayout === SystelabVirtualKeyboard.Layouts.NumericShift)) {
243
+ else if (button === SystelabVirtualKeyboard.Buttons.Done) {
250
244
  this.closePanel.emit();
251
245
  e?.stopPropagation();
252
246
  e?.preventDefault();
@@ -268,39 +262,39 @@ class SystelabVirtualKeyboardComponent {
268
262
  this.removeUppercaseClass();
269
263
  }
270
264
  this.shiftPressed = false;
271
- this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');
265
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-shift-active');
272
266
  }
273
267
  addUppercaseClass() {
274
- this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-uppercase');
275
- this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-uppercase');
276
- this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Tab, 'virtual-keyboard-uppercase');
277
- this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Backspace, 'virtual-keyboard-uppercase');
278
- this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Enter, 'virtual-keyboard-uppercase');
268
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-uppercase');
269
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Lock, 'virtual-keyboard-uppercase');
270
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Tab, 'virtual-keyboard-uppercase');
271
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Backspace, 'virtual-keyboard-uppercase');
272
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Enter, 'virtual-keyboard-uppercase');
279
273
  }
280
274
  removeUppercaseClass() {
281
275
  if (this.specialKeysAlwaysUppercase) {
282
276
  return;
283
277
  }
284
- this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-uppercase');
285
- this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-uppercase');
286
- this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Tab, 'virtual-keyboard-uppercase');
287
- this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Backspace, 'virtual-keyboard-uppercase');
288
- this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Enter, 'virtual-keyboard-uppercase');
278
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-uppercase');
279
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Lock, 'virtual-keyboard-uppercase');
280
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Tab, 'virtual-keyboard-uppercase');
281
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Backspace, 'virtual-keyboard-uppercase');
282
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Enter, 'virtual-keyboard-uppercase');
289
283
  }
290
284
  handleButtonOutput(button) {
291
285
  const commonParams = this.getCommonParams();
292
286
  let output = this.activeInputElement?.value || '';
293
287
  if (!this.isStandardButton(button)) {
294
- if (button === SystelabVirtualKeyboardConstants.Button.Backspace) {
288
+ if (button === SystelabVirtualKeyboard.Buttons.Backspace) {
295
289
  output = this.removeAt(output, ...commonParams);
296
290
  }
297
- else if (button === SystelabVirtualKeyboardConstants.Button.Space) {
291
+ else if (button === SystelabVirtualKeyboard.Buttons.Space) {
298
292
  output = this.addStringAt(output, ' ', ...commonParams);
299
293
  }
300
- else if (button === SystelabVirtualKeyboardConstants.Button.Tab) {
294
+ else if (button === SystelabVirtualKeyboard.Buttons.Tab) {
301
295
  // Do nothing for tab
302
296
  }
303
- else if (button === SystelabVirtualKeyboardConstants.Button.Enter) {
297
+ else if (button === SystelabVirtualKeyboard.Buttons.Enter) {
304
298
  if (this.isTextarea) {
305
299
  output = this.addStringAt(output, '\n', ...commonParams);
306
300
  }
@@ -319,10 +313,10 @@ class SystelabVirtualKeyboardComponent {
319
313
  }
320
314
  isAcceptedNonStandardButton(button) {
321
315
  return [
322
- SystelabVirtualKeyboardConstants.Button.Backspace.toString(),
323
- SystelabVirtualKeyboardConstants.Button.Space.toString(),
324
- SystelabVirtualKeyboardConstants.Button.Tab.toString(),
325
- SystelabVirtualKeyboardConstants.Button.Enter.toString(),
316
+ SystelabVirtualKeyboard.Buttons.Backspace.toString(),
317
+ SystelabVirtualKeyboard.Buttons.Space.toString(),
318
+ SystelabVirtualKeyboard.Buttons.Tab.toString(),
319
+ SystelabVirtualKeyboard.Buttons.Enter.toString(),
326
320
  ].includes(button);
327
321
  }
328
322
  dispatchEvents(button) {
@@ -353,7 +347,7 @@ class SystelabVirtualKeyboardComponent {
353
347
  key = key.charAt(0).toUpperCase() + key.slice(1);
354
348
  code = key;
355
349
  // Fix to standard key code
356
- if (code.toLowerCase() === SystelabVirtualKeyboardConstants.Button.Backspace.slice(1, SystelabVirtualKeyboardConstants.Button.Backspace.length - 1).toLowerCase()) {
350
+ if (code.toLowerCase() === SystelabVirtualKeyboard.Buttons.Backspace.slice(1, SystelabVirtualKeyboard.Buttons.Backspace.length - 1).toLowerCase()) {
357
351
  code = 'Backspace';
358
352
  }
359
353
  }
@@ -500,7 +494,7 @@ class SystelabVirtualKeyboardComponent {
500
494
  this.caretPositionEnd = endPosition;
501
495
  }
502
496
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardComponent, deps: [{ token: i0.ElementRef }, { token: SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
503
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.3", 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)" } }, 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" }); }
497
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.3", type: SystelabVirtualKeyboardComponent, isStandalone: true, selector: "systelab-virtual-keyboard.component", outputs: { closePanel: "closePanel", keyPressed: "keyPressed" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:pointerup": "handleMouseUp($event)", "window:mouseup": "handleMouseUp($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" }); }
504
498
  }
505
499
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardComponent, decorators: [{
506
500
  type: Component,
@@ -521,6 +515,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
521
515
  args: ['window:mouseup', ['$event']]
522
516
  }], closePanel: [{
523
517
  type: Output
518
+ }], keyPressed: [{
519
+ type: Output
524
520
  }] } });
525
521
 
526
522
  class SystelabVirtualKeyboardOverlayService {
@@ -528,7 +524,8 @@ class SystelabVirtualKeyboardOverlayService {
528
524
  this.overlay = overlay;
529
525
  this.clickAlreadyHandled = false;
530
526
  this.touchEndAlreadyHandled = false;
531
- this.initListener();
527
+ this.boundHandleClick = this.handleClick.bind(this);
528
+ this.boundHandleTouchEnd = this.handleTouchEnd.bind(this);
532
529
  }
533
530
  isCreated() {
534
531
  return !!this.overlayRef;
@@ -554,6 +551,7 @@ class SystelabVirtualKeyboardOverlayService {
554
551
  this.updatePositionStrategy(inputOrigin, fixedBottom);
555
552
  this.updateSize();
556
553
  this.open = true;
554
+ this.addListeners();
557
555
  return this.overlayRef.attach(new ComponentPortal(SystelabVirtualKeyboardComponent));
558
556
  }
559
557
  updatePosition() {
@@ -566,15 +564,20 @@ class SystelabVirtualKeyboardOverlayService {
566
564
  this.touchEndAlreadyHandled = true;
567
565
  }
568
566
  destroy() {
567
+ this.removeListeners();
569
568
  if (this.overlayRef) {
570
569
  this.overlayRef.dispose();
571
570
  }
572
571
  this.overlayRef = null;
573
572
  this.open = false;
574
573
  }
575
- initListener() {
576
- document.addEventListener('click', this.handleClick.bind(this), true);
577
- document.addEventListener('touchend', this.handleTouchEnd.bind(this), true);
574
+ addListeners() {
575
+ document.addEventListener('click', this.boundHandleClick, true);
576
+ document.addEventListener('touchend', this.boundHandleTouchEnd, true);
577
+ }
578
+ removeListeners() {
579
+ document.removeEventListener('click', this.boundHandleClick, true);
580
+ document.removeEventListener('touchend', this.boundHandleTouchEnd, true);
578
581
  }
579
582
  handleClick(event) {
580
583
  if (this.clickAlreadyHandled) {
@@ -768,6 +771,7 @@ class SystelabVirtualKeyboardDirective {
768
771
  this.enabled = false;
769
772
  this.fixedBottom = false;
770
773
  this.debug = false;
774
+ this.vkOnKeyPress = new EventEmitter();
771
775
  this.config = this.virtualKeyboardConfig;
772
776
  }
773
777
  ngOnInit() {
@@ -788,6 +792,9 @@ class SystelabVirtualKeyboardDirective {
788
792
  }
789
793
  this.overlayService.destroy();
790
794
  }
795
+ close() {
796
+ this.closePanel();
797
+ }
791
798
  togglePanel() {
792
799
  if (!this.vkEnabled) {
793
800
  return;
@@ -814,7 +821,9 @@ class SystelabVirtualKeyboardDirective {
814
821
  this.panelRef.instance.debug = this.vkDebug;
815
822
  this.panelRef.instance.setActiveInput(this.elementRef.nativeElement);
816
823
  this.panelRef.instance.setLayout(currentLayout);
824
+ this.panelRef.instance.config = this.config;
817
825
  this.panelRef.instance.closePanel.subscribe(() => this.closePanel());
826
+ this.panelRef.instance.keyPressed.subscribe((key) => this.vkOnKeyPress.emit(key));
818
827
  }
819
828
  getLayout(activeInputElement) {
820
829
  if (this.config?.hasOwnProperty('layout')) {
@@ -858,7 +867,7 @@ class SystelabVirtualKeyboardDirective {
858
867
  }
859
868
  }
860
869
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardDirective, deps: [{ token: i0.ElementRef }, { token: SystelabVirtualKeyboardOverlayService }, { token: i0.Renderer2 }, { token: DOCUMENT }, { token: SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
861
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.3", type: SystelabVirtualKeyboardDirective, isStandalone: false, 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 }); }
870
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.3", type: SystelabVirtualKeyboardDirective, isStandalone: false, selector: "input[vkEnabled], textarea[vkEnabled]", inputs: { vkEnabled: "vkEnabled", vkFixedBottom: "vkFixedBottom", vkDebug: "vkDebug", vkConfig: "vkConfig" }, outputs: { vkOnKeyPress: "vkOnKeyPress" }, 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 }); }
862
871
  }
863
872
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardDirective, decorators: [{
864
873
  type: Directive,
@@ -900,6 +909,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
900
909
  type: Input
901
910
  }], vkConfig: [{
902
911
  type: Input
912
+ }], vkOnKeyPress: [{
913
+ type: Output
903
914
  }] } });
904
915
 
905
916
  const factory = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"systelab-virtual-keyboard.mjs","sources":["../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.public.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.constants.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 namespace SystelabVirtualKeyboard {\n\n export interface Config {\n layout?: SystelabVirtualKeyboard.Layouts;\n inputMethod?: SystelabVirtualKeyboard.InputMethods;\n showIcon?: boolean;\n showOnMouseClick?: boolean;\n numericCloseOnEnter?: boolean;\n }\n\n export enum InputMethods {\n onlyMouseEvents = 'onlyMouseEvents',\n onlyTouchEvents = 'onlyTouchEvents',\n }\n\n export enum Layouts {\n AlphaNumeric = 'alpha-numeric',\n AlphaNumericShift = 'alpha-numeric-shift',\n AlphaNumericUppercase = 'alpha-numeric-uppercase',\n AlphaNumericUppercaseShift = 'alpha-numeric-uppercase-shift',\n Numeric = 'numeric',\n NumericShift = 'numeric-shift',\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 { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\nimport { InjectionToken } from '@angular/core';\n\nexport namespace SystelabVirtualKeyboardConstants {\n\n export const VIRTUAL_KEYBOARD_CONFIG = new InjectionToken<SystelabVirtualKeyboard.Config>('VIRTUAL_KEYBOARD_CONFIG');\n\n export const LayoutDefinitions = {\n '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 [SystelabVirtualKeyboard.Layouts.AlphaNumeric]: [\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 [SystelabVirtualKeyboard.Layouts.AlphaNumericShift]: [\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 , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase]: [\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 [SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift]: [\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 , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboard.Layouts.Numeric]: ['7 8 9 {bksp}', '4 5 6 +', '1 2 3 -', '{shift} 0 . {enter}'],\n [SystelabVirtualKeyboard.Layouts.NumericShift]: ['! @ # {bksp}', '$ % _ =', '& * ( -', '{shift} ) . {enter}'],\n };\n\n export enum Button {\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\n export enum InputModes {\n text = 'text',\n numeric = 'numeric',\n password = 'password',\n }\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 { SystelabVirtualKeyboardConstants } from './systelab-virtual-keyboard.constants';\nimport { KeyboardOptions } from 'simple-keyboard/build/interfaces';\nimport { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\n\n@Component({\n selector: 'systelab-virtual-keyboard.component',\n standalone: true,\n imports: [],\n templateUrl: './systelab-virtual-keyboard.component.html',\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 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: SystelabVirtualKeyboard.Layouts | 'default' = '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 private shiftPressed = false;\n private specialKeysAlwaysUppercase = false;\n private capsLockOn = false;\n\n @Output() closePanel = new EventEmitter<void>();\n\n constructor(\n private readonly elementRef: ElementRef<HTMLInputElement>,\n @Optional() @Inject(SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG) private readonly virtualKeyboardConfig: SystelabVirtualKeyboard.Config) {}\n\n ngAfterViewInit() {\n const keyboardOptions: KeyboardOptions = this.prepareKeyboardConfig();\n this.keyboard = new SimpleKeyboard('.simple-keyboard', keyboardOptions);\n this.setButtonClasses();\n this.setLayout(this.selectedLayout);\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: SystelabVirtualKeyboard.Layouts | 'default'): void {\n this.selectedLayout = layout;\n if (this.keyboard) {\n this.keyboard.setOptions({\n layoutName: layout,\n });\n\n if (layout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase || layout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift) {\n this.specialKeysAlwaysUppercase = true;\n this.addUppercaseClass();\n }\n }\n }\n\n private prepareKeyboardConfig(): KeyboardOptions {\n let keyboardOptions: KeyboardOptions = {\n onKeyPress: (button) => this.handleKeyPress(button),\n mergeDisplay: true,\n theme: 'hg-theme-default hg-layout-default systelab-virtual-keyboard-theme',\n display: {\n [SystelabVirtualKeyboardConstants.Button.Backspace]: 'back',\n [SystelabVirtualKeyboardConstants.Button.Enter]: 'enter',\n [SystelabVirtualKeyboardConstants.Button.Lock]: 'lock',\n },\n buttonTheme: this.buildButtonThemes(),\n layout: SystelabVirtualKeyboardConstants.LayoutDefinitions,\n };\n\n if (this.virtualKeyboardConfig?.hasOwnProperty('inputMethod')) {\n if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboard.InputMethods.onlyMouseEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useMouseEvents: true,\n }\n } else if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboard.InputMethods.onlyTouchEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useTouchEvents: true,\n }\n }\n }\n\n return keyboardOptions;\n }\n\n private buildButtonThemes(): { class: string; buttons: string }[] {\n return [\n {\n class: 'virtual-keyboard-delete-button',\n buttons: `${SystelabVirtualKeyboardConstants.Button.Backspace}`,\n },\n {\n class: 'virtual-keyboard-enter-button',\n buttons: `${SystelabVirtualKeyboardConstants.Button.Enter}`,\n },\n {\n class: 'virtual-keyboard-function-button',\n buttons: `${SystelabVirtualKeyboardConstants.Button.Shift} ${SystelabVirtualKeyboardConstants.Button.Lock}`,\n }\n ]\n }\n\n private setButtonClasses(): void {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-button');\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.startsWith('&') && button.length > 1) {\n button = new DOMParser().parseFromString(button, 'text/html').body.textContent;\n }\n\n if (button === SystelabVirtualKeyboardConstants.Button.Shift ) {\n this.shiftPressed = !this.shiftPressed;\n this.toggleShiftLayout();\n if (this.shiftPressed) {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');\n this.addUppercaseClass();\n } else {\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');\n this.removeUppercaseClass();\n }\n } else if (button === SystelabVirtualKeyboardConstants.Button.Lock) {\n this.capsLockOn = !this.capsLockOn;\n this.toggleShiftLayout();\n if (this.capsLockOn) {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-lock-active');\n this.addUppercaseClass();\n } else {\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-lock-active');\n this.removeUppercaseClass();\n }\n } else if (button === SystelabVirtualKeyboardConstants.Button.Done) {\n this.closePanel.emit();\n e?.stopPropagation();\n e?.preventDefault();\n return;\n } else if (\n this.virtualKeyboardConfig.numericCloseOnEnter &&\n button === SystelabVirtualKeyboardConstants.Button.Enter &&\n (this.selectedLayout === SystelabVirtualKeyboard.Layouts.Numeric || this.selectedLayout === SystelabVirtualKeyboard.Layouts.NumericShift)) {\n this.closePanel.emit();\n e?.stopPropagation();\n e?.preventDefault();\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 this.removeUppercaseClass();\n }\n this.shiftPressed = false;\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');\n }\n\n private addUppercaseClass(): void {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Tab, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Backspace, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Enter, 'virtual-keyboard-uppercase');\n }\n\n private removeUppercaseClass(): void {\n if (this.specialKeysAlwaysUppercase) {\n return;\n }\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Tab, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Backspace, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Enter, 'virtual-keyboard-uppercase');\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 === SystelabVirtualKeyboardConstants.Button.Backspace) {\n output = this.removeAt(output, ...commonParams);\n } else if (button === SystelabVirtualKeyboardConstants.Button.Space) {\n output = this.addStringAt(output, ' ', ...commonParams);\n } else if (button === SystelabVirtualKeyboardConstants.Button.Tab) {\n // Do nothing for tab\n } else if (button === SystelabVirtualKeyboardConstants.Button.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 SystelabVirtualKeyboardConstants.Button.Backspace.toString(),\n SystelabVirtualKeyboardConstants.Button.Space.toString(),\n SystelabVirtualKeyboardConstants.Button.Tab.toString(),\n SystelabVirtualKeyboardConstants.Button.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 === SystelabVirtualKeyboard.Layouts.AlphaNumericShift,\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() === SystelabVirtualKeyboardConstants.Button.Backspace.slice(1, SystelabVirtualKeyboardConstants.Button.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 let selectedLayout: SystelabVirtualKeyboard.Layouts;\n\n switch (currentLayout) {\n case SystelabVirtualKeyboard.Layouts.AlphaNumeric:\n case SystelabVirtualKeyboard.Layouts.AlphaNumericShift:\n selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.AlphaNumeric ? SystelabVirtualKeyboard.Layouts.AlphaNumericShift : SystelabVirtualKeyboard.Layouts.AlphaNumeric;\n break;\n\n case SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase:\n case SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift:\n selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase ? SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift : SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase;\n break;\n\n case SystelabVirtualKeyboard.Layouts.Numeric:\n case SystelabVirtualKeyboard.Layouts.NumericShift:\n selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.Numeric ? SystelabVirtualKeyboard.Layouts.NumericShift : SystelabVirtualKeyboard.Layouts.Numeric;\n break;\n default:\n }\n\n if (selectedLayout) {\n this.setLayout(selectedLayout);\n }\n }\n\n private isStandardButton(button: string) {\n return button && !(button.startsWith('{') && button.endsWith('}'));\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?.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 { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\nimport { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\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: SystelabVirtualKeyboard.Layouts | 'default';\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: SystelabVirtualKeyboard.Layouts | 'default' = '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), true);\n document.addEventListener('touchend', this.handleTouchEnd.bind(this), true);\n }\n\n private handleClick(event: MouseEvent) {\n if (this.clickAlreadyHandled) {\n this.clickAlreadyHandled = false;\n return;\n }\n\n this.handleEventTarget(event.target, event);\n }\n\n private handleTouchEnd(event: TouchEvent) {\n if (this.touchEndAlreadyHandled) {\n this.touchEndAlreadyHandled = false;\n return;\n }\n\n this.handleEventTarget(event.target, event);\n }\n\n private handleEventTarget(target: EventTarget, event?: Event) {\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 event?.stopPropagation();\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 === SystelabVirtualKeyboard.Layouts.Numeric ? '331px' : '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 DOCUMENT,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2\n} from '@angular/core';\n\n\nimport { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\nimport { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\nimport { SystelabVirtualKeyboardConstants } from './systelab-virtual-keyboard.constants';\nimport { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\n\n@Directive({\n selector: 'input[vkEnabled], textarea[vkEnabled]',\n standalone: false,\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: SystelabVirtualKeyboard.Config;\n\n @Input()\n get vkConfig(): SystelabVirtualKeyboard.Config {\n return this.config;\n }\n\n set vkConfig(config: SystelabVirtualKeyboard.Config) {\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(SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG) private readonly virtualKeyboardConfig: SystelabVirtualKeyboard.Config,\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): SystelabVirtualKeyboard.Layouts {\n if (this.config?.hasOwnProperty('layout')) {\n return this.config.layout;\n }\n if (this.isInputAlphabetic(activeInputElement)) {\n return SystelabVirtualKeyboard.Layouts.AlphaNumeric;\n } else if (this.isInputNumeric(activeInputElement)) {\n return SystelabVirtualKeyboard.Layouts.Numeric;\n } else {\n return SystelabVirtualKeyboard.Layouts.AlphaNumeric;\n }\n }\n\n private isInputAlphabetic(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardConstants.InputModes.text, SystelabVirtualKeyboardConstants.InputModes.password].some((i) => i === inputMode);\n }\n\n private isInputNumeric(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardConstants.InputModes.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 { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\nimport { SystelabVirtualKeyboard } from '../public-api';\nimport { SystelabVirtualKeyboardConstants } from './systelab-virtual-keyboard.constants';\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?: SystelabVirtualKeyboard.Config): ModuleWithProviders<SystelabVirtualKeyboardModule> {\n return {\n ngModule: SystelabVirtualKeyboardModule,\n providers: [\n SystelabVirtualKeyboardOverlayService,\n {\n provide: SystelabVirtualKeyboardConstants.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 { SystelabVirtualKeyboard } from './lib/systelab-virtual-keyboard.public';\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/systelab-virtual-keyboard.public.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.constants.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 namespace SystelabVirtualKeyboard {\n\n export interface Config {\n layout?: SystelabVirtualKeyboard.Layouts;\n inputMethod?: SystelabVirtualKeyboard.InputMethods;\n showIcon?: boolean;\n showOnMouseClick?: boolean;\n numericCloseOnEnter?: boolean;\n actionText?: string;\n }\n\n export enum InputMethods {\n onlyMouseEvents = 'onlyMouseEvents',\n onlyTouchEvents = 'onlyTouchEvents',\n }\n\n export enum Layouts {\n AlphaNumeric = 'alpha-numeric',\n AlphaNumericShift = 'alpha-numeric-shift',\n AlphaNumericUppercase = 'alpha-numeric-uppercase',\n AlphaNumericUppercaseShift = 'alpha-numeric-uppercase-shift',\n Numeric = 'numeric',\n NumericShift = 'numeric-shift',\n }\n\n export enum Buttons {\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}\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 { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\nimport { InjectionToken } from '@angular/core';\n\nexport namespace SystelabVirtualKeyboardConstants {\n\n export const VIRTUAL_KEYBOARD_CONFIG = new InjectionToken<SystelabVirtualKeyboard.Config>('VIRTUAL_KEYBOARD_CONFIG');\n\n export const LayoutDefinitions = {\n '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 [SystelabVirtualKeyboard.Layouts.AlphaNumeric]: [\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 [SystelabVirtualKeyboard.Layouts.AlphaNumericShift]: [\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 , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase]: [\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 [SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift]: [\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 , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboard.Layouts.Numeric]: ['7 8 9 {bksp}', '4 5 6 +', '1 2 3 -', '{shift} 0 . {enter}'],\n [SystelabVirtualKeyboard.Layouts.NumericShift]: ['! @ # {bksp}', '$ % _ =', '& * ( -', '{shift} ) . {enter}'],\n };\n\n export enum InputModes {\n text = 'text',\n numeric = 'numeric',\n password = 'password',\n }\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 { SystelabVirtualKeyboardConstants } from './systelab-virtual-keyboard.constants';\nimport { KeyboardOptions } from 'simple-keyboard/build/interfaces';\nimport { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\n\n@Component({\n selector: 'systelab-virtual-keyboard.component',\n standalone: true,\n imports: [],\n templateUrl: './systelab-virtual-keyboard.component.html',\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 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 public config: SystelabVirtualKeyboard.Config;\n private selectedLayout: SystelabVirtualKeyboard.Layouts | 'default' = '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 private shiftPressed = false;\n private specialKeysAlwaysUppercase = false;\n private capsLockOn = false;\n\n @Output() closePanel = new EventEmitter<void>();\n @Output() keyPressed = new EventEmitter<string>();\n\n constructor(\n private readonly elementRef: ElementRef<HTMLInputElement>,\n @Optional() @Inject(SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG) private readonly virtualKeyboardConfig: SystelabVirtualKeyboard.Config) {}\n\n ngAfterViewInit() {\n const keyboardOptions: KeyboardOptions = this.prepareKeyboardConfig();\n this.keyboard = new SimpleKeyboard('.simple-keyboard', keyboardOptions);\n this.setButtonClasses();\n this.setLayout(this.selectedLayout);\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: SystelabVirtualKeyboard.Layouts | 'default'): void {\n this.selectedLayout = layout;\n if (this.keyboard) {\n this.keyboard.setOptions({\n layoutName: layout,\n });\n\n if (layout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase || layout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift) {\n this.specialKeysAlwaysUppercase = true;\n this.addUppercaseClass();\n }\n }\n }\n\n private prepareKeyboardConfig(): KeyboardOptions {\n let keyboardOptions: KeyboardOptions = {\n onKeyPress: (button) => this.handleKeyPress(button),\n mergeDisplay: true,\n theme: 'hg-theme-default hg-layout-default systelab-virtual-keyboard-theme',\n display: {\n [SystelabVirtualKeyboard.Buttons.Backspace]: 'back',\n [SystelabVirtualKeyboard.Buttons.Enter]: this.config?.actionText ?? 'enter',\n [SystelabVirtualKeyboard.Buttons.Lock]: 'lock',\n },\n buttonTheme: this.buildButtonThemes(),\n layout: SystelabVirtualKeyboardConstants.LayoutDefinitions,\n };\n\n if (this.virtualKeyboardConfig?.hasOwnProperty('inputMethod')) {\n if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboard.InputMethods.onlyMouseEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useMouseEvents: true,\n }\n } else if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboard.InputMethods.onlyTouchEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useTouchEvents: true,\n }\n }\n }\n\n return keyboardOptions;\n }\n\n private buildButtonThemes(): { class: string; buttons: string }[] {\n return [\n {\n class: 'virtual-keyboard-delete-button',\n buttons: `${SystelabVirtualKeyboard.Buttons.Backspace}`,\n },\n {\n class: this.config?.actionText ? 'virtual-keyboard-enter-button virtual-keyboard-enter-button--action' : 'virtual-keyboard-enter-button',\n buttons: `${SystelabVirtualKeyboard.Buttons.Enter}`,\n },\n {\n class: 'virtual-keyboard-function-button',\n buttons: `${SystelabVirtualKeyboard.Buttons.Shift} ${SystelabVirtualKeyboard.Buttons.Lock}`,\n }\n ]\n }\n\n private setButtonClasses(): void {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-shift-button');\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.startsWith('&') && button.length > 1) {\n button = new DOMParser().parseFromString(button, 'text/html').body.textContent;\n }\n\n this.keyPressed.emit(button);\n\n if (button === SystelabVirtualKeyboard.Buttons.Shift ) {\n this.shiftPressed = !this.shiftPressed;\n this.toggleShiftLayout();\n if (this.shiftPressed) {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-shift-active');\n this.addUppercaseClass();\n } else {\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-shift-active');\n this.removeUppercaseClass();\n }\n } else if (button === SystelabVirtualKeyboard.Buttons.Lock) {\n this.capsLockOn = !this.capsLockOn;\n this.toggleShiftLayout();\n if (this.capsLockOn) {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Lock, 'virtual-keyboard-lock-active');\n this.addUppercaseClass();\n } else {\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Lock, 'virtual-keyboard-lock-active');\n this.removeUppercaseClass();\n }\n } else if (button === SystelabVirtualKeyboard.Buttons.Done) {\n this.closePanel.emit();\n e?.stopPropagation();\n e?.preventDefault();\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 this.removeUppercaseClass();\n }\n this.shiftPressed = false;\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-shift-active');\n }\n\n private addUppercaseClass(): void {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Lock, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Tab, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Backspace, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboard.Buttons.Enter, 'virtual-keyboard-uppercase');\n }\n\n private removeUppercaseClass(): void {\n if (this.specialKeysAlwaysUppercase) {\n return;\n }\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Shift, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Lock, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Tab, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Backspace, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboard.Buttons.Enter, 'virtual-keyboard-uppercase');\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 === SystelabVirtualKeyboard.Buttons.Backspace) {\n output = this.removeAt(output, ...commonParams);\n } else if (button === SystelabVirtualKeyboard.Buttons.Space) {\n output = this.addStringAt(output, ' ', ...commonParams);\n } else if (button === SystelabVirtualKeyboard.Buttons.Tab) {\n // Do nothing for tab\n } else if (button === SystelabVirtualKeyboard.Buttons.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 SystelabVirtualKeyboard.Buttons.Backspace.toString(),\n SystelabVirtualKeyboard.Buttons.Space.toString(),\n SystelabVirtualKeyboard.Buttons.Tab.toString(),\n SystelabVirtualKeyboard.Buttons.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 === SystelabVirtualKeyboard.Layouts.AlphaNumericShift,\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() === SystelabVirtualKeyboard.Buttons.Backspace.slice(1, SystelabVirtualKeyboard.Buttons.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 let selectedLayout: SystelabVirtualKeyboard.Layouts;\n\n switch (currentLayout) {\n case SystelabVirtualKeyboard.Layouts.AlphaNumeric:\n case SystelabVirtualKeyboard.Layouts.AlphaNumericShift:\n selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.AlphaNumeric ? SystelabVirtualKeyboard.Layouts.AlphaNumericShift : SystelabVirtualKeyboard.Layouts.AlphaNumeric;\n break;\n\n case SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase:\n case SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift:\n selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase ? SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift : SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase;\n break;\n\n case SystelabVirtualKeyboard.Layouts.Numeric:\n case SystelabVirtualKeyboard.Layouts.NumericShift:\n selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.Numeric ? SystelabVirtualKeyboard.Layouts.NumericShift : SystelabVirtualKeyboard.Layouts.Numeric;\n break;\n default:\n }\n\n if (selectedLayout) {\n this.setLayout(selectedLayout);\n }\n }\n\n private isStandardButton(button: string) {\n return button && !(button.startsWith('{') && button.endsWith('}'));\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?.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 { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\nimport { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\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: SystelabVirtualKeyboard.Layouts | 'default';\n private clickAlreadyHandled: boolean = false;\n private touchEndAlreadyHandled: boolean = false;\n\n private readonly boundHandleClick = this.handleClick.bind(this);\n private readonly boundHandleTouchEnd = this.handleTouchEnd.bind(this);\n\n constructor(private readonly overlay: Overlay) {}\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: SystelabVirtualKeyboard.Layouts | 'default' = '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\n this.addListeners();\n\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 this.removeListeners();\n\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n this.overlayRef = null;\n this.open = false;\n }\n\n private addListeners(): void {\n document.addEventListener('click', this.boundHandleClick, true);\n document.addEventListener('touchend', this.boundHandleTouchEnd, true);\n }\n\n private removeListeners(): void {\n document.removeEventListener('click', this.boundHandleClick, true);\n document.removeEventListener('touchend', this.boundHandleTouchEnd, true);\n }\n\n private handleClick(event: MouseEvent) {\n if (this.clickAlreadyHandled) {\n this.clickAlreadyHandled = false;\n return;\n }\n\n this.handleEventTarget(event.target, event);\n }\n\n private handleTouchEnd(event: TouchEvent) {\n if (this.touchEndAlreadyHandled) {\n this.touchEndAlreadyHandled = false;\n return;\n }\n\n this.handleEventTarget(event.target, event);\n }\n\n private handleEventTarget(target: EventTarget, event?: Event) {\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 event?.stopPropagation();\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 === SystelabVirtualKeyboard.Layouts.Numeric ? '331px' : '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 DOCUMENT,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Renderer2\n} from '@angular/core';\n\n\nimport { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\nimport { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\nimport { SystelabVirtualKeyboardConstants } from './systelab-virtual-keyboard.constants';\nimport { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\n\n@Directive({\n selector: 'input[vkEnabled], textarea[vkEnabled]',\n standalone: false,\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: SystelabVirtualKeyboard.Config;\n\n @Input()\n get vkConfig(): SystelabVirtualKeyboard.Config {\n return this.config;\n }\n\n set vkConfig(config: SystelabVirtualKeyboard.Config) {\n this.config = config;\n }\n\n private panelRef!: ComponentRef<SystelabVirtualKeyboardComponent>;\n private showKeyboardButtonElement: HTMLElement;\n\n @Output() vkOnKeyPress = new EventEmitter<string>();\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(SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG) private readonly virtualKeyboardConfig: SystelabVirtualKeyboard.Config,\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 public close(): void {\n this.closePanel();\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.config = this.config;\n this.panelRef.instance.closePanel.subscribe(() => this.closePanel());\n\n this.panelRef.instance.keyPressed.subscribe((key: string) => this.vkOnKeyPress.emit(key));\n }\n\n private getLayout(activeInputElement: HTMLInputElement | HTMLTextAreaElement): SystelabVirtualKeyboard.Layouts {\n if (this.config?.hasOwnProperty('layout')) {\n return this.config.layout;\n }\n if (this.isInputAlphabetic(activeInputElement)) {\n return SystelabVirtualKeyboard.Layouts.AlphaNumeric;\n } else if (this.isInputNumeric(activeInputElement)) {\n return SystelabVirtualKeyboard.Layouts.Numeric;\n } else {\n return SystelabVirtualKeyboard.Layouts.AlphaNumeric;\n }\n }\n\n private isInputAlphabetic(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardConstants.InputModes.text, SystelabVirtualKeyboardConstants.InputModes.password].some((i) => i === inputMode);\n }\n\n private isInputNumeric(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardConstants.InputModes.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 { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\nimport { SystelabVirtualKeyboard } from '../public-api';\nimport { SystelabVirtualKeyboardConstants } from './systelab-virtual-keyboard.constants';\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?: SystelabVirtualKeyboard.Config): ModuleWithProviders<SystelabVirtualKeyboardModule> {\n return {\n ngModule: SystelabVirtualKeyboardModule,\n providers: [\n SystelabVirtualKeyboardOverlayService,\n {\n provide: SystelabVirtualKeyboardConstants.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 { SystelabVirtualKeyboard } from './lib/systelab-virtual-keyboard.public';\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":";;;;;;;;AAAA;;;;;;;AAOG;AAEG,IAAW;AAAjB,CAAA,UAAiB,uBAAuB,EAAA;AAWpC,IAAA,IAAY,YAGX;AAHD,IAAA,CAAA,UAAY,YAAY,EAAA;AACpB,QAAA,YAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,QAAA,YAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACvC,KAAC,EAHW,YAAY,GAAZ,uBAAA,CAAA,YAAY,KAAZ,oCAAY,GAAA,EAAA,CAAA,CAAA;AAKxB,IAAA,IAAY,OAOX;AAPD,IAAA,CAAA,UAAY,OAAO,EAAA;AACf,QAAA,OAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAC9B,QAAA,OAAA,CAAA,mBAAA,CAAA,GAAA,qBAAyC;AACzC,QAAA,OAAA,CAAA,uBAAA,CAAA,GAAA,yBAAiD;AACjD,QAAA,OAAA,CAAA,4BAAA,CAAA,GAAA,+BAA4D;AAC5D,QAAA,OAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,QAAA,OAAA,CAAA,cAAA,CAAA,GAAA,eAA8B;AAClC,KAAC,EAPW,OAAO,GAAP,uBAAA,CAAA,OAAO,KAAP,+BAAO,GAAA,EAAA,CAAA,CAAA;AASnB,IAAA,IAAY,OASX;AATD,IAAA,CAAA,UAAY,OAAO,EAAA;AACf,QAAA,OAAA,CAAA,MAAA,CAAA,GAAA,QAAe;AACf,QAAA,OAAA,CAAA,OAAA,CAAA,GAAA,SAAiB;AACjB,QAAA,OAAA,CAAA,OAAA,CAAA,GAAA,SAAiB;AACjB,QAAA,OAAA,CAAA,MAAA,CAAA,GAAA,QAAe;AACf,QAAA,OAAA,CAAA,WAAA,CAAA,GAAA,QAAoB;AACpB,QAAA,OAAA,CAAA,UAAA,CAAA,GAAA,YAAuB;AACvB,QAAA,OAAA,CAAA,OAAA,CAAA,GAAA,SAAiB;AACjB,QAAA,OAAA,CAAA,KAAA,CAAA,GAAA,OAAa;AACjB,KAAC,EATW,OAAO,GAAP,uBAAA,CAAA,OAAO,KAAP,+BAAO,GAAA,EAAA,CAAA,CAAA;AAUvB,CAAC,EAnCgB,uBAAuB,KAAvB,uBAAuB,GAAA,EAAA,CAAA,CAAA;;ACTxC;;;;;;;AAOG;AAKG,IAAW,gCAAgC;AAAjD,CAAA,UAAiB,gCAAgC,EAAA;AAEhC,IAAA,gCAAA,CAAA,uBAAuB,GAAG,IAAI,cAAc,CAAiC,yBAAyB,CAAC;AAEvG,IAAA,gCAAA,CAAA,iBAAiB,GAAG;AAC7B,QAAA,SAAS,EAAE;YACP,kCAAkC;YAClC,iCAAiC;YACjC,sCAAsC;YACtC,qCAAqC;YACrC,SAAS;AACZ,SAAA;AACD,QAAA,CAAC,uBAAuB,CAAC,OAAO,CAAC,YAAY,GAAG;YAC5C,kCAAkC;YAClC,iCAAiC;YACjC,sCAAsC;YACtC,qCAAqC;YACrC,SAAS;AACZ,SAAA;AACD,QAAA,CAAC,uBAAuB,CAAC,OAAO,CAAC,iBAAiB,GAAG;YACjD,sCAAsC;YACtC,kCAAkC;YAClC,sCAAsC;YACtC,qCAAqC;YACrC,SAAS;AACZ,SAAA;AACD,QAAA,CAAC,uBAAuB,CAAC,OAAO,CAAC,qBAAqB,GAAG;YACrD,kCAAkC;YAClC,kCAAkC;YAClC,sCAAsC;YACtC,qCAAqC;YACrC,SAAS;AACZ,SAAA;AACD,QAAA,CAAC,uBAAuB,CAAC,OAAO,CAAC,0BAA0B,GAAG;YAC1D,sCAAsC;YACtC,kCAAkC;YAClC,sCAAsC;YACtC,qCAAqC;YACrC,SAAS;AACZ,SAAA;AACD,QAAA,CAAC,uBAAuB,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,CAAC;AACxG,QAAA,CAAC,uBAAuB,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,CAAC;KAChH;AAED,IAAA,IAAY,UAIX;AAJD,IAAA,CAAA,UAAY,UAAU,EAAA;AAClB,QAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,QAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,QAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACzB,KAAC,EAJW,UAAU,GAAV,gCAAA,CAAA,UAAU,KAAV,2CAAU,GAAA,EAAA,CAAA,CAAA;AAK1B,CAAC,EAjDgB,gCAAgC,KAAhC,gCAAgC,GAAA,EAAA,CAAA,CAAA;;MCSpC,gCAAgC,CAAA;AAEzC,IAAA,WAAW,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;;;AAMrC,IAAA,aAAa,CAAC,KAAmB,EAAA;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;;AAGjC,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,kBAAkB,EAAE,SAAS,IAAI,CAAC,CAAC;;AAGnD,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAI,KAAK,UAAU;;IAkBvD,WAAA,CACqB,UAAwC,EACsC,qBAAqD,EAAA;QADnI,IAAA,CAAA,UAAU,GAAV,UAAU;QACoE,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QAjBjH,IAAA,CAAA,KAAK,GAAG,KAAK;QAEZ,IAAA,CAAA,cAAc,GAAgD,SAAS;QAEvE,IAAA,CAAA,aAAa,GAAkB,IAAI;QACnC,IAAA,CAAA,gBAAgB,GAAkB,IAAI;QAGtC,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,0BAA0B,GAAG,KAAK;QAClC,IAAA,CAAA,UAAU,GAAG,KAAK;AAEhB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;AACrC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;;IAMjD,eAAe,GAAA;AACX,QAAA,MAAM,eAAe,GAAoB,IAAI,CAAC,qBAAqB,EAAE;QACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,kBAAkB,EAAE,eAAe,CAAC;QACvE,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;;AAGhC,IAAA,cAAc,CAAC,KAA6C,EAAA;AAC/D,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAE/B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI;AAC/C,YAAA,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,IAAI,CAAC,cAAc,CAAA,CAAE,CAAC;;QAGjE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,kBAAkB;AAChE,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,YAAY,CAAC;AAEnD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC;;QAE7E,IAAI,CAAC,gBAAgB,EAAE;;AAGpB,IAAA,SAAS,CAAC,MAAmD,EAAA;AAChE,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACrB,gBAAA,UAAU,EAAE,MAAM;AACrB,aAAA,CAAC;AAEF,YAAA,IAAI,MAAM,KAAK,uBAAuB,CAAC,OAAO,CAAC,qBAAqB,IAAI,MAAM,KAAK,uBAAuB,CAAC,OAAO,CAAC,0BAA0B,EAAE;AAC3I,gBAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;gBACtC,IAAI,CAAC,iBAAiB,EAAE;;;;IAK5B,qBAAqB,GAAA;AACzB,QAAA,IAAI,eAAe,GAAoB;YACnC,UAAU,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AACnD,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,KAAK,EAAE,oEAAoE;AAC3E,YAAA,OAAO,EAAE;AACL,gBAAA,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM;AACnD,gBAAA,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,OAAO;AAC3E,gBAAA,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM;AACjD,aAAA;AACD,YAAA,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACrC,MAAM,EAAE,gCAAgC,CAAC,iBAAiB;SAC7D;QAED,IAAI,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,aAAa,CAAC,EAAE;AAC3D,YAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,KAAK,uBAAuB,CAAC,YAAY,CAAC,eAAe,EAAE;AACjG,gBAAA,eAAe,GAAG;AACd,oBAAA,GAAG,eAAe;AAClB,oBAAA,cAAc,EAAE,IAAI;iBACvB;;AACE,iBAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,KAAK,uBAAuB,CAAC,YAAY,CAAC,eAAe,EAAE;AACxG,gBAAA,eAAe,GAAG;AACd,oBAAA,GAAG,eAAe;AAClB,oBAAA,cAAc,EAAE,IAAI;iBACvB;;;AAIT,QAAA,OAAO,eAAe;;IAGlB,iBAAiB,GAAA;QACrB,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,gCAAgC;AACvC,gBAAA,OAAO,EAAE,CAAA,EAAG,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAA,CAAE;AAC1D,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,qEAAqE,GAAG,+BAA+B;AACxI,gBAAA,OAAO,EAAE,CAAA,EAAG,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAA,CAAE;AACtD,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,kCAAkC;AACzC,gBAAA,OAAO,EAAE,CAAA,EAAG,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAA,CAAE;AAC9F;SACJ;;IAGG,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,+BAA+B,CAAC;;IAGhG,cAAc,CAAC,MAAc,EAAE,CAAS,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC;;AAGrC,QAAA,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW;;AAGlF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAE5B,IAAI,MAAM,KAAK,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAG;AACnD,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;YACtC,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,+BAA+B,CAAC;gBACpG,IAAI,CAAC,iBAAiB,EAAE;;iBACrB;AACH,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,+BAA+B,CAAC;gBACvG,IAAI,CAAC,oBAAoB,EAAE;;;aAE5B,IAAI,MAAM,KAAK,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE;AACxD,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU;YAClC,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,8BAA8B,CAAC;gBAClG,IAAI,CAAC,iBAAiB,EAAE;;iBACrB;AACH,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,8BAA8B,CAAC;gBACrG,IAAI,CAAC,oBAAoB,EAAE;;;aAE5B,IAAI,MAAM,KAAK,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE;AACxD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACtB,CAAC,EAAE,eAAe,EAAE;YACpB,CAAC,EAAE,cAAc,EAAE;YACnB;;AAGJ,QAAA,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YAC7E;;QAGJ,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAE9C,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,MAAM;AAEtC,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,gBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC;;;AAIxF,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,oBAAoB,EAAE;;AAE/B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,+BAA+B,CAAC;;IAGnG,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;AACjG,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,4BAA4B,CAAC;AAChG,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,CAAC,GAAG,EAAE,4BAA4B,CAAC;AAC/F,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,EAAE,4BAA4B,CAAC;AACrG,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;;IAG7F,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;YACjC;;AAEJ,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;AACpG,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,4BAA4B,CAAC;AACnG,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,GAAG,EAAE,4BAA4B,CAAC;AAClG,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,EAAE,4BAA4B,CAAC;AACxG,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;;AAGhG,IAAA,kBAAkB,CAAC,MAAc,EAAA;AACrC,QAAA,MAAM,YAAY,GAA8B,IAAI,CAAC,eAAe,EAAE;QACtE,IAAI,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACjD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YAChC,IAAI,MAAM,KAAK,uBAAuB,CAAC,OAAO,CAAC,SAAS,EAAE;gBACtD,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC;;iBAC5C,IAAI,MAAM,KAAK,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE;AACzD,gBAAA,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC;;iBACpD,IAAI,MAAM,KAAK,uBAAuB,CAAC,OAAO,CAAC,GAAG,EAAE;;;iBAEpD,IAAI,MAAM,KAAK,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE;AACzD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;;;iBAEzD;gBACH;;;aAED;AACH,YAAA,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;;AAG9D,QAAA,OAAO,MAAM;;IAGT,eAAe,GAAA;AACnB,QAAA,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,IAAI,CAAC;;AAG9D,IAAA,2BAA2B,CAAC,MAAc,EAAA;QAC9C,OAAO;AACH,YAAA,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;AACpD,YAAA,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;AAChD,YAAA,uBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;AAC9C,YAAA,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;AACnD,SAAA,CAAC,QAAQ,CAAC,MAAM,CAAC;;AAGd,IAAA,cAAc,CAAC,MAAc,EAAA;AACjC,QAAA,MAAM,EAAC,GAAG,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;AAExD,QAAA,MAAM,SAAS,GAAsB;AACjC,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,IAAI,CAAC,cAAc,KAAK,uBAAuB,CAAC,OAAO,CAAC,iBAAiB;AACnF,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,QAAQ,EAAE,CAAC;SACd;;AAED,QAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,IAAI,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;;AAGjF;;AAEK;AACG,IAAA,uBAAuB,CAAC,MAAc,EAAA;AAC1C,QAAA,IAAI,GAAW;AACf,QAAA,IAAI,IAAY;AAChB,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;;AAE9C,YAAA,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;AACtD,YAAA,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,IAAI,GAAG,GAAG;;AAGV,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC/I,IAAI,GAAG,WAAW;;;aAEnB;YACH,GAAG,GAAG,MAAM;YACZ,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAE,GAAG,CAAA,GAAA,EAAM,MAAM,CAAC,WAAW,EAAE,CAAA,CAAE;;AAG7F,QAAA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC;;IAGd,iBAAiB,GAAA;QACrB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU;AACtD,QAAA,IAAI,cAA+C;QAEnD,QAAQ,aAAa;AACjB,YAAA,KAAK,uBAAuB,CAAC,OAAO,CAAC,YAAY;AACjD,YAAA,KAAK,uBAAuB,CAAC,OAAO,CAAC,iBAAiB;gBAClD,cAAc,GAAG,aAAa,KAAK,uBAAuB,CAAC,OAAO,CAAC,YAAY,GAAG,uBAAuB,CAAC,OAAO,CAAC,iBAAiB,GAAG,uBAAuB,CAAC,OAAO,CAAC,YAAY;gBAClL;AAEJ,YAAA,KAAK,uBAAuB,CAAC,OAAO,CAAC,qBAAqB;AAC1D,YAAA,KAAK,uBAAuB,CAAC,OAAO,CAAC,0BAA0B;gBAC3D,cAAc,GAAG,aAAa,KAAK,uBAAuB,CAAC,OAAO,CAAC,qBAAqB,GAAG,uBAAuB,CAAC,OAAO,CAAC,0BAA0B,GAAG,uBAAuB,CAAC,OAAO,CAAC,qBAAqB;gBAC7M;AAEJ,YAAA,KAAK,uBAAuB,CAAC,OAAO,CAAC,OAAO;AAC5C,YAAA,KAAK,uBAAuB,CAAC,OAAO,CAAC,YAAY;gBAC7C,cAAc,GAAG,aAAa,KAAK,uBAAuB,CAAC,OAAO,CAAC,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,YAAY,GAAG,uBAAuB,CAAC,OAAO,CAAC,OAAO;gBACnK;YACJ;;QAGJ,IAAI,cAAc,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;;AAI9B,IAAA,gBAAgB,CAAC,MAAc,EAAA;AACnC,QAAA,OAAO,MAAM,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;;AAGtE;;AAEK;AACG,IAAA,QAAQ,CAAC,MAAc,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,EAAA;QACrG,IAAI,QAAQ,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM;;AAGjB,QAAA,IAAI,MAAc;AAElB,QAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;AAC1B,YAAA,IAAI,QAAQ,IAAI,QAAQ,IAAI,CAAC,EAAE;AAC3B,gBAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC/D,IAAI,SAAS,EAAE;AACX,oBAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC;;;iBAElC;gBACH,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAI,SAAS,EAAE;AACX,oBAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC;;;;aAGtC;AACH,YAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;YAC9D,IAAI,SAAS,EAAE;AACX,gBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;;;AAIvC,QAAA,OAAO,MAAM;;AAGT,IAAA,WAAW,CAAC,MAAc,EAAE,GAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,EAAA;AACrH,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE;AAC1D,YAAA,OAAO,MAAM;;AAGjB,QAAA,IAAI,MAAc;AAElB,QAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,EAAE;AAC7B,YAAA,MAAM,GAAG,MAAM,GAAG,GAAG;;aAClB;YACH,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7E,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;;;AAInD,QAAA,OAAO,MAAM;;AAGjB;;AAEO;AACC,IAAA,iBAAiB,CAAC,KAAU,EAAA;QAChC,IAAI,aAAa,GAAG,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;YACtB,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE;;AAGtD,QAAA,MAAM,WAAW,GACb,aAAa,KAAK,UAAU;aAC3B,aAAa,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAEpH,QAAA,MAAM,UAAU,GACZ,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE5H,IAAI,WAAW,IAAI,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,EAAE;AACxD;;;AAGG;AACH,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;AAE7E,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC;;;AAEhH,aAAA,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,kBAAkB,KAAK,QAAQ,CAAC,aAAa,EAAE;YACzF;;aACG,IAAI,CAAC,UAAU,IAAI,KAAK,EAAE,IAAI,KAAK,iBAAiB,EAAE;AACzD;;AAEG;AACH,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAE3B,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,OAAO,CAAC,GAAG,CAAC,CAAA,6BAAA,EAAgC,KAAK,EAAE,IAAI,CAAA,OAAA,CAAS,EAAE,KAAK,CAAC;;;;IAK5E,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE;AAChC,QAAA,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CACtC,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,gBAAgB,CACxB;;AAGG,IAAA,mBAAmB,CAAC,MAAc,EAAE,KAAK,GAAG,KAAK,EAAA;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC;AAC/D,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;;QAElC,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC;AAC9B,gBAAA,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY;AACzB,aAAA,CAAC;AACzB,SAAC,CAAC;;AAGE,IAAA,uBAAuB,CAAC,MAAc,EAAE,KAAK,GAAG,KAAK,EAAA;AACzD,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa;AAEtC,QAAA,IAAI,aAAa,IAAI,IAAI,EAAE;YACvB,IAAI,KAAK,EAAE;gBACP,IAAI,aAAa,GAAG,CAAC;AAAE,oBAAA,aAAa,GAAG,aAAa,GAAG,MAAM;;iBAC1D;AACH,gBAAA,aAAa,GAAG,aAAa,GAAG,MAAM;;;AAG9C,QAAA,OAAO,aAAa;;AAGhB,IAAA,gBAAgB,CAAC,QAAuB,EAAE,WAAW,GAAG,QAAQ,EAAA;AACpE,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,WAAW;;8GA/b9B,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAuCjB,gCAAgC,CAAC,uBAAuB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAvCvE,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,wTCrB7C,mvBAUA,EAAA,CAAA,CAAA;;2FDWa,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAN5C,SAAS;+BACI,qCAAqC,EAAA,UAAA,EACnC,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,mvBAAA,EAAA;;0BA0CN;;0BAAY,MAAM;AAAC,oBAAA,IAAA,EAAA,CAAA,gCAAgC,CAAC,uBAAuB;yCArChF,WAAW,EAAA,CAAA;sBADV,YAAY;uBAAC,cAAc,EAAE,CAAC,QAAQ,CAAC;gBASxC,aAAa,EAAA,CAAA;sBAFZ,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;sBAC3C,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;gBAyBhC,UAAU,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;;;ME/BQ,qCAAqC,CAAA;AAa9C,IAAA,WAAA,CAA6B,OAAgB,EAAA;QAAhB,IAAA,CAAA,OAAO,GAAP,OAAO;QAN5B,IAAA,CAAA,mBAAmB,GAAY,KAAK;QACpC,IAAA,CAAA,sBAAsB,GAAY,KAAK;QAE9B,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9C,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;IAI9D,SAAS,GAAA;AACZ,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU;;IAGrB,MAAM,GAAA;QACT,OAAO,IAAI,CAAC,IAAI;;IAGb,MAAM,CACT,WAA6B,EAC7B,yBAAsC,EACtC,WAAoB,EACpB,SAAsD,SAAS,EAAA;AAE/D,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,yBAAyB,GAAG,yBAAyB;AAC1D,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAClC,YAAA,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC1D,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,aAAa,EAAE,qCAAqC;AACpD,YAAA,UAAU,EAAE,kCAAkC;AACjD,SAAA,CAAC;QACF,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gDAAgD,CAAC;;AAGnF,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,WAAW,CAAC;QACrD,IAAI,CAAC,UAAU,EAAE;AAEjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAEhB,IAAI,CAAC,YAAY,EAAE;AAEnB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,gCAAgC,CAAC,CAAC;;IAGjF,cAAc,GAAA;QACjB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;;IAG5D,sBAAsB,GAAA;AACzB,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;;IAG5B,yBAAyB,GAAA;AAC5B,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;;IAG/B,OAAO,GAAA;QACV,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;;AAE7B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;;IAGb,YAAY,GAAA;QAChB,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC;QAC/D,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC;;IAGjE,eAAe,GAAA;QACnB,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC;QAClE,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC;;AAGpE,IAAA,WAAW,CAAC,KAAiB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;YAChC;;QAGJ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;;AAGvC,IAAA,cAAc,CAAC,KAAiB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;YACnC;;QAGJ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;;IAGvC,iBAAiB,CAAC,MAAmB,EAAE,KAAa,EAAA;QACxD,MAAM,wBAAwB,GAAa,MAAsB,EAAE,SAAS,CAAC,QAAQ,CAAC,8BAA8B,CAAC;AACrH,QAAA,MAAM,qBAAqB,GAAY,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,MAAc,CAAC;QAC3G,MAAM,kBAAkB,GAAY,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAc,CAAC;QAC9E,MAAM,kBAAkB,GAAY,IAAI,CAAC,yBAAyB,EAAE,QAAQ,CAAC,MAAc,CAAC;AAE5F,QAAA,IAAI,CAAC,qBAAqB;AACtB,YAAA,CAAC,kBAAkB;AACnB,YAAA,CAAC,kBAAkB;YACnB,CAAC,wBAAwB,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAClB,KAAK,EAAE,eAAe,EAAE;gBACxB,IAAI,CAAC,OAAO,EAAE;;;;IAKnB,WAAW,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE;;IAGjC,sBAAsB,CAAC,WAA6B,EAAE,WAAoB,EAAA;AAC9E,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;;;IAI1F,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;;;IAIjD,mBAAmB,CAAC,WAA6B,EAAE,WAAoB,EAAA;QAC3E,IAAI,WAAW,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;;QAG5E,MAAM,mBAAmB,GAA2B,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC;QAEnG,OAAO,IAAI,CAAC;AACP,aAAA,QAAQ;aACR,mBAAmB,CAAC,mBAAmB;aACvC,sBAAsB,CAAC,KAAK;aAC5B,kBAAkB,CAAC,IAAI;aACvB,QAAQ,CAAC,KAAK;AACd,aAAA,aAAa,CAAC;AACX,YAAA;AACI,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,KAAK;AAClB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AACrB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,KAAK;AAClB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,QAAQ;AACrB,aAAA;AACJ,SAAA,CAAC;;IAGF,cAAc,GAAA;AAClB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,KAAK,uBAAuB,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,GAAG,QAAQ;QAEjG,OAAO;AACH,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,QAAQ,EAAE,YAAY;SACzB;;AAGG,IAAA,6BAA6B,CAAC,WAA6B,EAAA;QAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC;QAC9D,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AAC3D,QAAA,MAAM,YAAY,GAAG,MAAM,CAAE,kBAA6B,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC7E,QAAA,MAAM,EAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAC,GAAG,WAAW,CAAC,qBAAqB,EAAE;QACjE,OAAO;YACH,KAAK;YACL,MAAM;AACN,YAAA,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,cAAc;YACjE,CAAC;SACJ;;AAGG,IAAA,qBAAqB,CAAC,WAA6B,EAAA;QACvD,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AAC3D,QAAA,MAAM,YAAY,GAAG,MAAM,CAAE,kBAA6B,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7E,MAAM,UAAU,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC,KAAK;AAE5D,QAAA,MAAM,UAAU,GAAG,YAAY,GAAG,UAAU;QAE5C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;;8GAhN1B,qCAAqC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,OAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qCAAqC,cAFlC,MAAM,EAAA,CAAA,CAAA;;2FAET,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAHjD,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACxBD;;;;;;;AAOG;MA6BU,gCAAgC,CAAA;IAKzC,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB;;AAEJ,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE;;IAIxC,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAClD;;QAGJ,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE;QAC5C,IAAI,CAAC,SAAS,EAAE;;IAIpB,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB;;QAGJ,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,cAAc,CAAC,yBAAyB,EAAE;QAC/C,IAAI,CAAC,SAAS,EAAE;;IAKpB,IACI,SAAS,CAAC,OAAyB,EAAA;AACnC,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;aAChB;AACH,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;;;AAI9B,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,OAAO;;AAKvB,IAAA,IACI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,WAAW;;IAG3B,IAAI,aAAa,CAAC,WAA6B,EAAA;AAC3C,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;aACpB;AACH,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;;AAMtC,IAAA,IACI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,KAAK;;IAGrB,IAAI,OAAO,CAAC,KAAc,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;AAKtB,IAAA,IACI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,MAAM;;IAGtB,IAAI,QAAQ,CAAC,MAAsC,EAAA;AAC/C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;IAQxB,WAAA,CACqB,UAAwC,EACxC,cAAqD,EACrD,QAAmB,EACD,QAAa,EAC+C,qBAAqD,EAAA;QAJnI,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACU,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACoD,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QA9DhH,IAAA,CAAA,OAAO,GAAG,KAAK;QAef,IAAA,CAAA,WAAW,GAAG,KAAK;QAenB,IAAA,CAAA,KAAK,GAAG,KAAK;AAyBX,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AAS/C,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB;;IAG5C,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;YACvB,IAAI,CAAC,kBAAkB,EAAE;;;IAIjC,eAAe,GAAA;QACX,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;AACzC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC;AACnF,YAAA,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;IAI3E,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;AACzC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC;AACnF,YAAA,YAAY,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAE1E,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;;IAG1B,KAAK,GAAA;QACR,IAAI,CAAC,UAAU,EAAE;;IAGb,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB;;AAEJ,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE;YAC9B,IAAI,CAAC,UAAU,EAAE;;aACd;YACH,IAAI,CAAC,SAAS,EAAE;;;IAIhB,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB;;AAEJ,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;;AAEjC,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE;YACnC;;AAGJ,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAEnE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;QACjI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAEpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAW,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAGrF,IAAA,SAAS,CAAC,kBAA0D,EAAA;QACxE,IAAI,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;;AAE7B,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,EAAE;AAC5C,YAAA,OAAO,uBAAuB,CAAC,OAAO,CAAC,YAAY;;AAChD,aAAA,IAAI,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE;AAChD,YAAA,OAAO,uBAAuB,CAAC,OAAO,CAAC,OAAO;;aAC3C;AACH,YAAA,OAAO,uBAAuB,CAAC,OAAO,CAAC,YAAY;;;AAInD,IAAA,iBAAiB,CAAC,kBAA0D,EAAA;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;QACvD,OAAO,SAAS,IAAK,CAAC,gCAAgC,CAAC,UAAU,CAAC,IAAI,EAAE,gCAAgC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;;AAGtJ,IAAA,cAAc,CAAC,kBAA0D,EAAA;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;QACvD,OAAO,SAAS,IAAI,CAAC,gCAAgC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;;AAGlG,IAAA,YAAY,CAAC,kBAA0D,EAAA;AAC3E,QAAA,OAAO,kBAAkB,EAAE,SAAS,IAAI,kBAAkB,EAAE,IAAI;;IAG5D,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;;IAGzB,WAAW,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa;;IAGhC,kBAAkB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC9C,YAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;AAClC,YAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,wCAAwC,CAAC;AAC7D,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC;AAC7E,YAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;;;AA1MrC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,qCAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EA+F7B,QAAQ,EAAA,EAAA,EAAA,KAAA,EACI,gCAAgC,CAAC,uBAAuB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAhGvE,gCAAgC,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,0BAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAJ5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uCAAuC;AACjD,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;0BAgGQ,MAAM;2BAAC,QAAQ;;0BACf;;0BAAY,MAAM;AAAC,oBAAA,IAAA,EAAA,CAAA,gCAAgC,CAAC,uBAAuB;yCA3FhF,gBAAgB,EAAA,CAAA;sBAJf,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;sBAC3C,YAAY;uBAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;;sBAC1C,YAAY;uBAAC,cAAc,EAAE,CAAC,QAAQ,CAAC;;sBACvC,YAAY;uBAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;gBAS3C,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;gBAYjC,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;gBAchC,SAAS,EAAA,CAAA;sBADZ;gBAgBG,aAAa,EAAA,CAAA;sBADhB;gBAgBG,OAAO,EAAA,CAAA;sBADV;gBAYG,QAAQ,EAAA,CAAA;sBADX;gBAYS,YAAY,EAAA,CAAA;sBAArB;;;ACrHE,MAAM,OAAO,GAAG,MAAK;AACxB,IAAA,MAAM,oCAAoC,GAAI,OAAe,CAAC,qCAAqC,IAAI,KAAK;IAC5G,IAAI,oCAAoC,EAAE;AACtC,QAAA,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC;;AAEzF,IAAA,OAAe,CAAC,qCAAqC,GAAG,IAAI;AACjE;MAOa,6BAA6B,CAAA;IAC/B,OAAO,OAAO,CAAC,IAAqC,EAAA;QACvD,OAAO;AACH,YAAA,QAAQ,EAAE,6BAA6B;AACvC,YAAA,SAAS,EAAE;gBACP,qCAAqC;AACrC,gBAAA;AACI,oBAAA,OAAO,EAAE,gCAAgC,CAAC,uBAAuB,EAAE,QAAQ,EAAE;AAChF;AACJ;SACJ;;AAGE,IAAA,OAAO,QAAQ,GAAA;QAClB,OAAO;AACH,YAAA,QAAQ,EAAE,6BAA6B;AACvC,YAAA,SAAS,EAAE,EAAE;SAChB;;8GAjBI,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,iBAHvB,gCAAgC,CAAA,EAAA,OAAA,EAAA,CADrC,YAAY,EAAE,aAAa,aAE3B,gCAAgC,CAAA,EAAA,CAAA,CAAA;+GAEjC,6BAA6B,EAAA,OAAA,EAAA,CAJ5B,YAAY,EAAE,aAAa,CAAA,EAAA,CAAA,CAAA;;2FAI5B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;oBACtC,YAAY,EAAE,CAAC,gCAAgC,CAAC;oBAChD,OAAO,EAAE,CAAC,gCAAgC,CAAC;AAC9C,iBAAA;;;ACpBD;;AAEG;;ACFH;;AAEG;;;;"}
package/index.d.ts CHANGED
@@ -11,6 +11,7 @@ declare namespace SystelabVirtualKeyboard {
11
11
  showIcon?: boolean;
12
12
  showOnMouseClick?: boolean;
13
13
  numericCloseOnEnter?: boolean;
14
+ actionText?: string;
14
15
  }
15
16
  enum InputMethods {
16
17
  onlyMouseEvents = "onlyMouseEvents",
@@ -24,6 +25,16 @@ declare namespace SystelabVirtualKeyboard {
24
25
  Numeric = "numeric",
25
26
  NumericShift = "numeric-shift"
26
27
  }
28
+ enum Buttons {
29
+ Done = "{done}",
30
+ Enter = "{enter}",
31
+ Shift = "{shift}",
32
+ Lock = "{lock}",
33
+ Backspace = "{bksp}",
34
+ Language = "{language}",
35
+ Space = "{space}",
36
+ Tab = "{tab}"
37
+ }
27
38
  }
28
39
 
29
40
  declare class SystelabVirtualKeyboardComponent implements AfterViewInit {
@@ -34,6 +45,7 @@ declare class SystelabVirtualKeyboardComponent implements AfterViewInit {
34
45
  get maxLength(): number;
35
46
  get isTextarea(): boolean;
36
47
  debug: boolean;
48
+ config: SystelabVirtualKeyboard.Config;
37
49
  private selectedLayout;
38
50
  private keyboard;
39
51
  private caretPosition;
@@ -43,6 +55,7 @@ declare class SystelabVirtualKeyboardComponent implements AfterViewInit {
43
55
  private specialKeysAlwaysUppercase;
44
56
  private capsLockOn;
45
57
  closePanel: EventEmitter<void>;
58
+ keyPressed: EventEmitter<string>;
46
59
  constructor(elementRef: ElementRef<HTMLInputElement>, virtualKeyboardConfig: SystelabVirtualKeyboard.Config);
47
60
  ngAfterViewInit(): void;
48
61
  setActiveInput(input: HTMLInputElement | HTMLTextAreaElement): void;
@@ -68,7 +81,7 @@ declare class SystelabVirtualKeyboardComponent implements AfterViewInit {
68
81
  private computeNewCaretPosition;
69
82
  private setCaretPosition;
70
83
  static ɵfac: i0.ɵɵFactoryDeclaration<SystelabVirtualKeyboardComponent, [null, { optional: true; }]>;
71
- static ɵcmp: i0.ɵɵComponentDeclaration<SystelabVirtualKeyboardComponent, "systelab-virtual-keyboard.component", never, {}, { "closePanel": "closePanel"; }, never, never, true, never>;
84
+ static ɵcmp: i0.ɵɵComponentDeclaration<SystelabVirtualKeyboardComponent, "systelab-virtual-keyboard.component", never, {}, { "closePanel": "closePanel"; "keyPressed": "keyPressed"; }, never, never, true, never>;
72
85
  }
73
86
 
74
87
  declare class SystelabVirtualKeyboardOverlayService {
@@ -81,6 +94,8 @@ declare class SystelabVirtualKeyboardOverlayService {
81
94
  private layout;
82
95
  private clickAlreadyHandled;
83
96
  private touchEndAlreadyHandled;
97
+ private readonly boundHandleClick;
98
+ private readonly boundHandleTouchEnd;
84
99
  constructor(overlay: Overlay);
85
100
  isCreated(): boolean;
86
101
  isOpen(): boolean;
@@ -89,7 +104,8 @@ declare class SystelabVirtualKeyboardOverlayService {
89
104
  setClickAlreadyHandled(): void;
90
105
  setTouchEndAlreadyHandled(): void;
91
106
  destroy(): void;
92
- private initListener;
107
+ private addListeners;
108
+ private removeListeners;
93
109
  private handleClick;
94
110
  private handleTouchEnd;
95
111
  private handleEventTarget;
@@ -127,10 +143,12 @@ declare class SystelabVirtualKeyboardDirective implements OnInit, AfterViewInit,
127
143
  set vkConfig(config: SystelabVirtualKeyboard.Config);
128
144
  private panelRef;
129
145
  private showKeyboardButtonElement;
146
+ vkOnKeyPress: EventEmitter<string>;
130
147
  constructor(elementRef: ElementRef<HTMLInputElement>, overlayService: SystelabVirtualKeyboardOverlayService, renderer: Renderer2, document: any, virtualKeyboardConfig: SystelabVirtualKeyboard.Config);
131
148
  ngOnInit(): void;
132
149
  ngAfterViewInit(): void;
133
150
  ngOnDestroy(): void;
151
+ close(): void;
134
152
  private togglePanel;
135
153
  private openPanel;
136
154
  private getLayout;
@@ -141,7 +159,7 @@ declare class SystelabVirtualKeyboardDirective implements OnInit, AfterViewInit,
141
159
  private inputOrigin;
142
160
  private attachKeyboardIcon;
143
161
  static ɵfac: i0.ɵɵFactoryDeclaration<SystelabVirtualKeyboardDirective, [null, null, null, null, { optional: true; }]>;
144
- static ɵdir: i0.ɵɵDirectiveDeclaration<SystelabVirtualKeyboardDirective, "input[vkEnabled], textarea[vkEnabled]", never, { "vkEnabled": { "alias": "vkEnabled"; "required": false; }; "vkFixedBottom": { "alias": "vkFixedBottom"; "required": false; }; "vkDebug": { "alias": "vkDebug"; "required": false; }; "vkConfig": { "alias": "vkConfig"; "required": false; }; }, {}, never, never, false, never>;
162
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SystelabVirtualKeyboardDirective, "input[vkEnabled], textarea[vkEnabled]", never, { "vkEnabled": { "alias": "vkEnabled"; "required": false; }; "vkFixedBottom": { "alias": "vkFixedBottom"; "required": false; }; "vkDebug": { "alias": "vkDebug"; "required": false; }; "vkConfig": { "alias": "vkConfig"; "required": false; }; }, { "vkOnKeyPress": "vkOnKeyPress"; }, never, never, false, never>;
145
163
  }
146
164
 
147
165
  declare const factory: () => void;
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.public.ts","../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.ts","../../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"],"sourcesContent":[null,null,null,null,null],"names":[],"mappings":";;;;;;AASA;AAEI;AACI;AACA;;;;AAIH;AAED;AACI;AACA;AACH;AAED;AACI;AACA;AACA;AACA;AACA;AACA;AACH;AACJ;;ACjBD;;;AAQI;AAQA;;;AAYO;;;;;;;;;AAWG;;;AAaH;;AA+BP;AA+BA;AAiBA;AAIA;AAoEA;AAQA;AAWA;AAwBA;AAIA;AASA;AAqBA;AAqBA;AA2BA;AAOA;AA6BA;AAsBA;AAqCA;AAQA;AAWA;AAaA;;;AAIH;;ACpcD;;;;;;;;;;AAaiC;AAItB;AAIA;;AAgCA;AAIA;AAIA;AAIA;AAQP;AAKA;AASA;AASA;AAiBO;AAIP;AAMA;AAMA;AAyCA;AAUA;AAaA;;;AASH;;AClMD;;;;;;;AAiBI;AAWA;;AAYA;;;;AAoBA;;;AAeA;;AAMA;AAKA;;;;;;AA8BA;AAQA;AAWA;AAoBA;AAaA;AAKA;AAKA;AAIA;AAIA;AAIA;;;AAUH;;AC9ND;AAQA;;AAkBkB;;;;AAMjB;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.public.ts","../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.ts","../../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"],"sourcesContent":[null,null,null,null,null],"names":[],"mappings":";;;;;;AASA;AAEI;AACI;AACA;;;;;AAKH;AAED;AACI;AACA;AACH;AAED;AACI;AACA;AACA;AACA;AACA;AACA;AACH;AAED;AACI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACH;AACJ;;AC7BD;;;AAQI;AAQA;;;AAYO;AACA;;;;;;;;;AAWG;AACA;;;AAaH;;AA+BP;AA+BA;AAiBA;AAIA;AA8DA;AAQA;AAWA;AAwBA;AAIA;AASA;AAqBA;AAqBA;AA2BA;AAOA;AA6BA;AAsBA;AAqCA;AAQA;AAWA;AAaA;;;AAIH;;AChcD;;;;;;;;;;AAaI;AACA;AAE6B;AAEtB;AAIA;;AAmCA;AAIA;AAIA;AAIA;AAUP;AAKA;AAKA;AASA;AASA;AAiBO;AAIP;AAMA;AAMA;AAyCA;AAUA;AAaA;;;AASH;;AC3MD;;;;;;;AAiBI;AAWA;;AAYA;;;;AAoBA;;;AAeA;;AAMA;AAKA;;;AAOU;;;;AAyBV;AAQO;AAIP;AAWA;AAuBA;AAaA;AAKA;AAKA;AAIA;AAIA;AAIA;;;AAUH;;ACzOD;AAQA;;AAkBkB;;;;AAMjB;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "systelab-virtual-keyboard",
3
- "version": "20.2.2",
3
+ "version": "20.3.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0",
@@ -8,6 +8,8 @@
8
8
  --systelab-virtual-keyboard-background-color: #B2B2B2;
9
9
  --systelab-virtual-keyboard-button-color: #E5E5E5;
10
10
  --systelab-virtual-keyboard-button-font-color: #000000;
11
+ --systelab-virtual-keyboard-action-button-color: #06038D;
12
+ --systelab-virtual-keyboard-action-button-font-color: #FFFFFF;
11
13
  --systelab-virtual-keyboard-active-special-button-color: #4D4D4D;
12
14
  --systelab-virtual-keyboard-active-special-button-font-color: #FFFFFF;
13
15
  }
@@ -83,6 +85,11 @@
83
85
  }
84
86
  }
85
87
 
88
+ .virtual-keyboard-enter-button--action {
89
+ background-color: var(--systelab-virtual-keyboard-action-button-color);
90
+ color: var(--systelab-virtual-keyboard-action-button-font-color);
91
+ }
92
+
86
93
  .hg-button-tab {
87
94
  justify-content: flex-start;
88
95
  align-items: flex-end;