systelab-virtual-keyboard 20.0.0 → 20.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -15,7 +15,7 @@ NgModule({
15
15
  })
16
16
  ```
17
17
 
18
- Where config is an object with type *SystelabVirtualKeyboardConfig*. See [SystelabVirtualKeyboardConfig](src/lib/systelab-virtual-keyboard.config.ts) for details
18
+ Where config is an object with type *SystelabVirtualKeyboard.Config*. See [Config](src/lib/systelab-virtual-keyboard.public.ts) for details
19
19
 
20
20
  Then the virtual keyboard can be enabled for inputs or textareas. To enable it the attribute *vkEnabled* can be used into the desire HTML element. It can be binding dynamically in the same way *[vkEnabled]="vkEnabledVariable"*
21
21
 
@@ -27,15 +27,15 @@ Then the virtual keyboard can be enabled for inputs or textareas. To enable it t
27
27
 
28
28
  The default behaviour can be changed through some attributes:
29
29
 
30
- | Name | Type | Default | Description |
31
- |-----------|:----:|:-------:| ----------- |
32
- | vkEnabled | boolean | true | Enable the virtual keyboard for the element. If the property exists, the default value is true; if not, is false
33
- | vkFixedBottom | booles | true | Fix the virtual keyboard to the bottom of the page. If the property exists, the default value is true; if not, is false
34
- | vkConfig | SystelabVirtualKeyboardConfig | | Configuration object that overrides some default behaviours. See [SystelabVirtualKeyboardConfig](src/lib/systelab-virtual-keyboard.config.ts) for details
30
+ | Name | Type | Default | Description |
31
+ |-----------|:------------------------------:|:-------:| ----------- |
32
+ | vkEnabled | boolean | true | Enable the virtual keyboard for the element. If the property exists, the default value is true; if not, is false
33
+ | vkFixedBottom | booles | true | Fix the virtual keyboard to the bottom of the page. If the property exists, the default value is true; if not, is false
34
+ | vkConfig | SystelabVirtualKeyboard.Config | | Configuration object that overrides some default behaviours. See [Config](src/lib/systelab-virtual-keyboard.public.ts) for details
35
35
 
36
36
  ### Configuration object
37
37
 
38
- The configuration params are describe into the interface [SystelabVirtualKeyboardConfig](src/lib/systelab-virtual-keyboard.config.ts)
38
+ The configuration params are describe into the interface [Config](src/lib/systelab-virtual-keyboard.public.ts)
39
39
 
40
40
  | Name | Type | Default | Description |
41
41
  |-----------|:----:|:-------:| ----------- |
@@ -43,3 +43,14 @@ The configuration params are describe into the interface [SystelabVirtualKeyboar
43
43
  | inputMethod | SystelabVirtualKeyboardInputMethods | | The method detected for the keyboard to click or touch the keys
44
44
  | showButton | boolean | false | Show or hide the button for showing the keyboard
45
45
  | showOnMouseClick | boolean | false | Shows virtual keyboard upon mouse click on input field
46
+
47
+ ### Styling variables
48
+
49
+ | Name | Default | Description |
50
+ |-----------|:----:|-------------------------------------------|
51
+ | --systelab-virtual-keyboard-font-family | 'SF Mono', 'Menlo', 'Consolas', 'Courier New', monospace | Font family fonts to use
52
+ | --systelab-virtual-keyboard-background-color | #B2B2B2 | Background of the keyboard
53
+ | --systelab-virtual-keyboard-button-color | #E5E5E5 | Normal button background color
54
+ | --systelab-virtual-keyboard-button-font-color | #000000 | Normal button font color
55
+ | --systelab-virtual-keyboard-active-special-button-color | #4D4D4D | Special buttons activation background color
56
+ | --systelab-virtual-keyboard-active-special-button-font-color | #FFFFFF | Special buttons activation font color
@@ -14,36 +14,92 @@ import { CommonModule } from '@angular/common';
14
14
  * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is
15
15
  * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.
16
16
  */
17
- var SystelabVirtualKeyboardButton;
18
- (function (SystelabVirtualKeyboardButton) {
19
- SystelabVirtualKeyboardButton["Done"] = "{done}";
20
- SystelabVirtualKeyboardButton["Enter"] = "{enter}";
21
- SystelabVirtualKeyboardButton["Shift"] = "{shift}";
22
- SystelabVirtualKeyboardButton["Lock"] = "{lock}";
23
- SystelabVirtualKeyboardButton["Backspace"] = "{bksp}";
24
- SystelabVirtualKeyboardButton["Language"] = "{language}";
25
- SystelabVirtualKeyboardButton["Space"] = "{space}";
26
- SystelabVirtualKeyboardButton["Tab"] = "{tab}";
27
- })(SystelabVirtualKeyboardButton || (SystelabVirtualKeyboardButton = {}));
28
- var SystelabVirtualKeyboardLayouts;
29
- (function (SystelabVirtualKeyboardLayouts) {
30
- SystelabVirtualKeyboardLayouts["default"] = "default";
31
- SystelabVirtualKeyboardLayouts["shift"] = "shift";
32
- SystelabVirtualKeyboardLayouts["numeric"] = "numeric";
33
- })(SystelabVirtualKeyboardLayouts || (SystelabVirtualKeyboardLayouts = {}));
34
- var SystelabVirtualKeyboardInputMethods;
35
- (function (SystelabVirtualKeyboardInputMethods) {
36
- SystelabVirtualKeyboardInputMethods["onlyMouseEvents"] = "onlyMouseEvents";
37
- SystelabVirtualKeyboardInputMethods["onlyTouchEvents"] = "onlyTouchEvents";
38
- })(SystelabVirtualKeyboardInputMethods || (SystelabVirtualKeyboardInputMethods = {}));
39
- var SystelabVirtualKeyboardInputModes;
40
- (function (SystelabVirtualKeyboardInputModes) {
41
- SystelabVirtualKeyboardInputModes["text"] = "text";
42
- SystelabVirtualKeyboardInputModes["numeric"] = "numeric";
43
- SystelabVirtualKeyboardInputModes["password"] = "password";
44
- })(SystelabVirtualKeyboardInputModes || (SystelabVirtualKeyboardInputModes = {}));
17
+ var SystelabVirtualKeyboard;
18
+ (function (SystelabVirtualKeyboard) {
19
+ let InputMethods;
20
+ (function (InputMethods) {
21
+ InputMethods["onlyMouseEvents"] = "onlyMouseEvents";
22
+ InputMethods["onlyTouchEvents"] = "onlyTouchEvents";
23
+ })(InputMethods = SystelabVirtualKeyboard.InputMethods || (SystelabVirtualKeyboard.InputMethods = {}));
24
+ let Layouts;
25
+ (function (Layouts) {
26
+ Layouts["AlphaNumeric"] = "alpha-numeric";
27
+ Layouts["AlphaNumericShift"] = "alpha-numeric-shift";
28
+ Layouts["AlphaNumericUppercase"] = "alpha-numeric-uppercase";
29
+ Layouts["AlphaNumericUppercaseShift"] = "alpha-numeric-uppercase-shift";
30
+ Layouts["Numeric"] = "numeric";
31
+ Layouts["NumericShift"] = "numeric-shift";
32
+ })(Layouts = SystelabVirtualKeyboard.Layouts || (SystelabVirtualKeyboard.Layouts = {}));
33
+ })(SystelabVirtualKeyboard || (SystelabVirtualKeyboard = {}));
45
34
 
46
- const VIRTUAL_KEYBOARD_CONFIG = new InjectionToken('VIRTUAL_KEYBOARD_CONFIG');
35
+ /*
36
+ * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.
37
+ * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its
38
+ * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation
39
+ * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or
40
+ * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is
41
+ * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.
42
+ */
43
+ var SystelabVirtualKeyboardConstants;
44
+ (function (SystelabVirtualKeyboardConstants) {
45
+ SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG = new InjectionToken('VIRTUAL_KEYBOARD_CONFIG');
46
+ SystelabVirtualKeyboardConstants.LayoutDefinitions = {
47
+ 'default': [
48
+ '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
49
+ '{tab} q w e r t y u i o p { } |',
50
+ '{lock} a s d f g h j k l : " {enter}',
51
+ '{shift} z x c v b n m < > ? {shift}',
52
+ '{space}',
53
+ ],
54
+ [SystelabVirtualKeyboard.Layouts.AlphaNumeric]: [
55
+ '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
56
+ '{tab} q w e r t y u i o p { } |',
57
+ '{lock} a s d f g h j k l : " {enter}',
58
+ '{shift} z x c v b n m < > ? {shift}',
59
+ '{space}',
60
+ ],
61
+ [SystelabVirtualKeyboard.Layouts.AlphaNumericShift]: [
62
+ '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',
63
+ '{tab} Q W E R T Y U I O P [ ] \\',
64
+ "{lock} A S D F G H J K L ; ' {enter}",
65
+ '{shift} Z X C V B N M , . / {shift}',
66
+ '{space}',
67
+ ],
68
+ [SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase]: [
69
+ '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
70
+ '{tab} Q W E R T Y U I O P [ ] \\',
71
+ "{lock} A S D F G H J K L ; ' {enter}",
72
+ '{shift} Z X C V B N M , . / {shift}',
73
+ '{space}',
74
+ ],
75
+ [SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift]: [
76
+ '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',
77
+ '{tab} Q W E R T Y U I O P [ ] \\',
78
+ "{lock} A S D F G H J K L ; ' {enter}",
79
+ '{shift} Z X C V B N M , . / {shift}',
80
+ '{space}',
81
+ ],
82
+ [SystelabVirtualKeyboard.Layouts.Numeric]: ['7 8 9 {bksp}', '4 5 6 +', '1 2 3 -', '{shift} 0 . {enter}'],
83
+ [SystelabVirtualKeyboard.Layouts.NumericShift]: ['! @ # {bksp}', '$ % _ =', '& * ( -', '{shift} ) . {enter}'],
84
+ };
85
+ let Button;
86
+ (function (Button) {
87
+ Button["Done"] = "{done}";
88
+ Button["Enter"] = "{enter}";
89
+ Button["Shift"] = "{shift}";
90
+ Button["Lock"] = "{lock}";
91
+ Button["Backspace"] = "{bksp}";
92
+ Button["Language"] = "{language}";
93
+ Button["Space"] = "{space}";
94
+ Button["Tab"] = "{tab}";
95
+ })(Button = SystelabVirtualKeyboardConstants.Button || (SystelabVirtualKeyboardConstants.Button = {}));
96
+ let InputModes;
97
+ (function (InputModes) {
98
+ InputModes["text"] = "text";
99
+ InputModes["numeric"] = "numeric";
100
+ InputModes["password"] = "password";
101
+ })(InputModes = SystelabVirtualKeyboardConstants.InputModes || (SystelabVirtualKeyboardConstants.InputModes = {}));
102
+ })(SystelabVirtualKeyboardConstants || (SystelabVirtualKeyboardConstants = {}));
47
103
 
48
104
  class SystelabVirtualKeyboardComponent {
49
105
  handleKeyUp(event) {
@@ -64,36 +120,19 @@ class SystelabVirtualKeyboardComponent {
64
120
  this.elementRef = elementRef;
65
121
  this.virtualKeyboardConfig = virtualKeyboardConfig;
66
122
  this.debug = false;
67
- this.selectedLayout = SystelabVirtualKeyboardLayouts.default;
123
+ this.selectedLayout = 'default';
68
124
  this.caretPosition = null;
69
125
  this.caretPositionEnd = null;
70
126
  this.shiftPressed = false;
127
+ this.specialKeysAlwaysUppercase = false;
128
+ this.capsLockOn = false;
71
129
  this.closePanel = new EventEmitter();
72
130
  }
73
131
  ngAfterViewInit() {
74
- const layout = {
75
- [SystelabVirtualKeyboardLayouts.default]: [
76
- '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
77
- '{tab} q w e r t y u i o p [ ] \\',
78
- "{lock} a s d f g h j k l ; ' {enter}",
79
- '{shift} z x c v b n m , . / {shift}',
80
- '{space}',
81
- ],
82
- [SystelabVirtualKeyboardLayouts.shift]: [
83
- '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',
84
- '{tab} Q W E R T Y U I O P { } |',
85
- '{lock} A S D F G H J K L : " {enter}',
86
- '{shift} Z X C V B N M &lt; &gt; ? {shift}',
87
- '{space}',
88
- ],
89
- [SystelabVirtualKeyboardLayouts.numeric]: ['7 8 9', '4 5 6', '1 2 3', '0 {bksp}'],
90
- };
91
132
  const keyboardOptions = this.prepareKeyboardConfig();
92
133
  this.keyboard = new SimpleKeyboard('.simple-keyboard', keyboardOptions);
134
+ this.setButtonClasses();
93
135
  this.setLayout(this.selectedLayout);
94
- if (this.debug) {
95
- console.log('Layout: ', layout);
96
- }
97
136
  }
98
137
  setActiveInput(input) {
99
138
  this.activeInputElement = input;
@@ -114,49 +153,33 @@ class SystelabVirtualKeyboardComponent {
114
153
  this.keyboard.setOptions({
115
154
  layoutName: layout,
116
155
  });
156
+ if (layout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase || layout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift) {
157
+ this.specialKeysAlwaysUppercase = true;
158
+ this.addUppercaseClass();
159
+ }
117
160
  }
118
161
  }
119
162
  prepareKeyboardConfig() {
120
- const layout = {
121
- [SystelabVirtualKeyboardLayouts.default]: [
122
- '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
123
- '{tab} q w e r t y u i o p [ ] \\',
124
- "{lock} a s d f g h j k l ; ' {enter}",
125
- '{shift} z x c v b n m , . / {shift}',
126
- '{space}',
127
- ],
128
- [SystelabVirtualKeyboardLayouts.shift]: [
129
- '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',
130
- '{tab} Q W E R T Y U I O P { } |',
131
- '{lock} A S D F G H J K L : " {enter}',
132
- '{shift} Z X C V B N M &lt; &gt; ? {shift}',
133
- '{space}',
134
- ],
135
- [SystelabVirtualKeyboardLayouts.numeric]: ['7 8 9', '4 5 6', '1 2 3', '0 {bksp}'],
136
- };
137
163
  let keyboardOptions = {
138
164
  onKeyPress: (button) => this.handleKeyPress(button),
139
165
  mergeDisplay: true,
140
- theme: 'hg-theme-default hg-layout-default myTheme',
166
+ theme: 'hg-theme-default hg-layout-default systelab-virtual-keyboard-theme',
141
167
  display: {
142
- [SystelabVirtualKeyboardButton.Backspace]: 'delete',
168
+ [SystelabVirtualKeyboardConstants.Button.Backspace]: 'back',
169
+ [SystelabVirtualKeyboardConstants.Button.Enter]: 'enter',
170
+ [SystelabVirtualKeyboardConstants.Button.Lock]: 'lock',
143
171
  },
144
- buttonTheme: [
145
- {
146
- class: 'virtual-keyboard-delete-button',
147
- buttons: `${SystelabVirtualKeyboardButton.Backspace}`,
148
- },
149
- ],
150
- layout,
172
+ buttonTheme: this.buildButtonThemes(),
173
+ layout: SystelabVirtualKeyboardConstants.LayoutDefinitions,
151
174
  };
152
175
  if (this.virtualKeyboardConfig?.hasOwnProperty('inputMethod')) {
153
- if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboardInputMethods.onlyMouseEvents) {
176
+ if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboard.InputMethods.onlyMouseEvents) {
154
177
  keyboardOptions = {
155
178
  ...keyboardOptions,
156
179
  useMouseEvents: true,
157
180
  };
158
181
  }
159
- else if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboardInputMethods.onlyTouchEvents) {
182
+ else if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboard.InputMethods.onlyTouchEvents) {
160
183
  keyboardOptions = {
161
184
  ...keyboardOptions,
162
185
  useTouchEvents: true,
@@ -165,18 +188,57 @@ class SystelabVirtualKeyboardComponent {
165
188
  }
166
189
  return keyboardOptions;
167
190
  }
191
+ buildButtonThemes() {
192
+ return [
193
+ {
194
+ class: 'virtual-keyboard-delete-button',
195
+ buttons: `${SystelabVirtualKeyboardConstants.Button.Backspace}`,
196
+ },
197
+ {
198
+ class: 'virtual-keyboard-enter-button',
199
+ buttons: `${SystelabVirtualKeyboardConstants.Button.Enter}`,
200
+ },
201
+ {
202
+ class: 'virtual-keyboard-function-button',
203
+ buttons: `${SystelabVirtualKeyboardConstants.Button.Shift} ${SystelabVirtualKeyboardConstants.Button.Lock}`,
204
+ }
205
+ ];
206
+ }
207
+ setButtonClasses() {
208
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-button');
209
+ }
168
210
  handleKeyPress(button, e) {
169
211
  if (this.debug) {
170
212
  console.log('Key press:', button);
171
213
  }
172
- if (button[0] === '&' && button.length > 1) {
214
+ if (button.startsWith('&') && button.length > 1) {
173
215
  button = new DOMParser().parseFromString(button, 'text/html').body.textContent;
174
216
  }
175
- if (button === SystelabVirtualKeyboardButton.Shift || button === SystelabVirtualKeyboardButton.Lock) {
176
- this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;
217
+ if (button === SystelabVirtualKeyboardConstants.Button.Shift) {
218
+ this.shiftPressed = !this.shiftPressed;
219
+ this.toggleShiftLayout();
220
+ if (this.shiftPressed) {
221
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');
222
+ this.addUppercaseClass();
223
+ }
224
+ else {
225
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');
226
+ this.removeUppercaseClass();
227
+ }
228
+ }
229
+ else if (button === SystelabVirtualKeyboardConstants.Button.Lock) {
230
+ this.capsLockOn = !this.capsLockOn;
177
231
  this.toggleShiftLayout();
232
+ if (this.capsLockOn) {
233
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-lock-active');
234
+ this.addUppercaseClass();
235
+ }
236
+ else {
237
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-lock-active');
238
+ this.removeUppercaseClass();
239
+ }
178
240
  }
179
- else if (button === SystelabVirtualKeyboardButton.Done) {
241
+ else if (button === SystelabVirtualKeyboardConstants.Button.Done) {
180
242
  this.closePanel.emit();
181
243
  return;
182
244
  }
@@ -193,23 +255,42 @@ class SystelabVirtualKeyboardComponent {
193
255
  this.dispatchEvents(button);
194
256
  if (this.shiftPressed) {
195
257
  this.toggleShiftLayout();
258
+ this.removeUppercaseClass();
196
259
  }
197
- this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;
260
+ this.shiftPressed = false;
261
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');
262
+ }
263
+ addUppercaseClass() {
264
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-uppercase');
265
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-uppercase');
266
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Tab, 'virtual-keyboard-uppercase');
267
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Backspace, 'virtual-keyboard-uppercase');
268
+ this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Enter, 'virtual-keyboard-uppercase');
269
+ }
270
+ removeUppercaseClass() {
271
+ if (this.specialKeysAlwaysUppercase) {
272
+ return;
273
+ }
274
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-uppercase');
275
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-uppercase');
276
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Tab, 'virtual-keyboard-uppercase');
277
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Backspace, 'virtual-keyboard-uppercase');
278
+ this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Enter, 'virtual-keyboard-uppercase');
198
279
  }
199
280
  handleButtonOutput(button) {
200
281
  const commonParams = this.getCommonParams();
201
282
  let output = this.activeInputElement?.value || '';
202
283
  if (!this.isStandardButton(button)) {
203
- if (button === SystelabVirtualKeyboardButton.Backspace) {
284
+ if (button === SystelabVirtualKeyboardConstants.Button.Backspace) {
204
285
  output = this.removeAt(output, ...commonParams);
205
286
  }
206
- else if (button === SystelabVirtualKeyboardButton.Space) {
287
+ else if (button === SystelabVirtualKeyboardConstants.Button.Space) {
207
288
  output = this.addStringAt(output, ' ', ...commonParams);
208
289
  }
209
- else if (button === SystelabVirtualKeyboardButton.Tab) {
290
+ else if (button === SystelabVirtualKeyboardConstants.Button.Tab) {
210
291
  // Do nothing for tab
211
292
  }
212
- else if (button === SystelabVirtualKeyboardButton.Enter) {
293
+ else if (button === SystelabVirtualKeyboardConstants.Button.Enter) {
213
294
  if (this.isTextarea) {
214
295
  output = this.addStringAt(output, '\n', ...commonParams);
215
296
  }
@@ -228,10 +309,10 @@ class SystelabVirtualKeyboardComponent {
228
309
  }
229
310
  isAcceptedNonStandardButton(button) {
230
311
  return [
231
- SystelabVirtualKeyboardButton.Backspace.toString(),
232
- SystelabVirtualKeyboardButton.Space.toString(),
233
- SystelabVirtualKeyboardButton.Tab.toString(),
234
- SystelabVirtualKeyboardButton.Enter.toString(),
312
+ SystelabVirtualKeyboardConstants.Button.Backspace.toString(),
313
+ SystelabVirtualKeyboardConstants.Button.Space.toString(),
314
+ SystelabVirtualKeyboardConstants.Button.Tab.toString(),
315
+ SystelabVirtualKeyboardConstants.Button.Enter.toString(),
235
316
  ].includes(button);
236
317
  }
237
318
  dispatchEvents(button) {
@@ -239,7 +320,7 @@ class SystelabVirtualKeyboardComponent {
239
320
  const eventInit = {
240
321
  bubbles: true,
241
322
  cancelable: true,
242
- shiftKey: this.selectedLayout === SystelabVirtualKeyboardLayouts.shift,
323
+ shiftKey: this.selectedLayout === SystelabVirtualKeyboard.Layouts.AlphaNumericShift,
243
324
  key: key,
244
325
  code: code,
245
326
  location: 0,
@@ -262,7 +343,7 @@ class SystelabVirtualKeyboardComponent {
262
343
  key = key.charAt(0).toUpperCase() + key.slice(1);
263
344
  code = key;
264
345
  // Fix to standard key code
265
- if (code.toLowerCase() === SystelabVirtualKeyboardButton.Backspace.slice(1, SystelabVirtualKeyboardButton.Backspace.length - 1).toLowerCase()) {
346
+ if (code.toLowerCase() === SystelabVirtualKeyboardConstants.Button.Backspace.slice(1, SystelabVirtualKeyboardConstants.Button.Backspace.length - 1).toLowerCase()) {
266
347
  code = 'Backspace';
267
348
  }
268
349
  }
@@ -274,11 +355,28 @@ class SystelabVirtualKeyboardComponent {
274
355
  }
275
356
  toggleShiftLayout() {
276
357
  const currentLayout = this.keyboard.options.layoutName;
277
- const selectedLayout = currentLayout === SystelabVirtualKeyboardLayouts.default ? SystelabVirtualKeyboardLayouts.shift : SystelabVirtualKeyboardLayouts.default;
278
- this.setLayout(selectedLayout);
358
+ let selectedLayout;
359
+ switch (currentLayout) {
360
+ case SystelabVirtualKeyboard.Layouts.AlphaNumeric:
361
+ case SystelabVirtualKeyboard.Layouts.AlphaNumericShift:
362
+ selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.AlphaNumeric ? SystelabVirtualKeyboard.Layouts.AlphaNumericShift : SystelabVirtualKeyboard.Layouts.AlphaNumeric;
363
+ break;
364
+ case SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase:
365
+ case SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift:
366
+ selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase ? SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift : SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase;
367
+ break;
368
+ case SystelabVirtualKeyboard.Layouts.Numeric:
369
+ case SystelabVirtualKeyboard.Layouts.NumericShift:
370
+ selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.Numeric ? SystelabVirtualKeyboard.Layouts.NumericShift : SystelabVirtualKeyboard.Layouts.Numeric;
371
+ break;
372
+ default:
373
+ }
374
+ if (selectedLayout) {
375
+ this.setLayout(selectedLayout);
376
+ }
279
377
  }
280
378
  isStandardButton(button) {
281
- return button && !(button[0] === '{' && button[button.length - 1] === '}');
379
+ return button && !(button.startsWith('{') && button.endsWith('}'));
282
380
  }
283
381
  /*
284
382
  * OUTPUT STRING METHODS
@@ -344,7 +442,7 @@ class SystelabVirtualKeyboardComponent {
344
442
  */
345
443
  this.setCaretPosition(event.target.selectionStart, event.target.selectionEnd);
346
444
  if (this.debug) {
347
- console.log('Caret at:', this.caretPosition, this.caretPositionEnd, event && event.target.tagName.toLowerCase(), event);
445
+ console.log('Caret at:', this.caretPosition, this.caretPositionEnd, event?.target.tagName.toLowerCase(), event);
348
446
  }
349
447
  }
350
448
  else if (event.type === 'pointerup' && this.activeInputElement === document.activeElement) {
@@ -391,17 +489,17 @@ class SystelabVirtualKeyboardComponent {
391
489
  this.caretPosition = position;
392
490
  this.caretPositionEnd = endPosition;
393
491
  }
394
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardComponent, deps: [{ token: i0.ElementRef }, { token: VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
395
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.3", type: SystelabVirtualKeyboardComponent, isStandalone: true, selector: "systelab-virtual-keyboard.component", outputs: { closePanel: "closePanel" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:pointerup": "handleMouseUp($event)", "window:mouseup": "handleMouseUp($event)" } }, ngImport: i0, template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:var(--systelab-virtual-keyboard-font-family)}\n"] }); }
492
+ 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 }); }
493
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.3", type: SystelabVirtualKeyboardComponent, isStandalone: true, selector: "systelab-virtual-keyboard.component", outputs: { closePanel: "closePanel" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:pointerup": "handleMouseUp($event)", "window:mouseup": "handleMouseUp($event)" } }, ngImport: i0, template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n" }); }
396
494
  }
397
495
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardComponent, decorators: [{
398
496
  type: Component,
399
- args: [{ selector: 'systelab-virtual-keyboard.component', standalone: true, imports: [], template: "<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n", styles: [":host{width:100%}.simple-keyboard.hg-theme-default.myTheme{font-family:var(--systelab-virtual-keyboard-font-family)}\n"] }]
497
+ 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" }]
400
498
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: undefined, decorators: [{
401
499
  type: Optional
402
500
  }, {
403
501
  type: Inject,
404
- args: [VIRTUAL_KEYBOARD_CONFIG]
502
+ args: [SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG]
405
503
  }] }], propDecorators: { handleKeyUp: [{
406
504
  type: HostListener,
407
505
  args: ['window:keyup', ['$event']]
@@ -428,7 +526,7 @@ class SystelabVirtualKeyboardOverlayService {
428
526
  isOpen() {
429
527
  return this.open;
430
528
  }
431
- create(inputOrigin, showKeyboardButtonElement, fixedBottom, layout = SystelabVirtualKeyboardLayouts.default) {
529
+ create(inputOrigin, showKeyboardButtonElement, fixedBottom, layout = 'default') {
432
530
  this.inputOrigin = inputOrigin;
433
531
  this.fixedBottom = fixedBottom;
434
532
  this.showKeyboardButtonElement = showKeyboardButtonElement;
@@ -550,7 +648,7 @@ class SystelabVirtualKeyboardOverlayService {
550
648
  ]);
551
649
  }
552
650
  getOverlaySize() {
553
- const overlayWidth = this.layout === SystelabVirtualKeyboardLayouts.numeric ? '400px' : '1200px';
651
+ const overlayWidth = this.layout === SystelabVirtualKeyboard.Layouts.Numeric ? '331px' : '1200px';
554
652
  return {
555
653
  width: overlayWidth,
556
654
  maxWidth: overlayWidth,
@@ -714,22 +812,22 @@ class SystelabVirtualKeyboardDirective {
714
812
  return this.config.layout;
715
813
  }
716
814
  if (this.isInputAlphabetic(activeInputElement)) {
717
- return SystelabVirtualKeyboardLayouts.default;
815
+ return SystelabVirtualKeyboard.Layouts.AlphaNumeric;
718
816
  }
719
817
  else if (this.isInputNumeric(activeInputElement)) {
720
- return SystelabVirtualKeyboardLayouts.numeric;
818
+ return SystelabVirtualKeyboard.Layouts.Numeric;
721
819
  }
722
820
  else {
723
- return SystelabVirtualKeyboardLayouts.default;
821
+ return SystelabVirtualKeyboard.Layouts.AlphaNumeric;
724
822
  }
725
823
  }
726
824
  isInputAlphabetic(activeInputElement) {
727
825
  const inputMode = this.getInputMode(activeInputElement);
728
- return inputMode && [SystelabVirtualKeyboardInputModes.text, SystelabVirtualKeyboardInputModes.password].some((i) => i === inputMode);
826
+ return inputMode && [SystelabVirtualKeyboardConstants.InputModes.text, SystelabVirtualKeyboardConstants.InputModes.password].some((i) => i === inputMode);
729
827
  }
730
828
  isInputNumeric(activeInputElement) {
731
829
  const inputMode = this.getInputMode(activeInputElement);
732
- return inputMode && [SystelabVirtualKeyboardInputModes.numeric].some((i) => i === inputMode);
830
+ return inputMode && [SystelabVirtualKeyboardConstants.InputModes.numeric].some((i) => i === inputMode);
733
831
  }
734
832
  getInputMode(activeInputElement) {
735
833
  return activeInputElement?.inputMode ?? activeInputElement?.type;
@@ -750,7 +848,7 @@ class SystelabVirtualKeyboardDirective {
750
848
  this.showKeyboardButtonElement = child;
751
849
  }
752
850
  }
753
- 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: VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
851
+ 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 }); }
754
852
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.3", type: SystelabVirtualKeyboardDirective, isStandalone: false, selector: "input[vkEnabled], textarea[vkEnabled]", inputs: { vkEnabled: "vkEnabled", vkFixedBottom: "vkFixedBottom", vkDebug: "vkDebug", vkConfig: "vkConfig" }, host: { listeners: { "window:touchmove": "onDocumentScroll($event)", "window:touchend": "onDocumentScroll($event)", "window:wheel": "onDocumentScroll($event)", "document:scroll": "onDocumentScroll($event)", "click": "onClick($event)", "touchend": "onTouchEnd($event)" } }, ngImport: i0 }); }
755
853
  }
756
854
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: SystelabVirtualKeyboardDirective, decorators: [{
@@ -766,7 +864,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
766
864
  type: Optional
767
865
  }, {
768
866
  type: Inject,
769
- args: [VIRTUAL_KEYBOARD_CONFIG]
867
+ args: [SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG]
770
868
  }] }], propDecorators: { onDocumentScroll: [{
771
869
  type: HostListener,
772
870
  args: ['window:touchmove', ['$event']]
@@ -809,7 +907,7 @@ class SystelabVirtualKeyboardModule {
809
907
  providers: [
810
908
  SystelabVirtualKeyboardOverlayService,
811
909
  {
812
- provide: VIRTUAL_KEYBOARD_CONFIG, useValue: conf
910
+ provide: SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG, useValue: conf
813
911
  }
814
912
  ]
815
913
  };
@@ -841,5 +939,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
841
939
  * Generated bundle index. Do not edit.
842
940
  */
843
941
 
844
- export { SystelabVirtualKeyboardButton, SystelabVirtualKeyboardDirective, SystelabVirtualKeyboardInputMethods, SystelabVirtualKeyboardInputModes, SystelabVirtualKeyboardLayouts, SystelabVirtualKeyboardModule, factory };
942
+ export { SystelabVirtualKeyboard, SystelabVirtualKeyboardDirective, SystelabVirtualKeyboardModule, factory };
845
943
  //# sourceMappingURL=systelab-virtual-keyboard.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"systelab-virtual-keyboard.mjs","sources":["../../../projects/systelab-virtual-keyboard/src/lib/constants.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.config.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.html","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard-overlay.service.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.directive.ts","../../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.module.ts","../../../projects/systelab-virtual-keyboard/src/public-api.ts","../../../projects/systelab-virtual-keyboard/src/systelab-virtual-keyboard.ts"],"sourcesContent":["/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nexport enum SystelabVirtualKeyboardButton {\n Done = '{done}',\n Enter = '{enter}',\n Shift = '{shift}',\n Lock = '{lock}',\n Backspace = '{bksp}',\n Language = '{language}',\n Space = '{space}',\n Tab = '{tab}',\n}\n\nexport enum SystelabVirtualKeyboardLayouts {\n default = 'default',\n shift = 'shift',\n numeric = 'numeric',\n}\n\nexport enum SystelabVirtualKeyboardInputMethods {\n onlyMouseEvents = 'onlyMouseEvents',\n onlyTouchEvents = 'onlyTouchEvents',\n}\n\nexport enum SystelabVirtualKeyboardInputModes {\n text = 'text',\n numeric = 'numeric',\n password = 'password',\n}\n","import { InjectionToken } from '@angular/core';\nimport { SystelabVirtualKeyboardInputMethods, SystelabVirtualKeyboardLayouts } from './constants';\n\nexport const VIRTUAL_KEYBOARD_CONFIG = new InjectionToken<SystelabVirtualKeyboardConfig>('VIRTUAL_KEYBOARD_CONFIG');\n\nexport interface SystelabVirtualKeyboardConfig {\n layout?: SystelabVirtualKeyboardLayouts;\n inputMethod?: SystelabVirtualKeyboardInputMethods;\n showIcon?: boolean;\n showOnMouseClick?: boolean;\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Optional,\n Output\n} from '@angular/core';\nimport { SimpleKeyboard } from 'simple-keyboard';\nimport {\n SystelabVirtualKeyboardButton,\n SystelabVirtualKeyboardInputMethods,\n SystelabVirtualKeyboardLayouts\n} from './constants';\nimport { SystelabVirtualKeyboardConfig, VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';\nimport { KeyboardOptions } from 'simple-keyboard/build/interfaces';\n\n@Component({\n selector: 'systelab-virtual-keyboard.component',\n standalone: true,\n imports: [],\n templateUrl: './systelab-virtual-keyboard.component.html',\n styleUrl: 'systelab-virtual-keyboard.component.scss',\n})\nexport class SystelabVirtualKeyboardComponent implements AfterViewInit {\n @HostListener('window:keyup', ['$event'])\n handleKeyUp(event: KeyboardEvent): void {\n if (event.isTrusted) {\n this.caretEventHandler(event);\n }\n }\n\n @HostListener('window:pointerup', ['$event'])\n @HostListener('window:mouseup', ['$event'])\n handleMouseUp(event: PointerEvent): void {\n this.caretEventHandler(event);\n }\n\n get maxLength(): number {\n return this.activeInputElement?.maxLength ?? -1;\n }\n\n get isTextarea(): boolean {\n return this.activeInputElement?.type === 'textarea';\n }\n\n public debug = false;\n private selectedLayout: SystelabVirtualKeyboardLayouts = SystelabVirtualKeyboardLayouts.default;\n private keyboard: SimpleKeyboard;\n private caretPosition: number | null = null;\n private caretPositionEnd: number | null = null;\n private activeInputElement!: HTMLInputElement | HTMLTextAreaElement | null;\n private shiftPressed: boolean = false;\n\n @Output() closePanel = new EventEmitter<void>();\n\n constructor(private elementRef: ElementRef<HTMLInputElement>, @Optional() @Inject(VIRTUAL_KEYBOARD_CONFIG) private virtualKeyboardConfig: SystelabVirtualKeyboardConfig,) {\n }\n\n ngAfterViewInit() {\n const layout = {\n [SystelabVirtualKeyboardLayouts.default]: [\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\n '{tab} q w e r t y u i o p [ ] \\\\',\n \"{lock} a s d f g h j k l ; ' {enter}\",\n '{shift} z x c v b n m , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.shift]: [\n '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',\n '{tab} Q W E R T Y U I O P { } |',\n '{lock} A S D F G H J K L : \" {enter}',\n '{shift} Z X C V B N M &lt; &gt; ? {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.numeric]: ['7 8 9', '4 5 6', '1 2 3', '0 {bksp}'],\n };\n\n const keyboardOptions: KeyboardOptions = this.prepareKeyboardConfig();\n this.keyboard = new SimpleKeyboard('.simple-keyboard', keyboardOptions);\n this.setLayout(this.selectedLayout);\n if (this.debug) {\n console.log('Layout: ', layout);\n }\n }\n\n public setActiveInput(input: HTMLInputElement | HTMLTextAreaElement): void {\n this.activeInputElement = input;\n\n if (this.debug) {\n const inputType = this.activeInputElement?.type;\n console.log('Layout:', `${inputType}_${this.selectedLayout}`);\n }\n\n const { selectionStart, selectionEnd } = this.activeInputElement;\n this.setCaretPosition(selectionStart, selectionEnd);\n\n if (this.debug) {\n console.log('Caret start at:', this.caretPosition, this.caretPositionEnd);\n }\n this.focusActiveInput();\n }\n\n public setLayout(layout: SystelabVirtualKeyboardLayouts): void {\n this.selectedLayout = layout;\n if (this.keyboard) {\n this.keyboard.setOptions({\n layoutName: layout,\n });\n }\n }\n\n private prepareKeyboardConfig(): KeyboardOptions {\n const layout = {\n [SystelabVirtualKeyboardLayouts.default]: [\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\n '{tab} q w e r t y u i o p [ ] \\\\',\n \"{lock} a s d f g h j k l ; ' {enter}\",\n '{shift} z x c v b n m , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.shift]: [\n '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',\n '{tab} Q W E R T Y U I O P { } |',\n '{lock} A S D F G H J K L : \" {enter}',\n '{shift} Z X C V B N M &lt; &gt; ? {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboardLayouts.numeric]: ['7 8 9', '4 5 6', '1 2 3', '0 {bksp}'],\n };\n\n let keyboardOptions: KeyboardOptions = {\n onKeyPress: (button) => this.handleKeyPress(button),\n mergeDisplay: true,\n theme: 'hg-theme-default hg-layout-default myTheme',\n display: {\n [SystelabVirtualKeyboardButton.Backspace]: 'delete',\n },\n buttonTheme: [\n {\n class: 'virtual-keyboard-delete-button',\n buttons: `${SystelabVirtualKeyboardButton.Backspace}`,\n },\n ],\n layout,\n };\n\n if (this.virtualKeyboardConfig?.hasOwnProperty('inputMethod')) {\n if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboardInputMethods.onlyMouseEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useMouseEvents: true,\n }\n } else if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboardInputMethods.onlyTouchEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useTouchEvents: true,\n }\n }\n }\n\n return keyboardOptions;\n }\n\n private handleKeyPress(button: string, e?: Event): void {\n if (this.debug) {\n console.log('Key press:', button);\n }\n\n if (button[0] === '&' && button.length > 1) {\n button = new DOMParser().parseFromString(button, 'text/html').body.textContent;\n }\n\n if (button === SystelabVirtualKeyboardButton.Shift || button === SystelabVirtualKeyboardButton.Lock) {\n this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;\n this.toggleShiftLayout();\n } else if (button === SystelabVirtualKeyboardButton.Done) {\n this.closePanel.emit();\n return;\n }\n\n if (!this.isAcceptedNonStandardButton(button) && !this.isStandardButton(button)) {\n return;\n }\n\n const output = this.handleButtonOutput(button);\n\n if (this.activeInputElement) {\n this.activeInputElement.value = output;\n\n if (this.debug) {\n console.log('Caret at:', this.caretPosition, this.caretPositionEnd, 'Button', e);\n }\n }\n\n this.dispatchEvents(button);\n\n if (this.shiftPressed) {\n this.toggleShiftLayout();\n }\n this.shiftPressed = button === SystelabVirtualKeyboardButton.Shift;\n }\n\n private handleButtonOutput(button: string): string {\n const commonParams: [number, number, boolean] = this.getCommonParams();\n let output = this.activeInputElement?.value || '';\n if (!this.isStandardButton(button)) {\n if (button === SystelabVirtualKeyboardButton.Backspace) {\n output = this.removeAt(output, ...commonParams);\n } else if (button === SystelabVirtualKeyboardButton.Space) {\n output = this.addStringAt(output, ' ', ...commonParams);\n } else if (button === SystelabVirtualKeyboardButton.Tab) {\n // Do nothing for tab\n } else if (button === SystelabVirtualKeyboardButton.Enter) {\n if (this.isTextarea) {\n output = this.addStringAt(output, '\\n', ...commonParams);\n }\n } else {\n return;\n }\n } else {\n output = this.addStringAt(output, button, ...commonParams);\n }\n\n return output;\n }\n\n private getCommonParams(): [number, number, boolean] {\n return [this.caretPosition || 0, this.caretPositionEnd || 0, true];\n }\n\n private isAcceptedNonStandardButton(button: string): boolean {\n return [\n SystelabVirtualKeyboardButton.Backspace.toString(),\n SystelabVirtualKeyboardButton.Space.toString(),\n SystelabVirtualKeyboardButton.Tab.toString(),\n SystelabVirtualKeyboardButton.Enter.toString(),\n ].includes(button);\n }\n\n private dispatchEvents(button: string) {\n const {key, code} = this.convertFromButtonToCode(button);\n\n const eventInit: KeyboardEventInit = {\n bubbles: true,\n cancelable: true,\n shiftKey: this.selectedLayout === SystelabVirtualKeyboardLayouts.shift,\n key: key,\n code: code,\n location: 0,\n };\n // Simulate all needed events on base element\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keydown', eventInit));\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keypress', eventInit));\n this.activeInputElement?.dispatchEvent(new Event('input', {bubbles: true}));\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keyup', eventInit));\n }\n\n /*\n * AUXILIARY METHODS\n * */\n private convertFromButtonToCode(button: string): { key: string; code: string } {\n let key: string;\n let code: string;\n if (button.includes('{') && button.includes('}')) {\n // Capitalize name\n key = button.slice(1, button.length - 1).toLowerCase();\n key = key.charAt(0).toUpperCase() + key.slice(1);\n code = key;\n\n // Fix to standard key code\n if (code.toLowerCase() === SystelabVirtualKeyboardButton.Backspace.slice(1, SystelabVirtualKeyboardButton.Backspace.length - 1).toLowerCase()) {\n code = 'Backspace';\n }\n } else {\n key = button;\n code = Number.isInteger(Number(button)) ? `Digit${button}` : `Key${button.toUpperCase()}`;\n }\n\n return {key, code};\n }\n\n private toggleShiftLayout(): void {\n const currentLayout = this.keyboard.options.layoutName;\n const selectedLayout: SystelabVirtualKeyboardLayouts =\n currentLayout === SystelabVirtualKeyboardLayouts.default ? SystelabVirtualKeyboardLayouts.shift : SystelabVirtualKeyboardLayouts.default;\n\n this.setLayout(selectedLayout);\n }\n\n private isStandardButton(button: string) {\n return button && !(button[0] === '{' && button[button.length - 1] === '}');\n }\n\n /*\n * OUTPUT STRING METHODS\n * */\n private removeAt(source: string, position = source.length, positionEnd = source.length, moveCaret = false): string {\n if (position === 0 && positionEnd === 0) {\n return source;\n }\n\n let output: string;\n\n if (position === positionEnd) {\n if (position && position >= 0) {\n output = source.slice(0, position - 1) + source.slice(position);\n if (moveCaret) {\n this.updateCaretPosition(1, true);\n }\n } else {\n output = source.slice(0, -1);\n if (moveCaret) {\n this.updateCaretPosition(1, true);\n }\n }\n } else {\n output = source.slice(0, position) + source.slice(positionEnd);\n if (moveCaret) {\n this.setCaretPosition(position);\n }\n }\n\n return output;\n }\n\n private addStringAt(source: string, str: string, position = source.length, positionEnd = source.length, moveCaret = false): string {\n if (this.maxLength !== -1 && source.length >= this.maxLength) {\n return source;\n }\n\n let output: string;\n\n if (!position && position !== 0) {\n output = source + str;\n } else {\n output = [source.slice(0, position), str, source.slice(positionEnd)].join('');\n if (moveCaret) {\n this.updateCaretPosition(str.length, false);\n }\n }\n\n return output;\n }\n\n /*\n * CARET METHODS\n * */\n private caretEventHandler(event: any) {\n let targetTagName = '';\n if (event.target.tagName) {\n targetTagName = event.target.tagName.toLowerCase();\n }\n\n const isTextInput =\n targetTagName === 'textarea' ||\n (targetTagName === 'input' && ['text', 'search', 'email', 'password', 'url', 'tel'].includes(event.target.type));\n\n const isKeyboard =\n event.target === this.elementRef.nativeElement || (event.target && this.elementRef.nativeElement.contains(event.target));\n\n if (isTextInput && this.activeInputElement == event.target) {\n /**\n * Tracks current cursor position\n * As keys are pressed, text will be added/removed at that position within the input.\n */\n this.setCaretPosition(event.target.selectionStart, event.target.selectionEnd);\n\n if (this.debug) {\n console.log('Caret at:', this.caretPosition, this.caretPositionEnd, event && event.target.tagName.toLowerCase(), event);\n }\n } else if (event.type === 'pointerup' && this.activeInputElement === document.activeElement) {\n return;\n } else if (!isKeyboard && event?.type !== 'selectionchange') {\n /**\n * we must ensure caretPosition doesn't persist once reactivated.\n */\n this.setCaretPosition(null);\n\n if (this.debug) {\n console.log(`Caret position reset due to \"${event?.type}\" event`, event);\n }\n }\n }\n\n private focusActiveInput(): void {\n this.activeInputElement?.focus();\n this.activeInputElement?.setSelectionRange(\n this.caretPosition,\n this.caretPositionEnd\n );\n }\n\n private updateCaretPosition(length: number, minus = false) {\n const newCaretPos = this.computeNewCaretPosition(length, minus);\n this.setCaretPosition(newCaretPos);\n // Scroll to bottom\n setTimeout(() => {\n this.activeInputElement?.scrollTo({\n top: this.activeInputElement.scrollHeight,\n } as ScrollToOptions);\n });\n }\n\n private computeNewCaretPosition(length: number, minus = false) {\n let caretPosition = this.caretPosition;\n\n if (caretPosition != null) {\n if (minus) {\n if (caretPosition > 0) caretPosition = caretPosition - length;\n } else {\n caretPosition = caretPosition + length;\n }\n }\n return caretPosition;\n }\n\n private setCaretPosition(position: number | null, endPosition = position): void {\n this.caretPosition = position;\n this.caretPositionEnd = endPosition;\n }\n}\n","<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n","/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nimport { Overlay, OverlayRef, OverlaySizeConfig, PositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentRef, Injectable } from '@angular/core';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { SystelabVirtualKeyboardLayouts } from './constants';\nimport { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\n\ninterface PositionStrategyOrigin {\n x: number;\n y: number;\n width?: number;\n height?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SystelabVirtualKeyboardOverlayService {\n private overlayRef!: OverlayRef;\n private inputOrigin: HTMLInputElement;\n private fixedBottom: boolean;\n private showKeyboardButtonElement: HTMLElement;\n private open: boolean;\n private layout: SystelabVirtualKeyboardLayouts;\n private clickAlreadyHandled: boolean = false;\n private touchEndAlreadyHandled: boolean = false;\n\n constructor(private readonly overlay: Overlay) {\n this.initListener();\n }\n\n public isCreated(): boolean {\n return !!this.overlayRef;\n }\n\n public isOpen(): boolean {\n return this.open;\n }\n\n public create(\n inputOrigin: HTMLInputElement,\n showKeyboardButtonElement: HTMLElement,\n fixedBottom: boolean,\n layout: SystelabVirtualKeyboardLayouts = SystelabVirtualKeyboardLayouts.default,\n ): ComponentRef<SystelabVirtualKeyboardComponent> {\n this.inputOrigin = inputOrigin;\n this.fixedBottom = fixedBottom;\n this.showKeyboardButtonElement = showKeyboardButtonElement;\n this.layout = layout;\n this.overlayRef = this.overlay.create({\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n disposeOnNavigation: true,\n backdropClass: 'systelab-virtual-keyboard__backdrop',\n panelClass: 'systelab-virtual-keyboard__panel',\n });\n if (fixedBottom) {\n this.overlayRef.addPanelClass('systelab-virtual-keyboard__panel--fixed-bottom');\n }\n\n this.updatePositionStrategy(inputOrigin, fixedBottom);\n this.updateSize();\n\n this.open = true;\n return this.overlayRef.attach(new ComponentPortal(SystelabVirtualKeyboardComponent));\n }\n\n public updatePosition(): void {\n this.updatePositionStrategy(this.inputOrigin, this.fixedBottom);\n }\n\n public setClickAlreadyHandled(): void {\n this.clickAlreadyHandled = true;\n }\n\n public setTouchEndAlreadyHandled(): void {\n this.touchEndAlreadyHandled = true;\n }\n\n public destroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n this.overlayRef = null;\n this.open = false;\n }\n\n private initListener() {\n document.addEventListener('click', this.handleClick.bind(this));\n document.addEventListener('touchend', this.handleTouchEnd.bind(this));\n }\n\n private handleClick(event: MouseEvent) {\n if (this.clickAlreadyHandled) {\n this.clickAlreadyHandled = false;\n return;\n }\n\n event.stopPropagation();\n this.handleEventTarget(event.target);\n }\n\n private handleTouchEnd(event: TouchEvent) {\n if (this.touchEndAlreadyHandled) {\n this.touchEndAlreadyHandled = false;\n return;\n }\n\n event.stopPropagation();\n this.handleEventTarget(event.target);\n }\n\n private handleEventTarget(target: EventTarget) {\n const showKeyboardButtonTarget: boolean = (target as HTMLElement)?.classList.contains('virtual-keyboard-show-button');\n const virtualKeyboardTarget: boolean = document.querySelector('.simple-keyboard')?.contains(target as Node);\n const inputElementTarget: boolean = this.inputOrigin?.contains(target as Node);\n const containsShowButton: boolean = this.showKeyboardButtonElement?.contains(target as Node);\n\n if (!virtualKeyboardTarget &&\n !inputElementTarget &&\n !containsShowButton &&\n !showKeyboardButtonTarget) {\n if (this.isCreated()) {\n this.destroy();\n }\n }\n }\n\n public hasAttached(): boolean {\n return this.overlayRef?.hasAttached();\n }\n\n private updatePositionStrategy(inputOrigin: HTMLInputElement, fixedBottom: boolean): void {\n if (!!this.overlayRef) {\n this.overlayRef.updatePositionStrategy(this.getPositionStrategy(inputOrigin, fixedBottom));\n }\n }\n\n private updateSize(): void {\n if (!!this.overlayRef) {\n this.overlayRef.updateSize(this.getOverlaySize());\n }\n }\n\n private getPositionStrategy(inputOrigin: HTMLInputElement, fixedBottom: boolean): PositionStrategy {\n if (fixedBottom) {\n return this.overlay.position().global().centerHorizontally().bottom('0');\n }\n\n const pointWithDimensions: PositionStrategyOrigin = this.computePositionStrategyOrigin(inputOrigin);\n\n return this.overlay\n .position()\n .flexibleConnectedTo(pointWithDimensions)\n .withFlexibleDimensions(false)\n .withLockedPosition(true)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n ]);\n }\n\n private getOverlaySize(): OverlaySizeConfig {\n const overlayWidth = this.layout === SystelabVirtualKeyboardLayouts.numeric ? '400px' : '1200px';\n\n return {\n width: overlayWidth,\n maxWidth: overlayWidth,\n minWidth: overlayWidth,\n };\n }\n\n private computePositionStrategyOrigin(inputOrigin: HTMLInputElement): PositionStrategyOrigin {\n const overlayOffsetX = this.computeOverlayOffsetX(inputOrigin);\n const { width: overlayWidthString } = this.getOverlaySize();\n const overlayWidth = Number((overlayWidthString as string).replace('px', ''));\n const {x, y, width, height} = inputOrigin.getBoundingClientRect();\n return {\n width,\n height,\n x: width < overlayWidth ? x - overlayOffsetX : x + overlayOffsetX,\n y,\n };\n }\n\n private computeOverlayOffsetX(inputOrigin: HTMLInputElement): number {\n const { width: overlayWidthString } = this.getOverlaySize();\n const overlayWidth = Number((overlayWidthString as string).replace('px', ''));\n const inputWidth = inputOrigin.getBoundingClientRect().width;\n\n const extraWidth = overlayWidth - inputWidth;\n\n return Math.abs(extraWidth) / 2;\n }\n}\n","/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nimport {\n AfterViewInit,\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n DOCUMENT\n} from '@angular/core';\n\n\n\nimport { SystelabVirtualKeyboardInputModes, SystelabVirtualKeyboardLayouts } from './constants';\nimport { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\nimport { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\nimport { SystelabVirtualKeyboardConfig, VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';\n\n@Directive({\n selector: 'input[vkEnabled], textarea[vkEnabled]',\n 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: SystelabVirtualKeyboardConfig;\n\n @Input()\n get vkConfig(): SystelabVirtualKeyboardConfig {\n return this.config;\n }\n\n set vkConfig(config: SystelabVirtualKeyboardConfig) {\n this.config = config;\n }\n\n private panelRef!: ComponentRef<SystelabVirtualKeyboardComponent>;\n private showKeyboardButtonElement: HTMLElement;\n\n constructor(\n private readonly elementRef: ElementRef<HTMLInputElement>,\n private readonly overlayService: SystelabVirtualKeyboardOverlayService,\n private readonly renderer: Renderer2,\n @Inject(DOCUMENT) private readonly document: any,\n @Optional() @Inject(VIRTUAL_KEYBOARD_CONFIG) private virtualKeyboardConfig: SystelabVirtualKeyboardConfig,\n ) {\n this.config = this.virtualKeyboardConfig;\n }\n\n ngOnInit() {\n if (this.config?.showIcon) {\n this.attachKeyboardIcon();\n }\n }\n\n ngAfterViewInit() {\n if (this.vkEnabled && this.config?.showIcon) {\n const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');\n keyboardIcon.addEventListener('click', this.togglePanel.bind(this));\n }\n }\n\n ngOnDestroy(): void {\n if (this.vkEnabled && this.config?.showIcon) {\n const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');\n keyboardIcon.removeEventListener('click', this.togglePanel.bind(this));\n }\n this.overlayService.destroy();\n }\n\n private togglePanel(): void {\n if (!this.vkEnabled) {\n return;\n }\n if (this.overlayService.isOpen()) {\n this.closePanel();\n } else {\n this.openPanel();\n }\n }\n\n private openPanel(): void {\n if (!this.vkEnabled) {\n return;\n }\n if (this.overlayService.isCreated()) {\n this.overlayService.destroy();\n }\n if (this.overlayService.hasAttached()) {\n return;\n }\n\n const currentLayout = this.getLayout(this.elementRef.nativeElement);\n\n this.panelRef = this.overlayService.create(this.inputOrigin(), this.showKeyboardButtonElement, this.vkFixedBottom, currentLayout);\n this.panelRef.instance.debug = this.vkDebug;\n this.panelRef.instance.setActiveInput(this.elementRef.nativeElement);\n this.panelRef.instance.setLayout(currentLayout);\n this.panelRef.instance.closePanel.subscribe(() => this.closePanel());\n }\n\n private getLayout(activeInputElement: HTMLInputElement | HTMLTextAreaElement): SystelabVirtualKeyboardLayouts {\n if (this.config?.hasOwnProperty('layout')) {\n return this.config.layout;\n }\n if (this.isInputAlphabetic(activeInputElement)) {\n return SystelabVirtualKeyboardLayouts.default;\n } else if (this.isInputNumeric(activeInputElement)) {\n return SystelabVirtualKeyboardLayouts.numeric;\n } else {\n return SystelabVirtualKeyboardLayouts.default;\n }\n }\n\n private isInputAlphabetic(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardInputModes.text, SystelabVirtualKeyboardInputModes.password].some((i) => i === inputMode);\n }\n\n private isInputNumeric(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardInputModes.numeric].some((i) => i === inputMode);\n }\n\n private getInputMode(activeInputElement: HTMLInputElement | HTMLTextAreaElement): string {\n return activeInputElement?.inputMode ?? activeInputElement?.type;\n }\n\n private closePanel(): void {\n this.overlayService.destroy();\n }\n\n private inputOrigin(): HTMLInputElement {\n return this.elementRef.nativeElement;\n }\n\n private attachKeyboardIcon() {\n if (this.vkEnabled) {\n const child = this.document.createElement('i');\n child.classList.add('fa');\n child.classList.add('fa-keyboard');\n child.classList.add('systelab-virtual-keyboard__show-button');\n this.renderer.appendChild(this.elementRef.nativeElement.parentElement, child);\n this.showKeyboardButtonElement = child;\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SystelabVirtualKeyboardDirective } from './systelab-virtual-keyboard.directive';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { SystelabVirtualKeyboardConfig, VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';\nimport { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\n\nexport const factory = () => {\n const systelabVirtualKeyboardModuleCreated = (factory as any)._systelabVirtualKeyboardModuleCreated || false;\n if (systelabVirtualKeyboardModuleCreated) {\n throw new Error('SystelabVirtualKeyboardModuleCreated.forRoot imported to many times');\n }\n (factory as any)._systelabVirtualKeyboardModuleCreated = true;\n};\n\n@NgModule({\n imports: [CommonModule, OverlayModule],\n declarations: [SystelabVirtualKeyboardDirective],\n exports: [SystelabVirtualKeyboardDirective],\n})\nexport class SystelabVirtualKeyboardModule {\n public static forRoot(conf?: SystelabVirtualKeyboardConfig): ModuleWithProviders<SystelabVirtualKeyboardModule> {\n return {\n ngModule: SystelabVirtualKeyboardModule,\n providers: [\n SystelabVirtualKeyboardOverlayService,\n {\n provide: VIRTUAL_KEYBOARD_CONFIG, useValue: conf\n }\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders<SystelabVirtualKeyboardModule> {\n return {\n ngModule: SystelabVirtualKeyboardModule,\n providers: [],\n };\n }\n}\n","/*\n * Public API Surface of systelab-virtual-keyboard\n */\n\nexport * from './lib/constants';\nexport { SystelabVirtualKeyboardConfig } from './lib/systelab-virtual-keyboard.config';\nexport * from './lib/systelab-virtual-keyboard.directive';\nexport * from './lib/systelab-virtual-keyboard.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SystelabVirtualKeyboardOverlayService"],"mappings":"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"}
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 }\n\n export enum InputMethods {\n onlyMouseEvents = 'onlyMouseEvents',\n onlyTouchEvents = 'onlyTouchEvents',\n }\n\n export enum Layouts {\n AlphaNumeric = 'alpha-numeric',\n AlphaNumericShift = 'alpha-numeric-shift',\n AlphaNumericUppercase = 'alpha-numeric-uppercase',\n AlphaNumericUppercaseShift = 'alpha-numeric-uppercase-shift',\n Numeric = 'numeric',\n NumericShift = 'numeric-shift',\n }\n}\n","/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nimport { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\nimport { InjectionToken } from '@angular/core';\n\nexport namespace SystelabVirtualKeyboardConstants {\n\n export const VIRTUAL_KEYBOARD_CONFIG = new InjectionToken<SystelabVirtualKeyboard.Config>('VIRTUAL_KEYBOARD_CONFIG');\n\n export const LayoutDefinitions = {\n 'default': [\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\n '{tab} q w e r t y u i o p { } |',\n '{lock} a s d f g h j k l : \" {enter}',\n '{shift} z x c v b n m < > ? {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboard.Layouts.AlphaNumeric]: [\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\n '{tab} q w e r t y u i o p { } |',\n '{lock} a s d f g h j k l : \" {enter}',\n '{shift} z x c v b n m < > ? {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboard.Layouts.AlphaNumericShift]: [\n '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',\n '{tab} Q W E R T Y U I O P [ ] \\\\',\n \"{lock} A S D F G H J K L ; ' {enter}\",\n '{shift} Z X C V B N M , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase]: [\n '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',\n '{tab} Q W E R T Y U I O P [ ] \\\\',\n \"{lock} A S D F G H J K L ; ' {enter}\",\n '{shift} Z X C V B N M , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift]: [\n '~ ! @ # $ % ^ &amp; * ( ) _ + {bksp}',\n '{tab} Q W E R T Y U I O P [ ] \\\\',\n \"{lock} A S D F G H J K L ; ' {enter}\",\n '{shift} Z X C V B N M , . / {shift}',\n '{space}',\n ],\n [SystelabVirtualKeyboard.Layouts.Numeric]: ['7 8 9 {bksp}', '4 5 6 +', '1 2 3 -', '{shift} 0 . {enter}'],\n [SystelabVirtualKeyboard.Layouts.NumericShift]: ['! @ # {bksp}', '$ % _ =', '& * ( -', '{shift} ) . {enter}'],\n };\n\n export enum Button {\n Done = '{done}',\n Enter = '{enter}',\n Shift = '{shift}',\n Lock = '{lock}',\n Backspace = '{bksp}',\n Language = '{language}',\n Space = '{space}',\n Tab = '{tab}',\n }\n\n export enum InputModes {\n text = 'text',\n numeric = 'numeric',\n password = 'password',\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Inject,\n Optional,\n Output\n} from '@angular/core';\nimport { SimpleKeyboard } from 'simple-keyboard';\nimport { SystelabVirtualKeyboardConstants } from './systelab-virtual-keyboard.constants';\nimport { KeyboardOptions } from 'simple-keyboard/build/interfaces';\nimport { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\n\n@Component({\n selector: 'systelab-virtual-keyboard.component',\n standalone: true,\n imports: [],\n templateUrl: './systelab-virtual-keyboard.component.html',\n})\nexport class SystelabVirtualKeyboardComponent implements AfterViewInit {\n @HostListener('window:keyup', ['$event'])\n handleKeyUp(event: KeyboardEvent): void {\n if (event.isTrusted) {\n this.caretEventHandler(event);\n }\n }\n\n @HostListener('window:pointerup', ['$event'])\n @HostListener('window:mouseup', ['$event'])\n handleMouseUp(event: PointerEvent): void {\n this.caretEventHandler(event);\n }\n\n get maxLength(): number {\n return this.activeInputElement?.maxLength ?? -1;\n }\n\n get isTextarea(): boolean {\n return this.activeInputElement?.type === 'textarea';\n }\n\n public debug = false;\n private selectedLayout: SystelabVirtualKeyboard.Layouts | 'default' = 'default';\n private keyboard: SimpleKeyboard;\n private caretPosition: number | null = null;\n private caretPositionEnd: number | null = null;\n private activeInputElement!: HTMLInputElement | HTMLTextAreaElement | null;\n\n private shiftPressed = false;\n private specialKeysAlwaysUppercase = false;\n private capsLockOn = false;\n\n @Output() closePanel = new EventEmitter<void>();\n\n constructor(\n private readonly elementRef: ElementRef<HTMLInputElement>,\n @Optional() @Inject(SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG) private readonly virtualKeyboardConfig: SystelabVirtualKeyboard.Config) {}\n\n ngAfterViewInit() {\n const keyboardOptions: KeyboardOptions = this.prepareKeyboardConfig();\n this.keyboard = new SimpleKeyboard('.simple-keyboard', keyboardOptions);\n this.setButtonClasses();\n this.setLayout(this.selectedLayout);\n }\n\n public setActiveInput(input: HTMLInputElement | HTMLTextAreaElement): void {\n this.activeInputElement = input;\n\n if (this.debug) {\n const inputType = this.activeInputElement?.type;\n console.log('Layout:', `${inputType}_${this.selectedLayout}`);\n }\n\n const { selectionStart, selectionEnd } = this.activeInputElement;\n this.setCaretPosition(selectionStart, selectionEnd);\n\n if (this.debug) {\n console.log('Caret start at:', this.caretPosition, this.caretPositionEnd);\n }\n this.focusActiveInput();\n }\n\n public setLayout(layout: SystelabVirtualKeyboard.Layouts | 'default'): void {\n this.selectedLayout = layout;\n if (this.keyboard) {\n this.keyboard.setOptions({\n layoutName: layout,\n });\n\n if (layout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase || layout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift) {\n this.specialKeysAlwaysUppercase = true;\n this.addUppercaseClass();\n }\n }\n }\n\n private prepareKeyboardConfig(): KeyboardOptions {\n let keyboardOptions: KeyboardOptions = {\n onKeyPress: (button) => this.handleKeyPress(button),\n mergeDisplay: true,\n theme: 'hg-theme-default hg-layout-default systelab-virtual-keyboard-theme',\n display: {\n [SystelabVirtualKeyboardConstants.Button.Backspace]: 'back',\n [SystelabVirtualKeyboardConstants.Button.Enter]: 'enter',\n [SystelabVirtualKeyboardConstants.Button.Lock]: 'lock',\n },\n buttonTheme: this.buildButtonThemes(),\n layout: SystelabVirtualKeyboardConstants.LayoutDefinitions,\n };\n\n if (this.virtualKeyboardConfig?.hasOwnProperty('inputMethod')) {\n if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboard.InputMethods.onlyMouseEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useMouseEvents: true,\n }\n } else if (this.virtualKeyboardConfig.inputMethod === SystelabVirtualKeyboard.InputMethods.onlyTouchEvents) {\n keyboardOptions = {\n ...keyboardOptions,\n useTouchEvents: true,\n }\n }\n }\n\n return keyboardOptions;\n }\n\n private buildButtonThemes(): { class: string; buttons: string }[] {\n return [\n {\n class: 'virtual-keyboard-delete-button',\n buttons: `${SystelabVirtualKeyboardConstants.Button.Backspace}`,\n },\n {\n class: 'virtual-keyboard-enter-button',\n buttons: `${SystelabVirtualKeyboardConstants.Button.Enter}`,\n },\n {\n class: 'virtual-keyboard-function-button',\n buttons: `${SystelabVirtualKeyboardConstants.Button.Shift} ${SystelabVirtualKeyboardConstants.Button.Lock}`,\n }\n ]\n }\n\n private setButtonClasses(): void {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-button');\n }\n\n private handleKeyPress(button: string, e?: Event): void {\n if (this.debug) {\n console.log('Key press:', button);\n }\n\n if (button.startsWith('&') && button.length > 1) {\n button = new DOMParser().parseFromString(button, 'text/html').body.textContent;\n }\n\n if (button === SystelabVirtualKeyboardConstants.Button.Shift ) {\n this.shiftPressed = !this.shiftPressed;\n this.toggleShiftLayout();\n if (this.shiftPressed) {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');\n this.addUppercaseClass();\n } else {\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');\n this.removeUppercaseClass();\n }\n } else if (button === SystelabVirtualKeyboardConstants.Button.Lock) {\n this.capsLockOn = !this.capsLockOn;\n this.toggleShiftLayout();\n if (this.capsLockOn) {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-lock-active');\n this.addUppercaseClass();\n } else {\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-lock-active');\n this.removeUppercaseClass();\n }\n } else if (button === SystelabVirtualKeyboardConstants.Button.Done) {\n this.closePanel.emit();\n return;\n }\n\n if (!this.isAcceptedNonStandardButton(button) && !this.isStandardButton(button)) {\n return;\n }\n\n const output = this.handleButtonOutput(button);\n\n if (this.activeInputElement) {\n this.activeInputElement.value = output;\n\n if (this.debug) {\n console.log('Caret at:', this.caretPosition, this.caretPositionEnd, 'Button', e);\n }\n }\n\n this.dispatchEvents(button);\n\n if (this.shiftPressed) {\n this.toggleShiftLayout();\n this.removeUppercaseClass();\n }\n this.shiftPressed = false;\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-shift-active');\n }\n\n private addUppercaseClass(): void {\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Tab, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Backspace, 'virtual-keyboard-uppercase');\n this.keyboard.addButtonTheme(SystelabVirtualKeyboardConstants.Button.Enter, 'virtual-keyboard-uppercase');\n }\n\n private removeUppercaseClass(): void {\n if (this.specialKeysAlwaysUppercase) {\n return;\n }\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Shift, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Lock, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Tab, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Backspace, 'virtual-keyboard-uppercase');\n this.keyboard.removeButtonTheme(SystelabVirtualKeyboardConstants.Button.Enter, 'virtual-keyboard-uppercase');\n }\n\n private handleButtonOutput(button: string): string {\n const commonParams: [number, number, boolean] = this.getCommonParams();\n let output = this.activeInputElement?.value || '';\n if (!this.isStandardButton(button)) {\n if (button === SystelabVirtualKeyboardConstants.Button.Backspace) {\n output = this.removeAt(output, ...commonParams);\n } else if (button === SystelabVirtualKeyboardConstants.Button.Space) {\n output = this.addStringAt(output, ' ', ...commonParams);\n } else if (button === SystelabVirtualKeyboardConstants.Button.Tab) {\n // Do nothing for tab\n } else if (button === SystelabVirtualKeyboardConstants.Button.Enter) {\n if (this.isTextarea) {\n output = this.addStringAt(output, '\\n', ...commonParams);\n }\n } else {\n return;\n }\n } else {\n output = this.addStringAt(output, button, ...commonParams);\n }\n\n return output;\n }\n\n private getCommonParams(): [number, number, boolean] {\n return [this.caretPosition || 0, this.caretPositionEnd || 0, true];\n }\n\n private isAcceptedNonStandardButton(button: string): boolean {\n return [\n SystelabVirtualKeyboardConstants.Button.Backspace.toString(),\n SystelabVirtualKeyboardConstants.Button.Space.toString(),\n SystelabVirtualKeyboardConstants.Button.Tab.toString(),\n SystelabVirtualKeyboardConstants.Button.Enter.toString(),\n ].includes(button);\n }\n\n private dispatchEvents(button: string) {\n const {key, code} = this.convertFromButtonToCode(button);\n\n const eventInit: KeyboardEventInit = {\n bubbles: true,\n cancelable: true,\n shiftKey: this.selectedLayout === SystelabVirtualKeyboard.Layouts.AlphaNumericShift,\n key: key,\n code: code,\n location: 0,\n };\n // Simulate all needed events on base element\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keydown', eventInit));\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keypress', eventInit));\n this.activeInputElement?.dispatchEvent(new Event('input', {bubbles: true}));\n this.activeInputElement?.dispatchEvent(new KeyboardEvent('keyup', eventInit));\n }\n\n /*\n * AUXILIARY METHODS\n * */\n private convertFromButtonToCode(button: string): { key: string; code: string } {\n let key: string;\n let code: string;\n if (button.includes('{') && button.includes('}')) {\n // Capitalize name\n key = button.slice(1, button.length - 1).toLowerCase();\n key = key.charAt(0).toUpperCase() + key.slice(1);\n code = key;\n\n // Fix to standard key code\n if (code.toLowerCase() === SystelabVirtualKeyboardConstants.Button.Backspace.slice(1, SystelabVirtualKeyboardConstants.Button.Backspace.length - 1).toLowerCase()) {\n code = 'Backspace';\n }\n } else {\n key = button;\n code = Number.isInteger(Number(button)) ? `Digit${button}` : `Key${button.toUpperCase()}`;\n }\n\n return {key, code};\n }\n\n private toggleShiftLayout(): void {\n const currentLayout = this.keyboard.options.layoutName;\n let selectedLayout: SystelabVirtualKeyboard.Layouts;\n\n switch (currentLayout) {\n case SystelabVirtualKeyboard.Layouts.AlphaNumeric:\n case SystelabVirtualKeyboard.Layouts.AlphaNumericShift:\n selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.AlphaNumeric ? SystelabVirtualKeyboard.Layouts.AlphaNumericShift : SystelabVirtualKeyboard.Layouts.AlphaNumeric;\n break;\n\n case SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase:\n case SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift:\n selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase ? SystelabVirtualKeyboard.Layouts.AlphaNumericUppercaseShift : SystelabVirtualKeyboard.Layouts.AlphaNumericUppercase;\n break;\n\n case SystelabVirtualKeyboard.Layouts.Numeric:\n case SystelabVirtualKeyboard.Layouts.NumericShift:\n selectedLayout = currentLayout === SystelabVirtualKeyboard.Layouts.Numeric ? SystelabVirtualKeyboard.Layouts.NumericShift : SystelabVirtualKeyboard.Layouts.Numeric;\n break;\n default:\n }\n\n if (selectedLayout) {\n this.setLayout(selectedLayout);\n }\n }\n\n private isStandardButton(button: string) {\n return button && !(button.startsWith('{') && button.endsWith('}'));\n }\n\n /*\n * OUTPUT STRING METHODS\n * */\n private removeAt(source: string, position = source.length, positionEnd = source.length, moveCaret = false): string {\n if (position === 0 && positionEnd === 0) {\n return source;\n }\n\n let output: string;\n\n if (position === positionEnd) {\n if (position && position >= 0) {\n output = source.slice(0, position - 1) + source.slice(position);\n if (moveCaret) {\n this.updateCaretPosition(1, true);\n }\n } else {\n output = source.slice(0, -1);\n if (moveCaret) {\n this.updateCaretPosition(1, true);\n }\n }\n } else {\n output = source.slice(0, position) + source.slice(positionEnd);\n if (moveCaret) {\n this.setCaretPosition(position);\n }\n }\n\n return output;\n }\n\n private addStringAt(source: string, str: string, position = source.length, positionEnd = source.length, moveCaret = false): string {\n if (this.maxLength !== -1 && source.length >= this.maxLength) {\n return source;\n }\n\n let output: string;\n\n if (!position && position !== 0) {\n output = source + str;\n } else {\n output = [source.slice(0, position), str, source.slice(positionEnd)].join('');\n if (moveCaret) {\n this.updateCaretPosition(str.length, false);\n }\n }\n\n return output;\n }\n\n /*\n * CARET METHODS\n * */\n private caretEventHandler(event: any) {\n let targetTagName = '';\n if (event.target.tagName) {\n targetTagName = event.target.tagName.toLowerCase();\n }\n\n const isTextInput =\n targetTagName === 'textarea' ||\n (targetTagName === 'input' && ['text', 'search', 'email', 'password', 'url', 'tel'].includes(event.target.type));\n\n const isKeyboard =\n event.target === this.elementRef.nativeElement || (event.target && this.elementRef.nativeElement.contains(event.target));\n\n if (isTextInput && this.activeInputElement == event.target) {\n /**\n * Tracks current cursor position\n * As keys are pressed, text will be added/removed at that position within the input.\n */\n this.setCaretPosition(event.target.selectionStart, event.target.selectionEnd);\n\n if (this.debug) {\n console.log('Caret at:', this.caretPosition, this.caretPositionEnd, event?.target.tagName.toLowerCase(), event);\n }\n } else if (event.type === 'pointerup' && this.activeInputElement === document.activeElement) {\n return;\n } else if (!isKeyboard && event?.type !== 'selectionchange') {\n /**\n * we must ensure caretPosition doesn't persist once reactivated.\n */\n this.setCaretPosition(null);\n\n if (this.debug) {\n console.log(`Caret position reset due to \"${event?.type}\" event`, event);\n }\n }\n }\n\n private focusActiveInput(): void {\n this.activeInputElement?.focus();\n this.activeInputElement?.setSelectionRange(\n this.caretPosition,\n this.caretPositionEnd\n );\n }\n\n private updateCaretPosition(length: number, minus = false) {\n const newCaretPos = this.computeNewCaretPosition(length, minus);\n this.setCaretPosition(newCaretPos);\n // Scroll to bottom\n setTimeout(() => {\n this.activeInputElement?.scrollTo({\n top: this.activeInputElement.scrollHeight,\n } as ScrollToOptions);\n });\n }\n\n private computeNewCaretPosition(length: number, minus = false) {\n let caretPosition = this.caretPosition;\n\n if (caretPosition != null) {\n if (minus) {\n if (caretPosition > 0) caretPosition = caretPosition - length;\n } else {\n caretPosition = caretPosition + length;\n }\n }\n return caretPosition;\n }\n\n private setCaretPosition(position: number | null, endPosition = position): void {\n this.caretPosition = position;\n this.caretPositionEnd = endPosition;\n }\n}\n","<!--\n ~ Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n ~ NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n ~ affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n ~ Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n ~ are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n ~ strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n -->\n\n<div class=\"simple-keyboard\"></div>\n","/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nimport { Overlay, OverlayRef, OverlaySizeConfig, PositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentRef, Injectable } from '@angular/core';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\nimport { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\n\ninterface PositionStrategyOrigin {\n x: number;\n y: number;\n width?: number;\n height?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SystelabVirtualKeyboardOverlayService {\n private overlayRef!: OverlayRef;\n private inputOrigin: HTMLInputElement;\n private fixedBottom: boolean;\n private showKeyboardButtonElement: HTMLElement;\n private open: boolean;\n private layout: SystelabVirtualKeyboard.Layouts | 'default';\n private clickAlreadyHandled: boolean = false;\n private touchEndAlreadyHandled: boolean = false;\n\n constructor(private readonly overlay: Overlay) {\n this.initListener();\n }\n\n public isCreated(): boolean {\n return !!this.overlayRef;\n }\n\n public isOpen(): boolean {\n return this.open;\n }\n\n public create(\n inputOrigin: HTMLInputElement,\n showKeyboardButtonElement: HTMLElement,\n fixedBottom: boolean,\n layout: SystelabVirtualKeyboard.Layouts | 'default' = 'default',\n ): ComponentRef<SystelabVirtualKeyboardComponent> {\n this.inputOrigin = inputOrigin;\n this.fixedBottom = fixedBottom;\n this.showKeyboardButtonElement = showKeyboardButtonElement;\n this.layout = layout;\n this.overlayRef = this.overlay.create({\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n disposeOnNavigation: true,\n backdropClass: 'systelab-virtual-keyboard__backdrop',\n panelClass: 'systelab-virtual-keyboard__panel',\n });\n if (fixedBottom) {\n this.overlayRef.addPanelClass('systelab-virtual-keyboard__panel--fixed-bottom');\n }\n\n this.updatePositionStrategy(inputOrigin, fixedBottom);\n this.updateSize();\n\n this.open = true;\n return this.overlayRef.attach(new ComponentPortal(SystelabVirtualKeyboardComponent));\n }\n\n public updatePosition(): void {\n this.updatePositionStrategy(this.inputOrigin, this.fixedBottom);\n }\n\n public setClickAlreadyHandled(): void {\n this.clickAlreadyHandled = true;\n }\n\n public setTouchEndAlreadyHandled(): void {\n this.touchEndAlreadyHandled = true;\n }\n\n public destroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n this.overlayRef = null;\n this.open = false;\n }\n\n private initListener() {\n document.addEventListener('click', this.handleClick.bind(this));\n document.addEventListener('touchend', this.handleTouchEnd.bind(this));\n }\n\n private handleClick(event: MouseEvent) {\n if (this.clickAlreadyHandled) {\n this.clickAlreadyHandled = false;\n return;\n }\n\n event.stopPropagation();\n this.handleEventTarget(event.target);\n }\n\n private handleTouchEnd(event: TouchEvent) {\n if (this.touchEndAlreadyHandled) {\n this.touchEndAlreadyHandled = false;\n return;\n }\n\n event.stopPropagation();\n this.handleEventTarget(event.target);\n }\n\n private handleEventTarget(target: EventTarget) {\n const showKeyboardButtonTarget: boolean = (target as HTMLElement)?.classList.contains('virtual-keyboard-show-button');\n const virtualKeyboardTarget: boolean = document.querySelector('.simple-keyboard')?.contains(target as Node);\n const inputElementTarget: boolean = this.inputOrigin?.contains(target as Node);\n const containsShowButton: boolean = this.showKeyboardButtonElement?.contains(target as Node);\n\n if (!virtualKeyboardTarget &&\n !inputElementTarget &&\n !containsShowButton &&\n !showKeyboardButtonTarget) {\n if (this.isCreated()) {\n this.destroy();\n }\n }\n }\n\n public hasAttached(): boolean {\n return this.overlayRef?.hasAttached();\n }\n\n private updatePositionStrategy(inputOrigin: HTMLInputElement, fixedBottom: boolean): void {\n if (!!this.overlayRef) {\n this.overlayRef.updatePositionStrategy(this.getPositionStrategy(inputOrigin, fixedBottom));\n }\n }\n\n private updateSize(): void {\n if (!!this.overlayRef) {\n this.overlayRef.updateSize(this.getOverlaySize());\n }\n }\n\n private getPositionStrategy(inputOrigin: HTMLInputElement, fixedBottom: boolean): PositionStrategy {\n if (fixedBottom) {\n return this.overlay.position().global().centerHorizontally().bottom('0');\n }\n\n const pointWithDimensions: PositionStrategyOrigin = this.computePositionStrategyOrigin(inputOrigin);\n\n return this.overlay\n .position()\n .flexibleConnectedTo(pointWithDimensions)\n .withFlexibleDimensions(false)\n .withLockedPosition(true)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n ]);\n }\n\n private getOverlaySize(): OverlaySizeConfig {\n const overlayWidth = this.layout === SystelabVirtualKeyboard.Layouts.Numeric ? '331px' : '1200px';\n\n return {\n width: overlayWidth,\n maxWidth: overlayWidth,\n minWidth: overlayWidth,\n };\n }\n\n private computePositionStrategyOrigin(inputOrigin: HTMLInputElement): PositionStrategyOrigin {\n const overlayOffsetX = this.computeOverlayOffsetX(inputOrigin);\n const { width: overlayWidthString } = this.getOverlaySize();\n const overlayWidth = Number((overlayWidthString as string).replace('px', ''));\n const {x, y, width, height} = inputOrigin.getBoundingClientRect();\n return {\n width,\n height,\n x: width < overlayWidth ? x - overlayOffsetX : x + overlayOffsetX,\n y,\n };\n }\n\n private computeOverlayOffsetX(inputOrigin: HTMLInputElement): number {\n const { width: overlayWidthString } = this.getOverlaySize();\n const overlayWidth = Number((overlayWidthString as string).replace('px', ''));\n const inputWidth = inputOrigin.getBoundingClientRect().width;\n\n const extraWidth = overlayWidth - inputWidth;\n\n return Math.abs(extraWidth) / 2;\n }\n}\n","/*\n * Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.\n * NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its\n * affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation\n * Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or\n * are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is\n * strictly forbidden unless prior written permission is Instrumentation Laboratory Company.\n */\n\nimport {\n AfterViewInit,\n ComponentRef,\n Directive,\n DOCUMENT,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2\n} from '@angular/core';\n\n\nimport { SystelabVirtualKeyboardComponent } from './systelab-virtual-keyboard.component';\nimport { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\nimport { SystelabVirtualKeyboardConstants } from './systelab-virtual-keyboard.constants';\nimport { SystelabVirtualKeyboard } from './systelab-virtual-keyboard.public';\n\n@Directive({\n selector: 'input[vkEnabled], textarea[vkEnabled]',\n standalone: false,\n})\nexport class SystelabVirtualKeyboardDirective implements OnInit, AfterViewInit, OnDestroy {\n @HostListener('window:touchmove', ['$event'])\n @HostListener('window:touchend', ['$event'])\n @HostListener('window:wheel', ['$event'])\n @HostListener('document:scroll', ['$event'])\n onDocumentScroll() {\n if (!this.vkEnabled) {\n return;\n }\n this.overlayService.updatePosition();\n }\n\n @HostListener('click', ['$event'])\n onClick(): void {\n if (!this.vkEnabled || !this.config.showOnMouseClick) {\n return;\n }\n\n this.closePanel();\n this.overlayService.setClickAlreadyHandled();\n this.openPanel();\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(): void {\n if (!this.vkEnabled) {\n return;\n }\n\n this.closePanel();\n this.overlayService.setTouchEndAlreadyHandled();\n this.openPanel();\n }\n\n private enabled = false;\n\n @Input()\n set vkEnabled(enabled: boolean | string) {\n if (typeof enabled === 'string') {\n this.enabled = true;\n } else {\n this.enabled = enabled;\n }\n };\n\n get vkEnabled(): boolean {\n return this.enabled;\n }\n\n private fixedBottom = false;\n\n @Input()\n get vkFixedBottom(): boolean {\n return this.fixedBottom;\n }\n\n set vkFixedBottom(fixedBottom: boolean | string) {\n if (typeof fixedBottom === 'string') {\n this.fixedBottom = true;\n } else {\n this.fixedBottom = fixedBottom;\n }\n }\n\n private debug = false;\n\n @Input()\n get vkDebug(): boolean {\n return this.debug;\n }\n\n set vkDebug(debug: boolean) {\n this.debug = debug;\n }\n\n private config: SystelabVirtualKeyboard.Config;\n\n @Input()\n get vkConfig(): SystelabVirtualKeyboard.Config {\n return this.config;\n }\n\n set vkConfig(config: SystelabVirtualKeyboard.Config) {\n this.config = config;\n }\n\n private panelRef!: ComponentRef<SystelabVirtualKeyboardComponent>;\n private showKeyboardButtonElement: HTMLElement;\n\n constructor(\n private readonly elementRef: ElementRef<HTMLInputElement>,\n private readonly overlayService: SystelabVirtualKeyboardOverlayService,\n private readonly renderer: Renderer2,\n @Inject(DOCUMENT) private readonly document: any,\n @Optional() @Inject(SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG) private readonly virtualKeyboardConfig: SystelabVirtualKeyboard.Config,\n ) {\n this.config = this.virtualKeyboardConfig;\n }\n\n ngOnInit() {\n if (this.config?.showIcon) {\n this.attachKeyboardIcon();\n }\n }\n\n ngAfterViewInit() {\n if (this.vkEnabled && this.config?.showIcon) {\n const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');\n keyboardIcon.addEventListener('click', this.togglePanel.bind(this));\n }\n }\n\n ngOnDestroy(): void {\n if (this.vkEnabled && this.config?.showIcon) {\n const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');\n keyboardIcon.removeEventListener('click', this.togglePanel.bind(this));\n }\n this.overlayService.destroy();\n }\n\n private togglePanel(): void {\n if (!this.vkEnabled) {\n return;\n }\n if (this.overlayService.isOpen()) {\n this.closePanel();\n } else {\n this.openPanel();\n }\n }\n\n private openPanel(): void {\n if (!this.vkEnabled) {\n return;\n }\n if (this.overlayService.isCreated()) {\n this.overlayService.destroy();\n }\n if (this.overlayService.hasAttached()) {\n return;\n }\n\n const currentLayout = this.getLayout(this.elementRef.nativeElement);\n\n this.panelRef = this.overlayService.create(this.inputOrigin(), this.showKeyboardButtonElement, this.vkFixedBottom, currentLayout);\n this.panelRef.instance.debug = this.vkDebug;\n this.panelRef.instance.setActiveInput(this.elementRef.nativeElement);\n this.panelRef.instance.setLayout(currentLayout);\n this.panelRef.instance.closePanel.subscribe(() => this.closePanel());\n }\n\n private getLayout(activeInputElement: HTMLInputElement | HTMLTextAreaElement): SystelabVirtualKeyboard.Layouts {\n if (this.config?.hasOwnProperty('layout')) {\n return this.config.layout;\n }\n if (this.isInputAlphabetic(activeInputElement)) {\n return SystelabVirtualKeyboard.Layouts.AlphaNumeric;\n } else if (this.isInputNumeric(activeInputElement)) {\n return SystelabVirtualKeyboard.Layouts.Numeric;\n } else {\n return SystelabVirtualKeyboard.Layouts.AlphaNumeric;\n }\n }\n\n private isInputAlphabetic(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardConstants.InputModes.text, SystelabVirtualKeyboardConstants.InputModes.password].some((i) => i === inputMode);\n }\n\n private isInputNumeric(activeInputElement: HTMLInputElement | HTMLTextAreaElement): boolean {\n const inputMode = this.getInputMode(activeInputElement);\n return inputMode && [SystelabVirtualKeyboardConstants.InputModes.numeric].some((i) => i === inputMode);\n }\n\n private getInputMode(activeInputElement: HTMLInputElement | HTMLTextAreaElement): string {\n return activeInputElement?.inputMode ?? activeInputElement?.type;\n }\n\n private closePanel(): void {\n this.overlayService.destroy();\n }\n\n private inputOrigin(): HTMLInputElement {\n return this.elementRef.nativeElement;\n }\n\n private attachKeyboardIcon() {\n if (this.vkEnabled) {\n const child = this.document.createElement('i');\n child.classList.add('fa');\n child.classList.add('fa-keyboard');\n child.classList.add('systelab-virtual-keyboard__show-button');\n this.renderer.appendChild(this.elementRef.nativeElement.parentElement, child);\n this.showKeyboardButtonElement = child;\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SystelabVirtualKeyboardDirective } from './systelab-virtual-keyboard.directive';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';\nimport { SystelabVirtualKeyboard } from '../public-api';\nimport { SystelabVirtualKeyboardConstants } from './systelab-virtual-keyboard.constants';\n\nexport const factory = () => {\n const systelabVirtualKeyboardModuleCreated = (factory as any)._systelabVirtualKeyboardModuleCreated || false;\n if (systelabVirtualKeyboardModuleCreated) {\n throw new Error('SystelabVirtualKeyboardModuleCreated.forRoot imported to many times');\n }\n (factory as any)._systelabVirtualKeyboardModuleCreated = true;\n};\n\n@NgModule({\n imports: [CommonModule, OverlayModule],\n declarations: [SystelabVirtualKeyboardDirective],\n exports: [SystelabVirtualKeyboardDirective],\n})\nexport class SystelabVirtualKeyboardModule {\n public static forRoot(conf?: SystelabVirtualKeyboard.Config): ModuleWithProviders<SystelabVirtualKeyboardModule> {\n return {\n ngModule: SystelabVirtualKeyboardModule,\n providers: [\n SystelabVirtualKeyboardOverlayService,\n {\n provide: SystelabVirtualKeyboardConstants.VIRTUAL_KEYBOARD_CONFIG, useValue: conf\n }\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders<SystelabVirtualKeyboardModule> {\n return {\n ngModule: SystelabVirtualKeyboardModule,\n providers: [],\n };\n }\n}\n","/*\n * Public API Surface of systelab-virtual-keyboard\n */\n\nexport { SystelabVirtualKeyboard } from './lib/systelab-virtual-keyboard.public';\nexport * from './lib/systelab-virtual-keyboard.directive';\nexport * from './lib/systelab-virtual-keyboard.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SystelabVirtualKeyboardOverlayService"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -4,41 +4,30 @@ import * as i3 from '@angular/cdk/overlay';
4
4
  import { Overlay } from '@angular/cdk/overlay';
5
5
  import * as i2 from '@angular/common';
6
6
 
7
- declare enum SystelabVirtualKeyboardButton {
8
- Done = "{done}",
9
- Enter = "{enter}",
10
- Shift = "{shift}",
11
- Lock = "{lock}",
12
- Backspace = "{bksp}",
13
- Language = "{language}",
14
- Space = "{space}",
15
- Tab = "{tab}"
16
- }
17
- declare enum SystelabVirtualKeyboardLayouts {
18
- default = "default",
19
- shift = "shift",
20
- numeric = "numeric"
21
- }
22
- declare enum SystelabVirtualKeyboardInputMethods {
23
- onlyMouseEvents = "onlyMouseEvents",
24
- onlyTouchEvents = "onlyTouchEvents"
25
- }
26
- declare enum SystelabVirtualKeyboardInputModes {
27
- text = "text",
28
- numeric = "numeric",
29
- password = "password"
30
- }
31
-
32
- interface SystelabVirtualKeyboardConfig {
33
- layout?: SystelabVirtualKeyboardLayouts;
34
- inputMethod?: SystelabVirtualKeyboardInputMethods;
35
- showIcon?: boolean;
36
- showOnMouseClick?: boolean;
7
+ declare namespace SystelabVirtualKeyboard {
8
+ interface Config {
9
+ layout?: SystelabVirtualKeyboard.Layouts;
10
+ inputMethod?: SystelabVirtualKeyboard.InputMethods;
11
+ showIcon?: boolean;
12
+ showOnMouseClick?: boolean;
13
+ }
14
+ enum InputMethods {
15
+ onlyMouseEvents = "onlyMouseEvents",
16
+ onlyTouchEvents = "onlyTouchEvents"
17
+ }
18
+ enum Layouts {
19
+ AlphaNumeric = "alpha-numeric",
20
+ AlphaNumericShift = "alpha-numeric-shift",
21
+ AlphaNumericUppercase = "alpha-numeric-uppercase",
22
+ AlphaNumericUppercaseShift = "alpha-numeric-uppercase-shift",
23
+ Numeric = "numeric",
24
+ NumericShift = "numeric-shift"
25
+ }
37
26
  }
38
27
 
39
28
  declare class SystelabVirtualKeyboardComponent implements AfterViewInit {
40
- private elementRef;
41
- private virtualKeyboardConfig;
29
+ private readonly elementRef;
30
+ private readonly virtualKeyboardConfig;
42
31
  handleKeyUp(event: KeyboardEvent): void;
43
32
  handleMouseUp(event: PointerEvent): void;
44
33
  get maxLength(): number;
@@ -50,13 +39,19 @@ declare class SystelabVirtualKeyboardComponent implements AfterViewInit {
50
39
  private caretPositionEnd;
51
40
  private activeInputElement;
52
41
  private shiftPressed;
42
+ private specialKeysAlwaysUppercase;
43
+ private capsLockOn;
53
44
  closePanel: EventEmitter<void>;
54
- constructor(elementRef: ElementRef<HTMLInputElement>, virtualKeyboardConfig: SystelabVirtualKeyboardConfig);
45
+ constructor(elementRef: ElementRef<HTMLInputElement>, virtualKeyboardConfig: SystelabVirtualKeyboard.Config);
55
46
  ngAfterViewInit(): void;
56
47
  setActiveInput(input: HTMLInputElement | HTMLTextAreaElement): void;
57
- setLayout(layout: SystelabVirtualKeyboardLayouts): void;
48
+ setLayout(layout: SystelabVirtualKeyboard.Layouts | 'default'): void;
58
49
  private prepareKeyboardConfig;
50
+ private buildButtonThemes;
51
+ private setButtonClasses;
59
52
  private handleKeyPress;
53
+ private addUppercaseClass;
54
+ private removeUppercaseClass;
60
55
  private handleButtonOutput;
61
56
  private getCommonParams;
62
57
  private isAcceptedNonStandardButton;
@@ -88,7 +83,7 @@ declare class SystelabVirtualKeyboardOverlayService {
88
83
  constructor(overlay: Overlay);
89
84
  isCreated(): boolean;
90
85
  isOpen(): boolean;
91
- create(inputOrigin: HTMLInputElement, showKeyboardButtonElement: HTMLElement, fixedBottom: boolean, layout?: SystelabVirtualKeyboardLayouts): ComponentRef<SystelabVirtualKeyboardComponent>;
86
+ create(inputOrigin: HTMLInputElement, showKeyboardButtonElement: HTMLElement, fixedBottom: boolean, layout?: SystelabVirtualKeyboard.Layouts | 'default'): ComponentRef<SystelabVirtualKeyboardComponent>;
92
87
  updatePosition(): void;
93
88
  setClickAlreadyHandled(): void;
94
89
  setTouchEndAlreadyHandled(): void;
@@ -113,7 +108,7 @@ declare class SystelabVirtualKeyboardDirective implements OnInit, AfterViewInit,
113
108
  private readonly overlayService;
114
109
  private readonly renderer;
115
110
  private readonly document;
116
- private virtualKeyboardConfig;
111
+ private readonly virtualKeyboardConfig;
117
112
  onDocumentScroll(): void;
118
113
  onClick(): void;
119
114
  onTouchEnd(): void;
@@ -127,11 +122,11 @@ declare class SystelabVirtualKeyboardDirective implements OnInit, AfterViewInit,
127
122
  get vkDebug(): boolean;
128
123
  set vkDebug(debug: boolean);
129
124
  private config;
130
- get vkConfig(): SystelabVirtualKeyboardConfig;
131
- set vkConfig(config: SystelabVirtualKeyboardConfig);
125
+ get vkConfig(): SystelabVirtualKeyboard.Config;
126
+ set vkConfig(config: SystelabVirtualKeyboard.Config);
132
127
  private panelRef;
133
128
  private showKeyboardButtonElement;
134
- constructor(elementRef: ElementRef<HTMLInputElement>, overlayService: SystelabVirtualKeyboardOverlayService, renderer: Renderer2, document: any, virtualKeyboardConfig: SystelabVirtualKeyboardConfig);
129
+ constructor(elementRef: ElementRef<HTMLInputElement>, overlayService: SystelabVirtualKeyboardOverlayService, renderer: Renderer2, document: any, virtualKeyboardConfig: SystelabVirtualKeyboard.Config);
135
130
  ngOnInit(): void;
136
131
  ngAfterViewInit(): void;
137
132
  ngOnDestroy(): void;
@@ -150,13 +145,12 @@ declare class SystelabVirtualKeyboardDirective implements OnInit, AfterViewInit,
150
145
 
151
146
  declare const factory: () => void;
152
147
  declare class SystelabVirtualKeyboardModule {
153
- static forRoot(conf?: SystelabVirtualKeyboardConfig): ModuleWithProviders<SystelabVirtualKeyboardModule>;
148
+ static forRoot(conf?: SystelabVirtualKeyboard.Config): ModuleWithProviders<SystelabVirtualKeyboardModule>;
154
149
  static forChild(): ModuleWithProviders<SystelabVirtualKeyboardModule>;
155
150
  static ɵfac: i0.ɵɵFactoryDeclaration<SystelabVirtualKeyboardModule, never>;
156
151
  static ɵmod: i0.ɵɵNgModuleDeclaration<SystelabVirtualKeyboardModule, [typeof SystelabVirtualKeyboardDirective], [typeof i2.CommonModule, typeof i3.OverlayModule], [typeof SystelabVirtualKeyboardDirective]>;
157
152
  static ɵinj: i0.ɵɵInjectorDeclaration<SystelabVirtualKeyboardModule>;
158
153
  }
159
154
 
160
- export { SystelabVirtualKeyboardButton, SystelabVirtualKeyboardDirective, SystelabVirtualKeyboardInputMethods, SystelabVirtualKeyboardInputModes, SystelabVirtualKeyboardLayouts, SystelabVirtualKeyboardModule, factory };
161
- export type { SystelabVirtualKeyboardConfig };
155
+ export { SystelabVirtualKeyboard, SystelabVirtualKeyboardDirective, SystelabVirtualKeyboardModule, factory };
162
156
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../projects/systelab-virtual-keyboard/src/lib/constants.ts","../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.config.ts","../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.ts","../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard-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,null],"names":[],"mappings":";;;;;;AASA;AACI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACH;AAED;AACI;AACA;AACA;AACH;AAED;AACI;AACA;AACH;AAED;AACI;AACA;AACA;AACH;;;;;;;ACzBA;;ACSD;AAuCgB;AAA+F;AA9B3G;AAQA;;;AAYO;;;;;;;AAQG;;;AAgCH;AAiBA;AASP;AAoDA;AAuCA;AAwBA;AAIA;AASA;AAqBA;AAqBA;AAQA;AAOA;AA6BA;AAsBA;AAqCA;AAQA;AAWA;AAaA;;;AAIH;;ACjZD;;;;;;;;;;AAaiC;AAItB;AAIA;;AAgCA;AAIA;AAIA;AAIA;AAQP;AAKA;AAUA;AAUA;AAgBO;AAIP;AAMA;AAMA;AAyCA;AAUA;AAaA;;;AASH;;AClMD;;;;;AAkGqD;;AAjFjD;AAWA;;AAYA;;;;AAoBA;;;AAeA;;;AAWA;;;;;;AA8BA;AAQA;AAWA;AAoBA;AAaA;AAKA;AAKA;AAIA;AAIA;AAIA;;;AAUH;;AChOD;AAQA;;AAkBkB;;;;AAMjB;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.public.ts","../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.component.ts","../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard-overlay.service.ts","../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.directive.ts","../../projects/systelab-virtual-keyboard/src/lib/systelab-virtual-keyboard.module.ts"],"sourcesContent":[null,null,null,null,null],"names":[],"mappings":";;;;;;AASA;AAEI;AACI;AACA;;;AAGH;AAED;AACI;AACA;AACH;AAED;AACI;AACA;AACA;AACA;AACA;AACA;AACH;AACJ;;AChBD;;;AAQI;AAQA;;;AAYO;;;;;;;;;AAWG;;;AAaH;;AA+BP;AA+BA;AAiBA;AAIA;AA0DA;AAQA;AAWA;AAwBA;AAIA;AASA;AAqBA;AAqBA;AA2BA;AAOA;AA6BA;AAsBA;AAqCA;AAQA;AAWA;AAaA;;;AAIH;;AC1bD;;;;;;;;;;AAaiC;AAItB;AAIA;;AAgCA;AAIA;AAIA;AAIA;AAQP;AAKA;AAUA;AAUA;AAgBO;AAIP;AAMA;AAMA;AAyCA;AAUA;AAaA;;;AASH;;ACnMD;;;;;;;AAiBI;AAWA;;AAYA;;;;AAoBA;;;AAeA;;AAMA;AAKA;;;;;;AA8BA;AAQA;AAWA;AAoBA;AAaA;AAKA;AAKA;AAIA;AAIA;AAIA;;;AAUH;;AC9ND;AAQA;;AAkBkB;;;;AAMjB;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "systelab-virtual-keyboard",
3
- "version": "20.0.0",
3
+ "version": "20.1.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0",
@@ -0,0 +1,102 @@
1
+ @mixin forceWidth($width) {
2
+ min-width: #{$width} !important;
3
+ max-width: #{$width} !important;
4
+ }
5
+
6
+ :root {
7
+ --systelab-virtual-keyboard-font-family: 'SF Mono', 'Menlo', 'Consolas', 'Courier New', monospace;
8
+ --systelab-virtual-keyboard-background-color: #B2B2B2;
9
+ --systelab-virtual-keyboard-button-color: #E5E5E5;
10
+ --systelab-virtual-keyboard-button-font-color: #000000;
11
+ --systelab-virtual-keyboard-active-special-button-color: #4D4D4D;
12
+ --systelab-virtual-keyboard-active-special-button-font-color: #FFFFFF;
13
+ }
14
+
15
+ :host {
16
+ width: 100%;
17
+ }
18
+
19
+ .systelab-virtual-keyboard-theme {
20
+ font-family: var(--systelab-virtual-keyboard-font-family);
21
+ background-color: var(--systelab-virtual-keyboard-background-color);
22
+
23
+ .hg-row {
24
+ .hg-button {
25
+ box-sizing: border-box;
26
+ height: 65px;
27
+ min-width: 75px;
28
+ max-width: 75px !important;
29
+ border-radius: 10px;
30
+ &:not(:last-child) {
31
+ margin-right: 6.8px !important;
32
+ }
33
+ }
34
+ }
35
+
36
+ &.hg-layout-alpha-numeric,
37
+ &.hg-layout-alpha-numeric-shift,
38
+ &.hg-layout-alpha-numeric-uppercase,
39
+ &.hg-layout-alpha-numeric-uppercase-shift {
40
+ .hg-row {
41
+ &:first-child .hg-button {
42
+ height: 50px;
43
+ }
44
+ }
45
+ .hg-button-shift {
46
+ @include forceWidth(182px);
47
+ }
48
+
49
+ .hg-button-bksp {
50
+ @include forceWidth(125px);
51
+ }
52
+
53
+ .hg-button-tab {
54
+ @include forceWidth(126px);
55
+ }
56
+
57
+ .hg-button-enter,
58
+ .hg-button-lock {
59
+ @include forceWidth(141px);
60
+ }
61
+
62
+ .hg-button-space {
63
+ @include forceWidth(100%);
64
+ }
65
+ }
66
+
67
+ .virtual-keyboard-delete-button,
68
+ .virtual-keyboard-enter-button,
69
+ .virtual-keyboard-function-button {
70
+ background-color: var(--systelab-virtual-keyboard-button-color);
71
+ color: var(--systelab-virtual-keyboard-button-font-color);
72
+ &:first-child {
73
+ justify-content: flex-start;
74
+ align-items: flex-end;
75
+ padding-left: 15px;
76
+ padding-bottom: 15px;
77
+ }
78
+ &:last-child {
79
+ justify-content: flex-end;
80
+ align-items: flex-end;
81
+ padding-right: 15px;
82
+ padding-bottom: 15px;
83
+ }
84
+ }
85
+
86
+ .hg-button-tab {
87
+ justify-content: flex-start;
88
+ align-items: flex-end;
89
+ padding-left: 15px;
90
+ padding-bottom: 15px;
91
+ }
92
+
93
+ .virtual-keyboard-lock-active,
94
+ .virtual-keyboard-shift-active {
95
+ background-color: var(--systelab-virtual-keyboard-active-special-button-color);
96
+ color: var(--systelab-virtual-keyboard-active-special-button-font-color);
97
+ }
98
+
99
+ .virtual-keyboard-uppercase {
100
+ text-transform: uppercase;
101
+ }
102
+ }