@sam-senior/virtual-keyboard 1.0.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/virtual-keyboard.directive.mjs +232 -0
- package/esm2022/lib/virtual-keyboard.module.mjs +16 -0
- package/esm2022/public_api.mjs +6 -0
- package/esm2022/sam-senior-virtual-keyboard.mjs +5 -0
- package/{fesm2015/sam-senior-virtual-keyboard.js → fesm2022/sam-senior-virtual-keyboard.mjs} +240 -332
- package/fesm2022/sam-senior-virtual-keyboard.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/virtual-keyboard.directive.d.ts +37 -33
- package/lib/virtual-keyboard.module.d.ts +7 -2
- package/package.json +18 -14
- package/public_api.d.ts +2 -1
- package/bundles/sam-senior-virtual-keyboard.umd.js +0 -412
- package/bundles/sam-senior-virtual-keyboard.umd.js.map +0 -1
- package/bundles/sam-senior-virtual-keyboard.umd.min.js +0 -2
- package/bundles/sam-senior-virtual-keyboard.umd.min.js.map +0 -1
- package/esm2015/lib/virtual-keyboard.directive.js +0 -368
- package/esm2015/lib/virtual-keyboard.module.js +0 -15
- package/esm2015/public_api.js +0 -9
- package/esm2015/sam-senior-virtual-keyboard.js +0 -10
- package/esm5/lib/virtual-keyboard.directive.js +0 -425
- package/esm5/lib/virtual-keyboard.module.js +0 -19
- package/esm5/public_api.js +0 -9
- package/esm5/sam-senior-virtual-keyboard.js +0 -10
- package/fesm2015/sam-senior-virtual-keyboard.js.map +0 -1
- package/fesm5/sam-senior-virtual-keyboard.js +0 -407
- package/fesm5/sam-senior-virtual-keyboard.js.map +0 -1
- package/sam-senior-virtual-keyboard.d.ts +0 -5
- package/sam-senior-virtual-keyboard.metadata.json +0 -1
package/{fesm2015/sam-senior-virtual-keyboard.js → fesm2022/sam-senior-virtual-keyboard.mjs}
RENAMED
|
@@ -1,274 +1,190 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, Directive, Optional, Input, Output, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/forms';
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.keyboardjQueryElement
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (this.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
/** @type {?} */
|
|
188
|
-
const keyboardOptions = this.getDefaultKeyboardOptions();
|
|
189
|
-
if (this.keyboardPosition !== 'relative') {
|
|
190
|
-
keyboardOptions.position = false;
|
|
191
|
-
}
|
|
192
|
-
if (this.keyboardPosition === 'bottom') {
|
|
193
|
-
this.addBottomKeyboardClass();
|
|
194
|
-
}
|
|
195
|
-
keyboardOptions.css = {
|
|
196
|
-
buttonDefault: 'keyboard-button-override'
|
|
197
|
-
};
|
|
198
|
-
keyboardOptions.display = this.getKeyboardDisplayOptions();
|
|
199
|
-
keyboardOptions.layout = 'custom';
|
|
200
|
-
keyboardOptions.customLayout = this.getKeyboardLayout();
|
|
201
|
-
return keyboardOptions;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* @private
|
|
205
|
-
* @return {?}
|
|
206
|
-
*/
|
|
207
|
-
onKeyboardVisible() {
|
|
208
|
-
this.addCustomKeyboardFocusClass();
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* @private
|
|
212
|
-
* @return {?}
|
|
213
|
-
*/
|
|
214
|
-
onBeforeClose() {
|
|
215
|
-
// O elemente do jQuery limpa tudo o que não passou pelo accept
|
|
216
|
-
// Necessário setar o valor quando somente fechado a modal.
|
|
217
|
-
/** @type {?} */
|
|
218
|
-
const formControl = this.fieldControl.control;
|
|
219
|
-
formControl.setValue(this.value);
|
|
220
|
-
this.showKeyboard = false;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* @private
|
|
224
|
-
* @return {?}
|
|
225
|
-
*/
|
|
226
|
-
onValueAccepted() {
|
|
227
|
-
/** @type {?} */
|
|
228
|
-
const casted = (/** @type {?} */ (this.keyboardElement));
|
|
229
|
-
this.keyboardValueAccepted.emit(casted.value);
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* @private
|
|
233
|
-
* @param {?} event
|
|
234
|
-
* @return {?}
|
|
235
|
-
*/
|
|
236
|
-
onChange(event) {
|
|
237
|
-
/** @type {?} */
|
|
238
|
-
const virtualkeyboardevent = new CustomEvent('virtualkeyboardevent', event);
|
|
239
|
-
document.dispatchEvent(virtualkeyboardevent);
|
|
240
|
-
if (this.keyboardElement instanceof HTMLInputElement) {
|
|
241
|
-
/** @type {?} */
|
|
242
|
-
const keyboardElement = (/** @type {?} */ (this.keyboardElement));
|
|
243
|
-
// Arquivo possui referecia do jQuery que é alterado ao fechar o teclado.
|
|
244
|
-
// Necessário clonar a string.
|
|
245
|
-
/** @type {?} */
|
|
246
|
-
const inputVal = JSON.stringify(keyboardElement.value).replace('"', '').replace('"', '');
|
|
247
|
-
if (this.fieldControl) {
|
|
248
|
-
/** @type {?} */
|
|
249
|
-
const formControl = this.fieldControl.control;
|
|
250
|
-
this.value = inputVal;
|
|
251
|
-
formControl.setValue(inputVal);
|
|
252
|
-
formControl.markAsDirty();
|
|
253
|
-
formControl.updateValueAndValidity();
|
|
254
|
-
}
|
|
255
|
-
// Este setTimeout é necessário para fazer com que o
|
|
256
|
-
// cursor do input sempre esteja no final da string digitada
|
|
257
|
-
// e o final da string sempre esteja visivel.
|
|
258
|
-
setTimeout((/**
|
|
259
|
-
* @return {?}
|
|
260
|
-
*/
|
|
261
|
-
() => {
|
|
262
|
-
keyboardElement.value = inputVal;
|
|
263
|
-
keyboardElement.scrollLeft = keyboardElement.scrollWidth;
|
|
264
|
-
}));
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* @private
|
|
269
|
-
* @return {?}
|
|
270
|
-
*/
|
|
271
|
-
addBottomKeyboardClass() {
|
|
5
|
+
/***************************************************************
|
|
6
|
+
* Método que retonar instancia do elemento jQuery, pois
|
|
7
|
+
* o projeto que implementa esta diretiva fica fora da lib.
|
|
8
|
+
* Devido ficar fora, o webpack não ficará aqui, portando não
|
|
9
|
+
* tem jQuery na lib;
|
|
10
|
+
****************************************************************/
|
|
11
|
+
const jQueryInstance = (element) => {
|
|
12
|
+
const windowInstance = window;
|
|
13
|
+
return windowInstance.jQuery ? windowInstance.jQuery(element) : null;
|
|
14
|
+
};
|
|
15
|
+
class VirtualKeyboardDirective {
|
|
16
|
+
elementRef;
|
|
17
|
+
fieldControl;
|
|
18
|
+
keyboardPosition = 'bottom';
|
|
19
|
+
keyboardType = 'email';
|
|
20
|
+
set activateKeyboard(activateKeyboard) {
|
|
21
|
+
if (activateKeyboard) {
|
|
22
|
+
this.keyboardElement = this.elementRef.nativeElement;
|
|
23
|
+
this.keyboardjQueryElement = jQueryInstance(this.keyboardElement);
|
|
24
|
+
if (this.keyboardjQueryElement) {
|
|
25
|
+
this.keyboardjQueryElement.keyboard(this.createKeyboardOptions());
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
showOnFocus = true;
|
|
30
|
+
get showKeyboard() {
|
|
31
|
+
return this._showKeyboard;
|
|
32
|
+
}
|
|
33
|
+
set showKeyboard(revealKeyboard) {
|
|
34
|
+
this._showKeyboard = revealKeyboard;
|
|
35
|
+
this.showKeyboardChange.emit(this._showKeyboard);
|
|
36
|
+
}
|
|
37
|
+
keyboardValueAccepted = new EventEmitter();
|
|
38
|
+
showKeyboardChange = new EventEmitter();
|
|
39
|
+
_showKeyboard = false;
|
|
40
|
+
keyboardElement;
|
|
41
|
+
value = '';
|
|
42
|
+
// Any devido a ser referência do jQuery;
|
|
43
|
+
keyboardjQueryElement;
|
|
44
|
+
constructor(elementRef, fieldControl) {
|
|
45
|
+
this.elementRef = elementRef;
|
|
46
|
+
this.fieldControl = fieldControl;
|
|
47
|
+
}
|
|
48
|
+
ngOnChanges() {
|
|
49
|
+
if (this.showKeyboard && this.isKeyboardCreated()) {
|
|
50
|
+
this.keyboardjQueryElement.getkeyboard().reveal();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
ngOnDestroy() {
|
|
54
|
+
if (this.isKeyboardCreated()) {
|
|
55
|
+
this.keyboardjQueryElement
|
|
56
|
+
.keyboard()
|
|
57
|
+
.getkeyboard()
|
|
58
|
+
.destroy();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
isKeyboardCreated() {
|
|
62
|
+
return (this.keyboardjQueryElement &&
|
|
63
|
+
this.keyboardjQueryElement.keyboard() &&
|
|
64
|
+
this.keyboardjQueryElement.keyboard().getkeyboard());
|
|
65
|
+
}
|
|
66
|
+
getDefaultKeyboardOptions() {
|
|
67
|
+
const keyboardOptions = {};
|
|
68
|
+
if (!this.showOnFocus) {
|
|
69
|
+
keyboardOptions.openOn = '';
|
|
70
|
+
}
|
|
71
|
+
keyboardOptions.usePreview = false;
|
|
72
|
+
keyboardOptions.accepted = this.onValueAccepted.bind(this);
|
|
73
|
+
keyboardOptions.visible = this.onKeyboardVisible.bind(this);
|
|
74
|
+
keyboardOptions.beforeClose = this.onBeforeClose.bind(this);
|
|
75
|
+
keyboardOptions.change = this.onChange.bind(this);
|
|
76
|
+
return keyboardOptions;
|
|
77
|
+
}
|
|
78
|
+
getKeyboardDisplayOptions() {
|
|
79
|
+
return {
|
|
80
|
+
bksp: '\u2190',
|
|
81
|
+
normal: 'ABC',
|
|
82
|
+
meta1: '%?@',
|
|
83
|
+
meta2: '#+=',
|
|
84
|
+
accept: 'OK'
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
getKeyboardLayout() {
|
|
88
|
+
let customLayout = {};
|
|
89
|
+
if (this.keyboardType === 'alphanumeric') {
|
|
90
|
+
customLayout = {
|
|
91
|
+
normal: [
|
|
92
|
+
'1 2 3 4 5 6 7 8 9 0',
|
|
93
|
+
'Q W E R T Y U I O P {bksp}',
|
|
94
|
+
'A S D F G H J K L Ç',
|
|
95
|
+
'Z X C V B N M {accept}'
|
|
96
|
+
]
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
else if (this.keyboardType === 'email') {
|
|
100
|
+
customLayout = this.getCustomKeyboardForEmail();
|
|
101
|
+
}
|
|
102
|
+
return customLayout;
|
|
103
|
+
}
|
|
104
|
+
getCustomKeyboardForEmail() {
|
|
105
|
+
return {
|
|
106
|
+
normal: [
|
|
107
|
+
'1 2 3 4 5 6 7 8 9 0',
|
|
108
|
+
'q w e r t y u i o p {bksp}',
|
|
109
|
+
'a s d f g h j k l ç',
|
|
110
|
+
'{s} z x c v b n m .',
|
|
111
|
+
'{meta1} {space} _ - {accept}'
|
|
112
|
+
],
|
|
113
|
+
shift: [
|
|
114
|
+
'1 2 3 4 5 6 7 8 9 0',
|
|
115
|
+
'Q W E R T Y U I O P {bksp}',
|
|
116
|
+
'A S D F G H J K L Ç',
|
|
117
|
+
'{s} Z X C V B N M .',
|
|
118
|
+
'{meta1} {space} _ - {accept}'
|
|
119
|
+
],
|
|
120
|
+
meta1: [
|
|
121
|
+
"` | { } % ^ * / ' {bksp}",
|
|
122
|
+
'{meta2} $ & ~ # = + @',
|
|
123
|
+
'{normal} {space} ! ? {accept}'
|
|
124
|
+
],
|
|
125
|
+
meta2: [
|
|
126
|
+
'[ ] { } \u2039 \u203a ^ * " , {bksp}',
|
|
127
|
+
'\\ | / < > $ \u00a3 \u00a5 \u2022',
|
|
128
|
+
'{meta1} \u20ac & ~ # = + .',
|
|
129
|
+
'{normal} {space} ! ? {accept}'
|
|
130
|
+
]
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
createKeyboardOptions() {
|
|
134
|
+
const keyboardOptions = this.getDefaultKeyboardOptions();
|
|
135
|
+
if (this.keyboardPosition !== 'relative') {
|
|
136
|
+
keyboardOptions.position = false;
|
|
137
|
+
}
|
|
138
|
+
if (this.keyboardPosition === 'bottom') {
|
|
139
|
+
this.addBottomKeyboardClass();
|
|
140
|
+
}
|
|
141
|
+
keyboardOptions.css = {
|
|
142
|
+
buttonDefault: 'keyboard-button-override'
|
|
143
|
+
};
|
|
144
|
+
keyboardOptions.display = this.getKeyboardDisplayOptions();
|
|
145
|
+
keyboardOptions.layout = 'custom';
|
|
146
|
+
keyboardOptions.customLayout = this.getKeyboardLayout();
|
|
147
|
+
return keyboardOptions;
|
|
148
|
+
}
|
|
149
|
+
onKeyboardVisible() {
|
|
150
|
+
this.addCustomKeyboardFocusClass();
|
|
151
|
+
}
|
|
152
|
+
onBeforeClose() {
|
|
153
|
+
// O elemente do jQuery limpa tudo o que não passou pelo accept
|
|
154
|
+
// Necessário setar o valor quando somente fechado a modal.
|
|
155
|
+
const formControl = this.fieldControl.control;
|
|
156
|
+
formControl.setValue(this.value);
|
|
157
|
+
this.showKeyboard = false;
|
|
158
|
+
}
|
|
159
|
+
onValueAccepted() {
|
|
160
|
+
const casted = this.keyboardElement;
|
|
161
|
+
this.keyboardValueAccepted.emit(casted.value);
|
|
162
|
+
}
|
|
163
|
+
onChange(event) {
|
|
164
|
+
const virtualkeyboardevent = new CustomEvent('virtualkeyboardevent', event);
|
|
165
|
+
document.dispatchEvent(virtualkeyboardevent);
|
|
166
|
+
if (this.keyboardElement instanceof HTMLInputElement) {
|
|
167
|
+
const keyboardElement = this.keyboardElement;
|
|
168
|
+
// Arquivo possui referecia do jQuery que é alterado ao fechar o teclado.
|
|
169
|
+
// Necessário clonar a string.
|
|
170
|
+
const inputVal = JSON.stringify(keyboardElement.value).replace('"', '').replace('"', '');
|
|
171
|
+
if (this.fieldControl) {
|
|
172
|
+
const formControl = this.fieldControl.control;
|
|
173
|
+
this.value = inputVal;
|
|
174
|
+
formControl.setValue(inputVal);
|
|
175
|
+
formControl.markAsDirty();
|
|
176
|
+
formControl.updateValueAndValidity();
|
|
177
|
+
}
|
|
178
|
+
// Este setTimeout é necessário para fazer com que o
|
|
179
|
+
// cursor do input sempre esteja no final da string digitada
|
|
180
|
+
// e o final da string sempre esteja visivel.
|
|
181
|
+
setTimeout(() => {
|
|
182
|
+
keyboardElement.value = inputVal;
|
|
183
|
+
keyboardElement.scrollLeft = keyboardElement.scrollWidth;
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
addBottomKeyboardClass() {
|
|
272
188
|
this.injectCssRule(`.ui-keyboard {
|
|
273
189
|
border-radius: 0;
|
|
274
190
|
left: 0;
|
|
@@ -276,73 +192,65 @@ class VirtualKeyboardDirective {
|
|
|
276
192
|
bottom: 0;
|
|
277
193
|
position: fixed;
|
|
278
194
|
width: 100%;
|
|
279
|
-
}`);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
* @private
|
|
283
|
-
* @return {?}
|
|
284
|
-
*/
|
|
285
|
-
addCustomKeyboardFocusClass() {
|
|
195
|
+
}`);
|
|
196
|
+
}
|
|
197
|
+
addCustomKeyboardFocusClass() {
|
|
286
198
|
this.injectCssRule(`.ui-keyboard-has-focus {
|
|
287
199
|
z-index: 900;
|
|
288
|
-
}`);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
]
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
};
|
|
200
|
+
}`);
|
|
201
|
+
}
|
|
202
|
+
injectCssRule(rule) {
|
|
203
|
+
const style = document.createElement('style');
|
|
204
|
+
style.appendChild(document.createTextNode(''));
|
|
205
|
+
document.head.appendChild(style);
|
|
206
|
+
style.sheet.insertRule(rule);
|
|
207
|
+
}
|
|
208
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VirtualKeyboardDirective, deps: [{ token: i0.ElementRef }, { token: i1.NgControl, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
209
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: VirtualKeyboardDirective, selector: "[samVirtualKeyboard]", inputs: { keyboardPosition: "keyboardPosition", keyboardType: "keyboardType", activateKeyboard: "activateKeyboard", showOnFocus: "showOnFocus", showKeyboard: "showKeyboard" }, outputs: { keyboardValueAccepted: "keyboardValueAccepted", showKeyboardChange: "showKeyboardChange" }, usesOnChanges: true, ngImport: i0 });
|
|
210
|
+
}
|
|
211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VirtualKeyboardDirective, decorators: [{
|
|
212
|
+
type: Directive,
|
|
213
|
+
args: [{
|
|
214
|
+
selector: '[samVirtualKeyboard]'
|
|
215
|
+
}]
|
|
216
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
|
|
217
|
+
type: Optional
|
|
218
|
+
}] }], propDecorators: { keyboardPosition: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], keyboardType: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], activateKeyboard: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], showOnFocus: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], showKeyboard: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}], keyboardValueAccepted: [{
|
|
229
|
+
type: Output
|
|
230
|
+
}], showKeyboardChange: [{
|
|
231
|
+
type: Output
|
|
232
|
+
}] } });
|
|
322
233
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
];
|
|
234
|
+
class VirtualKeyboardModule {
|
|
235
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VirtualKeyboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
236
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: VirtualKeyboardModule, declarations: [VirtualKeyboardDirective], exports: [VirtualKeyboardDirective] });
|
|
237
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VirtualKeyboardModule });
|
|
238
|
+
}
|
|
239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VirtualKeyboardModule, decorators: [{
|
|
240
|
+
type: NgModule,
|
|
241
|
+
args: [{
|
|
242
|
+
declarations: [VirtualKeyboardDirective],
|
|
243
|
+
exports: [VirtualKeyboardDirective]
|
|
244
|
+
}]
|
|
245
|
+
}] });
|
|
335
246
|
|
|
336
|
-
|
|
337
|
-
*
|
|
338
|
-
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
247
|
+
/*
|
|
248
|
+
* Public API Surface of virtual-keyboard
|
|
339
249
|
*/
|
|
340
250
|
|
|
341
|
-
/**
|
|
342
|
-
*
|
|
343
|
-
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
251
|
+
/**
|
|
252
|
+
* Generated bundle index. Do not edit.
|
|
344
253
|
*/
|
|
345
254
|
|
|
346
|
-
export {
|
|
347
|
-
|
|
348
|
-
//# sourceMappingURL=sam-senior-virtual-keyboard.js.map
|
|
255
|
+
export { VirtualKeyboardDirective, VirtualKeyboardModule };
|
|
256
|
+
//# sourceMappingURL=sam-senior-virtual-keyboard.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sam-senior-virtual-keyboard.mjs","sources":["../../../projects/sam-virtual-keyboard/src/lib/virtual-keyboard.directive.ts","../../../projects/sam-virtual-keyboard/src/lib/virtual-keyboard.module.ts","../../../projects/sam-virtual-keyboard/src/public_api.ts","../../../projects/sam-virtual-keyboard/src/sam-senior-virtual-keyboard.ts"],"sourcesContent":["import { Directive, OnDestroy, OnChanges, ElementRef, Optional, Input, Output, EventEmitter } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\nimport { KeyboardOptions } from 'virtual-keyboard';\r\n\r\n/***************************************************************\r\n* Método que retonar instancia do elemento jQuery, pois\r\n* o projeto que implementa esta diretiva fica fora da lib.\r\n* Devido ficar fora, o webpack não ficará aqui, portando não\r\n* tem jQuery na lib;\r\n****************************************************************/\r\nconst jQueryInstance = (element) => {\r\n const windowInstance = window as any;\r\n return windowInstance.jQuery ? windowInstance.jQuery(element) : null;\r\n};\r\n\r\n@Directive({\r\n selector: '[samVirtualKeyboard]'\r\n})\r\nexport class VirtualKeyboardDirective\r\n implements OnDestroy, OnChanges {\r\n\r\n @Input() private keyboardPosition: 'relative' | 'bottom' = 'bottom';\r\n @Input() private keyboardType: 'email' | 'alphanumeric' = 'email';\r\n @Input() public set activateKeyboard(activateKeyboard: boolean) {\r\n if (activateKeyboard) {\r\n this.keyboardElement = this.elementRef.nativeElement as HTMLElement;\r\n this.keyboardjQueryElement = jQueryInstance(this.keyboardElement);\r\n if (this.keyboardjQueryElement) {\r\n this.keyboardjQueryElement.keyboard(this.createKeyboardOptions());\r\n }\r\n }\r\n }\r\n @Input() private showOnFocus = true;\r\n @Input()\r\n public get showKeyboard(): boolean {\r\n return this._showKeyboard;\r\n }\r\n public set showKeyboard(revealKeyboard: boolean) {\r\n this._showKeyboard = revealKeyboard;\r\n this.showKeyboardChange.emit(this._showKeyboard);\r\n }\r\n\r\n @Output() private keyboardValueAccepted = new EventEmitter();\r\n @Output() public showKeyboardChange = new EventEmitter<boolean>();\r\n\r\n public _showKeyboard = false;\r\n private keyboardElement: HTMLElement;\r\n private value = '';\r\n\r\n // Any devido a ser referência do jQuery;\r\n private keyboardjQueryElement: any;\r\n\r\n constructor(\r\n public elementRef: ElementRef,\r\n @Optional() public fieldControl: NgControl\r\n ) { }\r\n\r\n ngOnChanges() {\r\n if (this.showKeyboard && this.isKeyboardCreated()) {\r\n this.keyboardjQueryElement.getkeyboard().reveal();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.isKeyboardCreated()) {\r\n this.keyboardjQueryElement\r\n .keyboard()\r\n .getkeyboard()\r\n .destroy();\r\n }\r\n }\r\n\r\n private isKeyboardCreated(): boolean {\r\n return (\r\n this.keyboardjQueryElement &&\r\n this.keyboardjQueryElement.keyboard() &&\r\n this.keyboardjQueryElement.keyboard().getkeyboard()\r\n );\r\n }\r\n\r\n private getDefaultKeyboardOptions() {\r\n const keyboardOptions = {} as KeyboardOptions;\r\n if (!this.showOnFocus) {\r\n keyboardOptions.openOn = '';\r\n }\r\n keyboardOptions.usePreview = false;\r\n keyboardOptions.accepted = this.onValueAccepted.bind(this);\r\n keyboardOptions.visible = this.onKeyboardVisible.bind(this);\r\n keyboardOptions.beforeClose = this.onBeforeClose.bind(this);\r\n keyboardOptions.change = this.onChange.bind(this);\r\n return keyboardOptions;\r\n }\r\n\r\n private getKeyboardDisplayOptions() {\r\n return {\r\n bksp: '\\u2190',\r\n normal: 'ABC',\r\n meta1: '%?@',\r\n meta2: '#+=',\r\n accept: 'OK'\r\n };\r\n }\r\n\r\n private getKeyboardLayout() {\r\n let customLayout = {};\r\n if (this.keyboardType === 'alphanumeric') {\r\n customLayout = {\r\n normal: [\r\n '1 2 3 4 5 6 7 8 9 0',\r\n 'Q W E R T Y U I O P {bksp}',\r\n 'A S D F G H J K L Ç',\r\n 'Z X C V B N M {accept}'\r\n ]\r\n };\r\n } else if (this.keyboardType === 'email') {\r\n customLayout = this.getCustomKeyboardForEmail();\r\n }\r\n return customLayout;\r\n }\r\n\r\n private getCustomKeyboardForEmail() {\r\n return {\r\n normal: [\r\n '1 2 3 4 5 6 7 8 9 0',\r\n 'q w e r t y u i o p {bksp}',\r\n 'a s d f g h j k l ç',\r\n '{s} z x c v b n m .',\r\n '{meta1} {space} _ - {accept}'\r\n ],\r\n shift: [\r\n '1 2 3 4 5 6 7 8 9 0',\r\n 'Q W E R T Y U I O P {bksp}',\r\n 'A S D F G H J K L Ç',\r\n '{s} Z X C V B N M .',\r\n '{meta1} {space} _ - {accept}'\r\n ],\r\n meta1: [\r\n \"` | { } % ^ * / ' {bksp}\",\r\n '{meta2} $ & ~ # = + @',\r\n '{normal} {space} ! ? {accept}'\r\n ],\r\n meta2: [\r\n '[ ] { } \\u2039 \\u203a ^ * \" , {bksp}',\r\n '\\\\ | / < > $ \\u00a3 \\u00a5 \\u2022',\r\n '{meta1} \\u20ac & ~ # = + .',\r\n '{normal} {space} ! ? {accept}'\r\n ]\r\n };\r\n }\r\n\r\n private createKeyboardOptions(): KeyboardOptions {\r\n const keyboardOptions = this.getDefaultKeyboardOptions();\r\n if (this.keyboardPosition !== 'relative') {\r\n keyboardOptions.position = false;\r\n }\r\n if (this.keyboardPosition === 'bottom') {\r\n this.addBottomKeyboardClass();\r\n }\r\n keyboardOptions.css = {\r\n buttonDefault: 'keyboard-button-override'\r\n };\r\n\r\n keyboardOptions.display = this.getKeyboardDisplayOptions();\r\n keyboardOptions.layout = 'custom';\r\n keyboardOptions.customLayout = this.getKeyboardLayout();\r\n\r\n return keyboardOptions;\r\n }\r\n\r\n private onKeyboardVisible() {\r\n this.addCustomKeyboardFocusClass();\r\n }\r\n\r\n private onBeforeClose() {\r\n // O elemente do jQuery limpa tudo o que não passou pelo accept\r\n // Necessário setar o valor quando somente fechado a modal.\r\n const formControl = this.fieldControl.control;\r\n formControl.setValue(this.value);\r\n this.showKeyboard = false;\r\n }\r\n\r\n private onValueAccepted() {\r\n const casted = this.keyboardElement as any;\r\n this.keyboardValueAccepted.emit(casted.value);\r\n }\r\n\r\n private onChange(event) {\r\n const virtualkeyboardevent = new CustomEvent('virtualkeyboardevent', event);\r\n document.dispatchEvent(virtualkeyboardevent);\r\n if (this.keyboardElement instanceof HTMLInputElement) {\r\n const keyboardElement = this.keyboardElement as HTMLInputElement;\r\n // Arquivo possui referecia do jQuery que é alterado ao fechar o teclado.\r\n // Necessário clonar a string.\r\n const inputVal = JSON.stringify(keyboardElement.value).replace('\"', '').replace('\"', '');\r\n if (this.fieldControl) {\r\n const formControl = this.fieldControl.control;\r\n this.value = inputVal;\r\n formControl.setValue(inputVal);\r\n formControl.markAsDirty();\r\n formControl.updateValueAndValidity();\r\n }\r\n // Este setTimeout é necessário para fazer com que o\r\n // cursor do input sempre esteja no final da string digitada\r\n // e o final da string sempre esteja visivel.\r\n setTimeout(() => {\r\n keyboardElement.value = inputVal;\r\n keyboardElement.scrollLeft = keyboardElement.scrollWidth;\r\n });\r\n }\r\n }\r\n\r\n private addBottomKeyboardClass() {\r\n this.injectCssRule(\r\n `.ui-keyboard {\r\n border-radius: 0;\r\n left: 0;\r\n top: auto;\r\n bottom: 0;\r\n position: fixed;\r\n width: 100%;\r\n }`\r\n );\r\n }\r\n\r\n private addCustomKeyboardFocusClass() {\r\n this.injectCssRule(\r\n `.ui-keyboard-has-focus {\r\n z-index: 900;\r\n }`\r\n );\r\n }\r\n\r\n private injectCssRule(rule) {\r\n const style = document.createElement('style') as any;\r\n style.appendChild(document.createTextNode(''));\r\n document.head.appendChild(style);\r\n style.sheet.insertRule(rule);\r\n }\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { VirtualKeyboardDirective } from './virtual-keyboard.directive';\r\n\r\n@NgModule({\r\n declarations: [VirtualKeyboardDirective],\r\n exports: [VirtualKeyboardDirective]\r\n})\r\nexport class VirtualKeyboardModule { }\r\n","/*\r\n * Public API Surface of virtual-keyboard\r\n */\r\nexport * from './lib/virtual-keyboard.directive';\r\nexport * from './lib/virtual-keyboard.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|