systelab-virtual-keyboard 20.3.0 → 21.0.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.
@@ -162,7 +162,7 @@ class SystelabVirtualKeyboardComponent {
162
162
  }
163
163
  prepareKeyboardConfig() {
164
164
  let keyboardOptions = {
165
- onKeyPress: (button) => this.handleKeyPress(button),
165
+ onKeyPress: (button, e) => this.handleKeyPress(button, e),
166
166
  mergeDisplay: true,
167
167
  theme: 'hg-theme-default hg-layout-default systelab-virtual-keyboard-theme',
168
168
  display: {
@@ -242,8 +242,6 @@ class SystelabVirtualKeyboardComponent {
242
242
  }
243
243
  else if (button === SystelabVirtualKeyboard.Buttons.Done) {
244
244
  this.closePanel.emit();
245
- e?.stopPropagation();
246
- e?.preventDefault();
247
245
  return;
248
246
  }
249
247
  if (!this.isAcceptedNonStandardButton(button) && !this.isStandardButton(button)) {
@@ -493,10 +491,10 @@ class SystelabVirtualKeyboardComponent {
493
491
  this.caretPosition = position;
494
492
  this.caretPositionEnd = endPosition;
495
493
  }
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 }); }
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" }); }
494
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SystelabVirtualKeyboardComponent, deps: [{ token: i0.ElementRef }, { token: SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
495
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", 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" }); }
498
496
  }
499
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardComponent, decorators: [{
497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SystelabVirtualKeyboardComponent, decorators: [{
500
498
  type: Component,
501
499
  args: [{ selector: 'systelab-virtual-keyboard.component', standalone: true, imports: [], template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n" }]
502
500
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: undefined, decorators: [{
@@ -604,6 +602,7 @@ class SystelabVirtualKeyboardOverlayService {
604
602
  !showKeyboardButtonTarget) {
605
603
  if (this.isCreated()) {
606
604
  event?.stopPropagation();
605
+ event?.preventDefault();
607
606
  this.destroy();
608
607
  }
609
608
  }
@@ -686,10 +685,10 @@ class SystelabVirtualKeyboardOverlayService {
686
685
  const extraWidth = overlayWidth - inputWidth;
687
686
  return Math.abs(extraWidth) / 2;
688
687
  }
689
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardOverlayService, deps: [{ token: i1.Overlay }], target: i0.ɵɵFactoryTarget.Injectable }); }
690
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardOverlayService, providedIn: 'root' }); }
688
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SystelabVirtualKeyboardOverlayService, deps: [{ token: i1.Overlay }], target: i0.ɵɵFactoryTarget.Injectable }); }
689
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SystelabVirtualKeyboardOverlayService, providedIn: 'root' }); }
691
690
  }
692
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardOverlayService, decorators: [{
691
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SystelabVirtualKeyboardOverlayService, decorators: [{
693
692
  type: Injectable,
694
693
  args: [{
695
694
  providedIn: 'root',
@@ -793,7 +792,9 @@ class SystelabVirtualKeyboardDirective {
793
792
  this.overlayService.destroy();
794
793
  }
795
794
  close() {
796
- this.closePanel();
795
+ setTimeout(() => {
796
+ this.closePanel();
797
+ }, 200);
797
798
  }
798
799
  togglePanel() {
799
800
  if (!this.vkEnabled) {
@@ -822,6 +823,7 @@ class SystelabVirtualKeyboardDirective {
822
823
  this.panelRef.instance.setActiveInput(this.elementRef.nativeElement);
823
824
  this.panelRef.instance.setLayout(currentLayout);
824
825
  this.panelRef.instance.config = this.config;
826
+ this.panelRef.instance.fixedBottom = this.vkFixedBottom;
825
827
  this.panelRef.instance.closePanel.subscribe(() => this.closePanel());
826
828
  this.panelRef.instance.keyPressed.subscribe((key) => this.vkOnKeyPress.emit(key));
827
829
  }
@@ -866,10 +868,10 @@ class SystelabVirtualKeyboardDirective {
866
868
  this.showKeyboardButtonElement = child;
867
869
  }
868
870
  }
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 }); }
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 }); }
871
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", 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 }); }
872
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", 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()", "window:touchend": "onDocumentScroll()", "window:wheel": "onDocumentScroll()", "document:scroll": "onDocumentScroll()", "click": "onClick()", "touchend": "onTouchEnd()" } }, ngImport: i0 }); }
871
873
  }
872
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardDirective, decorators: [{
874
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SystelabVirtualKeyboardDirective, decorators: [{
873
875
  type: Directive,
874
876
  args: [{
875
877
  selector: 'input[vkEnabled], textarea[vkEnabled]',
@@ -885,22 +887,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
885
887
  args: [SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG]
886
888
  }] }], propDecorators: { onDocumentScroll: [{
887
889
  type: HostListener,
888
- args: ['window:touchmove', ['$event']]
890
+ args: ['window:touchmove']
889
891
  }, {
890
892
  type: HostListener,
891
- args: ['window:touchend', ['$event']]
893
+ args: ['window:touchend']
892
894
  }, {
893
895
  type: HostListener,
894
- args: ['window:wheel', ['$event']]
896
+ args: ['window:wheel']
895
897
  }, {
896
898
  type: HostListener,
897
- args: ['document:scroll', ['$event']]
899
+ args: ['document:scroll']
898
900
  }], onClick: [{
899
901
  type: HostListener,
900
- args: ['click', ['$event']]
902
+ args: ['click']
901
903
  }], onTouchEnd: [{
902
904
  type: HostListener,
903
- args: ['touchend', ['$event']]
905
+ args: ['touchend']
904
906
  }], vkEnabled: [{
905
907
  type: Input
906
908
  }], vkFixedBottom: [{
@@ -938,11 +940,11 @@ class SystelabVirtualKeyboardModule {
938
940
  providers: [],
939
941
  };
940
942
  }
941
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
942
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardModule, declarations: [SystelabVirtualKeyboardDirective], imports: [CommonModule, OverlayModule], exports: [SystelabVirtualKeyboardDirective] }); }
943
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardModule, imports: [CommonModule, OverlayModule] }); }
943
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SystelabVirtualKeyboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
944
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.1", ngImport: i0, type: SystelabVirtualKeyboardModule, declarations: [SystelabVirtualKeyboardDirective], imports: [CommonModule, OverlayModule], exports: [SystelabVirtualKeyboardDirective] }); }
945
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SystelabVirtualKeyboardModule, imports: [CommonModule, OverlayModule] }); }
944
946
  }
945
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardModule, decorators: [{
947
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: SystelabVirtualKeyboardModule, decorators: [{
946
948
  type: NgModule,
947
949
  args: [{
948
950
  imports: [CommonModule, OverlayModule],
@@ -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 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":"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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 public fixedBottom: boolean;\n\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, e) => this.handleKeyPress(button, e),\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 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 event?.preventDefault();\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')\n @HostListener('window:touchend')\n @HostListener('window:wheel')\n @HostListener('document:scroll')\n onDocumentScroll() {\n if (!this.vkEnabled) {\n return;\n }\n this.overlayService.updatePosition();\n }\n\n @HostListener('click')\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')\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 setTimeout(() => {\n this.closePanel();\n }, 200);\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.fixedBottom = this.vkFixedBottom;\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":"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"}
package/package.json CHANGED
@@ -1,25 +1,25 @@
1
1
  {
2
2
  "name": "systelab-virtual-keyboard",
3
- "version": "20.3.0",
3
+ "version": "21.0.0",
4
4
  "peerDependencies": {
5
- "@angular/common": "^20.0.0",
6
- "@angular/core": "^20.0.0",
7
- "@angular/cdk": "^20.0.0",
8
- "simple-keyboard": "~3.8.71",
9
- "simple-keyboard-layouts": "~3.4.114"
5
+ "@angular/common": "^21.0.0",
6
+ "@angular/core": "^21.0.0",
7
+ "@angular/cdk": "^21.0.0",
8
+ "simple-keyboard": "~3.8.93",
9
+ "simple-keyboard-layouts": "~3.4.147"
10
10
  },
11
11
  "dependencies": {
12
12
  "tslib": "^2.3.0"
13
13
  },
14
14
  "sideEffects": false,
15
15
  "module": "fesm2022/systelab-virtual-keyboard.mjs",
16
- "typings": "index.d.ts",
16
+ "typings": "types/systelab-virtual-keyboard.d.ts",
17
17
  "exports": {
18
18
  "./package.json": {
19
19
  "default": "./package.json"
20
20
  },
21
21
  ".": {
22
- "types": "./index.d.ts",
22
+ "types": "./types/systelab-virtual-keyboard.d.ts",
23
23
  "default": "./fesm2022/systelab-virtual-keyboard.mjs"
24
24
  }
25
25
  }
@@ -46,6 +46,7 @@ declare class SystelabVirtualKeyboardComponent implements AfterViewInit {
46
46
  get isTextarea(): boolean;
47
47
  debug: boolean;
48
48
  config: SystelabVirtualKeyboard.Config;
49
+ fixedBottom: boolean;
49
50
  private selectedLayout;
50
51
  private keyboard;
51
52
  private caretPosition;
@@ -172,4 +173,4 @@ declare class SystelabVirtualKeyboardModule {
172
173
  }
173
174
 
174
175
  export { SystelabVirtualKeyboard, SystelabVirtualKeyboardDirective, SystelabVirtualKeyboardModule, factory };
175
- //# sourceMappingURL=index.d.ts.map
176
+ //# sourceMappingURL=systelab-virtual-keyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systelab-virtual-keyboard.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;;;;;;;;;;AAaG;AACA;;;AAaH;;AA+BP;AA+BA;AAiBA;AAIA;AA4DA;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;AAkBO;AAIP;AAMA;AAMA;AAyCA;AAUA;AAaA;;;AASH;;AC5MD;;;;;;;AAiBI;AAWA;;AAYA;;;;AAoBA;;;AAeA;;AAMA;AAKA;;;AAOU;;;;AAyBV;AAQO;AAMP;AAWA;AAwBA;AAaA;AAKA;AAKA;AAIA;AAIA;AAIA;;;AAUH;;AC5OD;AAQA;;AAkBkB;;;;AAMjB;;"}
package/index.d.ts.map DELETED
@@ -1 +0,0 @@
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;;"}