@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.
@@ -1,425 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { Directive, ElementRef, Optional, Input, Output, EventEmitter } from '@angular/core';
6
- import { NgControl } from '@angular/forms';
7
- /**
8
- * ************************************************************
9
- * Método que retonar instancia do elemento jQuery, pois
10
- * o projeto que implementa esta diretiva fica fora da lib.
11
- * Devido ficar fora, o webpack não ficará aqui, portando não
12
- * tem jQuery na lib;
13
- * **************************************************************
14
- * @type {?}
15
- */
16
- var jQueryInstance = (/**
17
- * @param {?} element
18
- * @return {?}
19
- */
20
- function (element) {
21
- /** @type {?} */
22
- var windowInstance = (/** @type {?} */ (window));
23
- return windowInstance.jQuery ? windowInstance.jQuery(element) : null;
24
- });
25
- var ɵ0 = jQueryInstance;
26
- var VirtualKeyboardDirective = /** @class */ (function () {
27
- function VirtualKeyboardDirective(elementRef, fieldControl) {
28
- this.elementRef = elementRef;
29
- this.fieldControl = fieldControl;
30
- this.keyboardPosition = 'bottom';
31
- this.keyboardType = 'email';
32
- this.showOnFocus = true;
33
- this.keyboardValueAccepted = new EventEmitter();
34
- this.showKeyboardChange = new EventEmitter();
35
- this._showKeyboard = false;
36
- this.value = '';
37
- }
38
- Object.defineProperty(VirtualKeyboardDirective.prototype, "activateKeyboard", {
39
- set: /**
40
- * @param {?} activateKeyboard
41
- * @return {?}
42
- */
43
- function (activateKeyboard) {
44
- if (activateKeyboard) {
45
- this.keyboardElement = (/** @type {?} */ (this.elementRef.nativeElement));
46
- this.keyboardjQueryElement = jQueryInstance(this.keyboardElement);
47
- if (this.keyboardjQueryElement) {
48
- this.keyboardjQueryElement.keyboard(this.createKeyboardOptions());
49
- }
50
- }
51
- },
52
- enumerable: true,
53
- configurable: true
54
- });
55
- Object.defineProperty(VirtualKeyboardDirective.prototype, "showKeyboard", {
56
- get: /**
57
- * @return {?}
58
- */
59
- function () {
60
- return this._showKeyboard;
61
- },
62
- set: /**
63
- * @param {?} revealKeyboard
64
- * @return {?}
65
- */
66
- function (revealKeyboard) {
67
- this._showKeyboard = revealKeyboard;
68
- this.showKeyboardChange.emit(this._showKeyboard);
69
- },
70
- enumerable: true,
71
- configurable: true
72
- });
73
- /**
74
- * @return {?}
75
- */
76
- VirtualKeyboardDirective.prototype.ngOnChanges = /**
77
- * @return {?}
78
- */
79
- function () {
80
- if (this.showKeyboard && this.isKeyboardCreated()) {
81
- this.keyboardjQueryElement.getkeyboard().reveal();
82
- }
83
- };
84
- /**
85
- * @return {?}
86
- */
87
- VirtualKeyboardDirective.prototype.ngOnDestroy = /**
88
- * @return {?}
89
- */
90
- function () {
91
- if (this.isKeyboardCreated()) {
92
- this.keyboardjQueryElement
93
- .keyboard()
94
- .getkeyboard()
95
- .destroy();
96
- }
97
- };
98
- /**
99
- * @private
100
- * @return {?}
101
- */
102
- VirtualKeyboardDirective.prototype.isKeyboardCreated = /**
103
- * @private
104
- * @return {?}
105
- */
106
- function () {
107
- return (this.keyboardjQueryElement &&
108
- this.keyboardjQueryElement.keyboard() &&
109
- this.keyboardjQueryElement.keyboard().getkeyboard());
110
- };
111
- /**
112
- * @private
113
- * @return {?}
114
- */
115
- VirtualKeyboardDirective.prototype.getDefaultKeyboardOptions = /**
116
- * @private
117
- * @return {?}
118
- */
119
- function () {
120
- /** @type {?} */
121
- var keyboardOptions = (/** @type {?} */ ({}));
122
- if (!this.showOnFocus) {
123
- keyboardOptions.openOn = '';
124
- }
125
- keyboardOptions.usePreview = false;
126
- keyboardOptions.accepted = this.onValueAccepted.bind(this);
127
- keyboardOptions.visible = this.onKeyboardVisible.bind(this);
128
- keyboardOptions.beforeClose = this.onBeforeClose.bind(this);
129
- keyboardOptions.change = this.onChange.bind(this);
130
- return keyboardOptions;
131
- };
132
- /**
133
- * @private
134
- * @return {?}
135
- */
136
- VirtualKeyboardDirective.prototype.getKeyboardDisplayOptions = /**
137
- * @private
138
- * @return {?}
139
- */
140
- function () {
141
- return {
142
- bksp: '\u2190',
143
- normal: 'ABC',
144
- meta1: '%?@',
145
- meta2: '#+=',
146
- accept: 'OK'
147
- };
148
- };
149
- /**
150
- * @private
151
- * @return {?}
152
- */
153
- VirtualKeyboardDirective.prototype.getKeyboardLayout = /**
154
- * @private
155
- * @return {?}
156
- */
157
- function () {
158
- /** @type {?} */
159
- var customLayout = {};
160
- if (this.keyboardType === 'alphanumeric') {
161
- customLayout = {
162
- normal: [
163
- '1 2 3 4 5 6 7 8 9 0',
164
- 'Q W E R T Y U I O P {bksp}',
165
- 'A S D F G H J K L Ç',
166
- 'Z X C V B N M {accept}'
167
- ]
168
- };
169
- }
170
- else if (this.keyboardType === 'email') {
171
- customLayout = this.getCustomKeyboardForEmail();
172
- }
173
- return customLayout;
174
- };
175
- /**
176
- * @private
177
- * @return {?}
178
- */
179
- VirtualKeyboardDirective.prototype.getCustomKeyboardForEmail = /**
180
- * @private
181
- * @return {?}
182
- */
183
- function () {
184
- return {
185
- normal: [
186
- '1 2 3 4 5 6 7 8 9 0',
187
- 'q w e r t y u i o p {bksp}',
188
- 'a s d f g h j k l ç',
189
- '{s} z x c v b n m .',
190
- '{meta1} {space} _ - {accept}'
191
- ],
192
- shift: [
193
- '1 2 3 4 5 6 7 8 9 0',
194
- 'Q W E R T Y U I O P {bksp}',
195
- 'A S D F G H J K L Ç',
196
- '{s} Z X C V B N M .',
197
- '{meta1} {space} _ - {accept}'
198
- ],
199
- meta1: [
200
- "` | { } % ^ * / ' {bksp}",
201
- '{meta2} $ & ~ # = + @',
202
- '{normal} {space} ! ? {accept}'
203
- ],
204
- meta2: [
205
- '[ ] { } \u2039 \u203a ^ * " , {bksp}',
206
- '\\ | / < > $ \u00a3 \u00a5 \u2022',
207
- '{meta1} \u20ac & ~ # = + .',
208
- '{normal} {space} ! ? {accept}'
209
- ]
210
- };
211
- };
212
- /**
213
- * @private
214
- * @return {?}
215
- */
216
- VirtualKeyboardDirective.prototype.createKeyboardOptions = /**
217
- * @private
218
- * @return {?}
219
- */
220
- function () {
221
- /** @type {?} */
222
- var keyboardOptions = this.getDefaultKeyboardOptions();
223
- if (this.keyboardPosition !== 'relative') {
224
- keyboardOptions.position = false;
225
- }
226
- if (this.keyboardPosition === 'bottom') {
227
- this.addBottomKeyboardClass();
228
- }
229
- keyboardOptions.css = {
230
- buttonDefault: 'keyboard-button-override'
231
- };
232
- keyboardOptions.display = this.getKeyboardDisplayOptions();
233
- keyboardOptions.layout = 'custom';
234
- keyboardOptions.customLayout = this.getKeyboardLayout();
235
- return keyboardOptions;
236
- };
237
- /**
238
- * @private
239
- * @return {?}
240
- */
241
- VirtualKeyboardDirective.prototype.onKeyboardVisible = /**
242
- * @private
243
- * @return {?}
244
- */
245
- function () {
246
- this.addCustomKeyboardFocusClass();
247
- };
248
- /**
249
- * @private
250
- * @return {?}
251
- */
252
- VirtualKeyboardDirective.prototype.onBeforeClose = /**
253
- * @private
254
- * @return {?}
255
- */
256
- function () {
257
- // O elemente do jQuery limpa tudo o que não passou pelo accept
258
- // Necessário setar o valor quando somente fechado a modal.
259
- /** @type {?} */
260
- var formControl = this.fieldControl.control;
261
- formControl.setValue(this.value);
262
- this.showKeyboard = false;
263
- };
264
- /**
265
- * @private
266
- * @return {?}
267
- */
268
- VirtualKeyboardDirective.prototype.onValueAccepted = /**
269
- * @private
270
- * @return {?}
271
- */
272
- function () {
273
- /** @type {?} */
274
- var casted = (/** @type {?} */ (this.keyboardElement));
275
- this.keyboardValueAccepted.emit(casted.value);
276
- };
277
- /**
278
- * @private
279
- * @param {?} event
280
- * @return {?}
281
- */
282
- VirtualKeyboardDirective.prototype.onChange = /**
283
- * @private
284
- * @param {?} event
285
- * @return {?}
286
- */
287
- function (event) {
288
- /** @type {?} */
289
- var virtualkeyboardevent = new CustomEvent('virtualkeyboardevent', event);
290
- document.dispatchEvent(virtualkeyboardevent);
291
- if (this.keyboardElement instanceof HTMLInputElement) {
292
- /** @type {?} */
293
- var keyboardElement_1 = (/** @type {?} */ (this.keyboardElement));
294
- // Arquivo possui referecia do jQuery que é alterado ao fechar o teclado.
295
- // Necessário clonar a string.
296
- /** @type {?} */
297
- var inputVal_1 = JSON.stringify(keyboardElement_1.value).replace('"', '').replace('"', '');
298
- if (this.fieldControl) {
299
- /** @type {?} */
300
- var formControl = this.fieldControl.control;
301
- this.value = inputVal_1;
302
- formControl.setValue(inputVal_1);
303
- formControl.markAsDirty();
304
- formControl.updateValueAndValidity();
305
- }
306
- // Este setTimeout é necessário para fazer com que o
307
- // cursor do input sempre esteja no final da string digitada
308
- // e o final da string sempre esteja visivel.
309
- setTimeout((/**
310
- * @return {?}
311
- */
312
- function () {
313
- keyboardElement_1.value = inputVal_1;
314
- keyboardElement_1.scrollLeft = keyboardElement_1.scrollWidth;
315
- }));
316
- }
317
- };
318
- /**
319
- * @private
320
- * @return {?}
321
- */
322
- VirtualKeyboardDirective.prototype.addBottomKeyboardClass = /**
323
- * @private
324
- * @return {?}
325
- */
326
- function () {
327
- this.injectCssRule(".ui-keyboard {\n border-radius: 0;\n left: 0;\n top: auto;\n bottom: 0;\n position: fixed;\n width: 100%;\n }");
328
- };
329
- /**
330
- * @private
331
- * @return {?}
332
- */
333
- VirtualKeyboardDirective.prototype.addCustomKeyboardFocusClass = /**
334
- * @private
335
- * @return {?}
336
- */
337
- function () {
338
- this.injectCssRule(".ui-keyboard-has-focus {\n z-index: 900;\n }");
339
- };
340
- /**
341
- * @private
342
- * @param {?} rule
343
- * @return {?}
344
- */
345
- VirtualKeyboardDirective.prototype.injectCssRule = /**
346
- * @private
347
- * @param {?} rule
348
- * @return {?}
349
- */
350
- function (rule) {
351
- /** @type {?} */
352
- var style = (/** @type {?} */ (document.createElement('style')));
353
- style.appendChild(document.createTextNode(''));
354
- document.head.appendChild(style);
355
- style.sheet.insertRule(rule);
356
- };
357
- VirtualKeyboardDirective.decorators = [
358
- { type: Directive, args: [{
359
- selector: '[samVirtualKeyboard]'
360
- },] }
361
- ];
362
- /** @nocollapse */
363
- VirtualKeyboardDirective.ctorParameters = function () { return [
364
- { type: ElementRef },
365
- { type: NgControl, decorators: [{ type: Optional }] }
366
- ]; };
367
- VirtualKeyboardDirective.propDecorators = {
368
- keyboardPosition: [{ type: Input }],
369
- keyboardType: [{ type: Input }],
370
- activateKeyboard: [{ type: Input }],
371
- showOnFocus: [{ type: Input }],
372
- showKeyboard: [{ type: Input }],
373
- keyboardValueAccepted: [{ type: Output }],
374
- showKeyboardChange: [{ type: Output }]
375
- };
376
- return VirtualKeyboardDirective;
377
- }());
378
- export { VirtualKeyboardDirective };
379
- if (false) {
380
- /**
381
- * @type {?}
382
- * @private
383
- */
384
- VirtualKeyboardDirective.prototype.keyboardPosition;
385
- /**
386
- * @type {?}
387
- * @private
388
- */
389
- VirtualKeyboardDirective.prototype.keyboardType;
390
- /**
391
- * @type {?}
392
- * @private
393
- */
394
- VirtualKeyboardDirective.prototype.showOnFocus;
395
- /**
396
- * @type {?}
397
- * @private
398
- */
399
- VirtualKeyboardDirective.prototype.keyboardValueAccepted;
400
- /** @type {?} */
401
- VirtualKeyboardDirective.prototype.showKeyboardChange;
402
- /** @type {?} */
403
- VirtualKeyboardDirective.prototype._showKeyboard;
404
- /**
405
- * @type {?}
406
- * @private
407
- */
408
- VirtualKeyboardDirective.prototype.keyboardElement;
409
- /**
410
- * @type {?}
411
- * @private
412
- */
413
- VirtualKeyboardDirective.prototype.value;
414
- /**
415
- * @type {?}
416
- * @private
417
- */
418
- VirtualKeyboardDirective.prototype.keyboardjQueryElement;
419
- /** @type {?} */
420
- VirtualKeyboardDirective.prototype.elementRef;
421
- /** @type {?} */
422
- VirtualKeyboardDirective.prototype.fieldControl;
423
- }
424
- export { ɵ0 };
425
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2FtLXNlbmlvci92aXJ0dWFsLWtleWJvYXJkLyIsInNvdXJjZXMiOlsibGliL3ZpcnR1YWwta2V5Ym9hcmQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF3QixVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztJQVVyQyxjQUFjOzs7O0FBQUcsVUFBQyxPQUFPOztRQUN2QixjQUFjLEdBQUcsbUJBQUEsTUFBTSxFQUFPO0lBQ3BDLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZFLENBQUMsQ0FBQTs7QUFFRDtJQXFDRSxrQ0FDUyxVQUFzQixFQUNWLFlBQXVCO1FBRG5DLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVixpQkFBWSxHQUFaLFlBQVksQ0FBVztRQWpDM0IscUJBQWdCLEdBQTBCLFFBQVEsQ0FBQztRQUNuRCxpQkFBWSxHQUE2QixPQUFPLENBQUM7UUFVakQsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFVbEIsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTNELGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXJCLFVBQUssR0FBRyxFQUFFLENBQUM7SUFRZixDQUFDO0lBaENMLHNCQUFvQixzREFBZ0I7Ozs7O1FBQXBDLFVBQXFDLGdCQUF5QjtZQUM1RCxJQUFJLGdCQUFnQixFQUFFO2dCQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLG1C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QUNwRSxnREFBa0U7Ozs7O0lBVWxFLCtDQUFvQzs7Ozs7SUFVcEMseURBQTZEOztJQUM3RCxzREFBa0U7O0lBRWxFLGlEQUE2Qjs7Ozs7SUFDN0IsbURBQXFDOzs7OztJQUNyQyx5Q0FBbUI7Ozs7O0lBR25CLHlEQUFtQzs7SUFHakMsOENBQTZCOztJQUM3QixnREFBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBFbGVtZW50UmVmLCBPcHRpb25hbCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IEtleWJvYXJkT3B0aW9ucyB9IGZyb20gJy4uLy4uL25vZGVfbW9kdWxlcy92aXJ0dWFsLWtleWJvYXJkJztcclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuKiBNw6l0b2RvIHF1ZSByZXRvbmFyIGluc3RhbmNpYSBkbyBlbGVtZW50byBqUXVlcnksIHBvaXNcclxuKiBvIHByb2pldG8gcXVlIGltcGxlbWVudGEgZXN0YSBkaXJldGl2YSBmaWNhIGZvcmEgZGEgbGliLlxyXG4qIERldmlkbyBmaWNhciBmb3JhLCBvIHdlYnBhY2sgbsOjbyBmaWNhcsOhIGFxdWksIHBvcnRhbmRvIG7Do29cclxuKiB0ZW0galF1ZXJ5IG5hIGxpYjtcclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuY29uc3QgalF1ZXJ5SW5zdGFuY2UgPSAoZWxlbWVudCkgPT4ge1xyXG4gIGNvbnN0IHdpbmRvd0luc3RhbmNlID0gd2luZG93IGFzIGFueTtcclxuICByZXR1cm4gd2luZG93SW5zdGFuY2UualF1ZXJ5ID8gd2luZG93SW5zdGFuY2UualF1ZXJ5KGVsZW1lbnQpIDogbnVsbDtcclxufTtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3NhbVZpcnR1YWxLZXlib2FyZF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaXJ0dWFsS2V5Ym9hcmREaXJlY3RpdmVcclxuICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgcHJpdmF0ZSBrZXlib2FyZFBvc2l0aW9uOiAncmVsYXRpdmUnIHwgJ2JvdHRvbScgPSAnYm90dG9tJztcclxuICBASW5wdXQoKSBwcml2YXRlIGtleWJvYXJkVHlwZTogJ2VtYWlsJyB8ICdhbHBoYW51bWVyaWMnID0gJ2VtYWlsJztcclxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGFjdGl2YXRlS2V5Ym9hcmQoYWN0aXZhdGVLZXlib2FyZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGFjdGl2YXRlS2V5Ym9hcmQpIHtcclxuICAgICAgdGhpcy5rZXlib2FyZEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgdGhpcy5rZXlib2FyZGpRdWVyeUVsZW1lbnQgPSBqUXVlcnlJbnN0YW5jZSh0aGlzLmtleWJvYXJkRWxlbWVudCk7XHJcbiAgICAgIGlmICh0aGlzLmtleWJvYXJkalF1ZXJ5RWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMua2V5Ym9hcmRqUXVlcnlFbGVtZW50LmtleWJvYXJkKHRoaXMuY3JlYXRlS2V5Ym9hcmRPcHRpb25zKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHByaXZhdGUgc2hvd09uRm9jdXMgPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBzaG93S2V5Ym9hcmQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2hvd0tleWJvYXJkO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNob3dLZXlib2FyZChyZXZlYWxLZXlib2FyZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc2hvd0tleWJvYXJkID0gcmV2ZWFsS2V5Ym9hcmQ7XHJcbiAgICB0aGlzLnNob3dLZXlib2FyZENoYW5nZS5lbWl0KHRoaXMuX3Nob3dLZXlib2FyZCk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgcHJpdmF0ZSBrZXlib2FyZFZhbHVlQWNjZXB0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBzaG93S2V5Ym9hcmRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIHB1YmxpYyBfc2hvd0tleWJvYXJkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBrZXlib2FyZEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gIHByaXZhdGUgdmFsdWUgPSAnJztcclxuXHJcbiAgLy8gQW55IGRldmlkbyBhIHNlciByZWZlcsOqbmNpYSBkbyBqUXVlcnk7XHJcbiAgcHJpdmF0ZSBrZXlib2FyZGpRdWVyeUVsZW1lbnQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBmaWVsZENvbnRyb2w6IE5nQ29udHJvbFxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0tleWJvYXJkICYmIHRoaXMuaXNLZXlib2FyZENyZWF0ZWQoKSkge1xyXG4gICAgICB0aGlzLmtleWJvYXJkalF1ZXJ5RWxlbWVudC5nZXRrZXlib2FyZCgpLnJldmVhbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5pc0tleWJvYXJkQ3JlYXRlZCgpKSB7XHJcbiAgICAgIHRoaXMua2V5Ym9hcmRqUXVlcnlFbGVtZW50XHJcbiAgICAgICAgLmtleWJvYXJkKClcclxuICAgICAgICAuZ2V0a2V5Ym9hcmQoKVxyXG4gICAgICAgIC5kZXN0cm95KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzS2V5Ym9hcmRDcmVhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5rZXlib2FyZGpRdWVyeUVsZW1lbnQgJiZcclxuICAgICAgdGhpcy5rZXlib2FyZGpRdWVyeUVsZW1lbnQua2V5Ym9hcmQoKSAmJlxyXG4gICAgICB0aGlzLmtleWJvYXJkalF1ZXJ5RWxlbWVudC5rZXlib2FyZCgpLmdldGtleWJvYXJkKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRLZXlib2FyZE9wdGlvbnMoKSB7XHJcbiAgICBjb25zdCBrZXlib2FyZE9wdGlvbnMgPSB7fSBhcyBLZXlib2FyZE9wdGlvbnM7XHJcbiAgICBpZiAoIXRoaXMuc2hvd09uRm9jdXMpIHtcclxuICAgICAga2V5Ym9hcmRPcHRpb25zLm9wZW5PbiA9ICcnO1xyXG4gICAgfVxyXG4gICAga2V5Ym9hcmRPcHRpb25zLnVzZVByZXZpZXcgPSBmYWxzZTtcclxuICAgIGtleWJvYXJkT3B0aW9ucy5hY2NlcHRlZCA9IHRoaXMub25WYWx1ZUFjY2VwdGVkLmJpbmQodGhpcyk7XHJcbiAgICBrZXlib2FyZE9wdGlvbnMudmlzaWJsZSA9IHRoaXMub25LZXlib2FyZFZpc2libGUuYmluZCh0aGlzKTtcclxuICAgIGtleWJvYXJkT3B0aW9ucy5iZWZvcmVDbG9zZSA9IHRoaXMub25CZWZvcmVDbG9zZS5iaW5kKHRoaXMpO1xyXG4gICAga2V5Ym9hcmRPcHRpb25zLmNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIHJldHVybiBrZXlib2FyZE9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEtleWJvYXJkRGlzcGxheU9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBia3NwOiAnXFx1MjE5MCcsXHJcbiAgICAgIG5vcm1hbDogJ0FCQycsXHJcbiAgICAgIG1ldGExOiAnJT9AJyxcclxuICAgICAgbWV0YTI6ICcjKz0nLFxyXG4gICAgICBhY2NlcHQ6ICdPSydcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEtleWJvYXJkTGF5b3V0KCkge1xyXG4gICAgbGV0IGN1c3RvbUxheW91dCA9IHt9O1xyXG4gICAgaWYgKHRoaXMua2V5Ym9hcmRUeXBlID09PSAnYWxwaGFudW1lcmljJykge1xyXG4gICAgICBjdXN0b21MYXlvdXQgPSB7XHJcbiAgICAgICAgbm9ybWFsOiBbXHJcbiAgICAgICAgICAnMSAyIDMgNCA1IDYgNyA4IDkgMCcsXHJcbiAgICAgICAgICAnUSBXIEUgUiBUIFkgVSBJIE8gUCB7YmtzcH0nLFxyXG4gICAgICAgICAgJ0EgUyBEIEYgRyBIIEogSyBMIMOHJyxcclxuICAgICAgICAgICdaIFggQyBWIEIgTiBNIHthY2NlcHR9J1xyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5rZXlib2FyZFR5cGUgPT09ICdlbWFpbCcpIHtcclxuICAgICAgY3VzdG9tTGF5b3V0ID0gdGhpcy5nZXRDdXN0b21LZXlib2FyZEZvckVtYWlsKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VzdG9tTGF5b3V0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDdXN0b21LZXlib2FyZEZvckVtYWlsKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbm9ybWFsOiBbXHJcbiAgICAgICAgJzEgMiAzIDQgNSA2IDcgOCA5IDAnLFxyXG4gICAgICAgICdxIHcgZSByIHQgeSB1IGkgbyBwIHtia3NwfScsXHJcbiAgICAgICAgJ2EgcyBkIGYgZyBoIGogayBsIMOnJyxcclxuICAgICAgICAne3N9IHogeCBjIHYgYiBuIG0gLicsXHJcbiAgICAgICAgJ3ttZXRhMX0ge3NwYWNlfSBfIC0ge2FjY2VwdH0nXHJcbiAgICAgIF0sXHJcbiAgICAgIHNoaWZ0OiBbXHJcbiAgICAgICAgJzEgMiAzIDQgNSA2IDcgOCA5IDAnLFxyXG4gICAgICAgICdRIFcgRSBSIFQgWSBVIEkgTyBQIHtia3NwfScsXHJcbiAgICAgICAgJ0EgUyBEIEYgRyBIIEogSyBMIMOHJyxcclxuICAgICAgICAne3N9IFogWCBDIFYgQiBOIE0gLicsXHJcbiAgICAgICAgJ3ttZXRhMX0ge3NwYWNlfSBfIC0ge2FjY2VwdH0nXHJcbiAgICAgIF0sXHJcbiAgICAgIG1ldGExOiBbXHJcbiAgICAgICAgXCJgIHwgeyB9ICUgXiAqIC8gJyB7YmtzcH1cIixcclxuICAgICAgICAne21ldGEyfSAkICYgfiAjID0gKyBAJyxcclxuICAgICAgICAne25vcm1hbH0ge3NwYWNlfSAhID8ge2FjY2VwdH0nXHJcbiAgICAgIF0sXHJcbiAgICAgIG1ldGEyOiBbXHJcbiAgICAgICAgJ1sgXSB7IH0gXFx1MjAzOSBcXHUyMDNhIF4gKiBcIiAsIHtia3NwfScsXHJcbiAgICAgICAgJ1xcXFwgfCAvIDwgPiAkIFxcdTAwYTMgXFx1MDBhNSBcXHUyMDIyJyxcclxuICAgICAgICAne21ldGExfSBcXHUyMGFjICYgfiAjID0gKyAuJyxcclxuICAgICAgICAne25vcm1hbH0ge3NwYWNlfSAhID8ge2FjY2VwdH0nXHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUtleWJvYXJkT3B0aW9ucygpOiBLZXlib2FyZE9wdGlvbnMge1xyXG4gICAgY29uc3Qga2V5Ym9hcmRPcHRpb25zID0gdGhpcy5nZXREZWZhdWx0S2V5Ym9hcmRPcHRpb25zKCk7XHJcbiAgICBpZiAodGhpcy5rZXlib2FyZFBvc2l0aW9uICE9PSAncmVsYXRpdmUnKSB7XHJcbiAgICAgIGtleWJvYXJkT3B0aW9ucy5wb3NpdGlvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMua2V5Ym9hcmRQb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcclxuICAgICAgdGhpcy5hZGRCb3R0b21LZXlib2FyZENsYXNzKCk7XHJcbiAgICB9XHJcbiAgICBrZXlib2FyZE9wdGlvbnMuY3NzID0ge1xyXG4gICAgICBidXR0b25EZWZhdWx0OiAna2V5Ym9hcmQtYnV0dG9uLW92ZXJyaWRlJ1xyXG4gICAgfTtcclxuXHJcbiAgICBrZXlib2FyZE9wdGlvbnMuZGlzcGxheSA9IHRoaXMuZ2V0S2V5Ym9hcmREaXNwbGF5T3B0aW9ucygpO1xyXG4gICAga2V5Ym9hcmRPcHRpb25zLmxheW91dCA9ICdjdXN0b20nO1xyXG4gICAga2V5Ym9hcmRPcHRpb25zLmN1c3RvbUxheW91dCA9IHRoaXMuZ2V0S2V5Ym9hcmRMYXlvdXQoKTtcclxuXHJcbiAgICByZXR1cm4ga2V5Ym9hcmRPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbktleWJvYXJkVmlzaWJsZSgpIHtcclxuICAgIHRoaXMuYWRkQ3VzdG9tS2V5Ym9hcmRGb2N1c0NsYXNzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQmVmb3JlQ2xvc2UoKSB7XHJcbiAgICAvLyBPIGVsZW1lbnRlIGRvIGpRdWVyeSBsaW1wYSB0dWRvIG8gcXVlIG7Do28gcGFzc291IHBlbG8gYWNjZXB0XHJcbiAgICAvLyBOZWNlc3PDoXJpbyBzZXRhciBvIHZhbG9yIHF1YW5kbyBzb21lbnRlIGZlY2hhZG8gYSBtb2RhbC5cclxuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5maWVsZENvbnRyb2wuY29udHJvbDtcclxuICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgdGhpcy5zaG93S2V5Ym9hcmQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25WYWx1ZUFjY2VwdGVkKCkge1xyXG4gICAgY29uc3QgY2FzdGVkID0gdGhpcy5rZXlib2FyZEVsZW1lbnQgYXMgYW55O1xyXG4gICAgdGhpcy5rZXlib2FyZFZhbHVlQWNjZXB0ZWQuZW1pdChjYXN0ZWQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZShldmVudCkge1xyXG4gICAgY29uc3QgdmlydHVhbGtleWJvYXJkZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3ZpcnR1YWxrZXlib2FyZGV2ZW50JywgZXZlbnQpO1xyXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh2aXJ0dWFsa2V5Ym9hcmRldmVudCk7XHJcbiAgICBpZiAodGhpcy5rZXlib2FyZEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGtleWJvYXJkRWxlbWVudCA9IHRoaXMua2V5Ym9hcmRFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgIC8vIEFycXVpdm8gcG9zc3VpIHJlZmVyZWNpYSBkbyBqUXVlcnkgcXVlIMOpIGFsdGVyYWRvIGFvIGZlY2hhciBvIHRlY2xhZG8uXHJcbiAgICAgIC8vIE5lY2Vzc8OhcmlvIGNsb25hciBhIHN0cmluZy5cclxuICAgICAgY29uc3QgaW5wdXRWYWwgPSBKU09OLnN0cmluZ2lmeShrZXlib2FyZEVsZW1lbnQudmFsdWUpLnJlcGxhY2UoJ1wiJywgJycpLnJlcGxhY2UoJ1wiJywgJycpO1xyXG4gICAgICBpZiAodGhpcy5maWVsZENvbnRyb2wpIHtcclxuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZmllbGRDb250cm9sLmNvbnRyb2w7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlucHV0VmFsO1xyXG4gICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKGlucHV0VmFsKTtcclxuICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIGZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBFc3RlIHNldFRpbWVvdXQgw6kgbmVjZXNzw6FyaW8gcGFyYSBmYXplciBjb20gcXVlIG9cclxuICAgICAgLy8gY3Vyc29yIGRvIGlucHV0IHNlbXByZSBlc3RlamEgbm8gZmluYWwgZGEgc3RyaW5nIGRpZ2l0YWRhXHJcbiAgICAgIC8vIGUgbyBmaW5hbCBkYSBzdHJpbmcgc2VtcHJlIGVzdGVqYSB2aXNpdmVsLlxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBrZXlib2FyZEVsZW1lbnQudmFsdWUgPSBpbnB1dFZhbDtcclxuICAgICAgICBrZXlib2FyZEVsZW1lbnQuc2Nyb2xsTGVmdCA9IGtleWJvYXJkRWxlbWVudC5zY3JvbGxXaWR0aDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEJvdHRvbUtleWJvYXJkQ2xhc3MoKSB7XHJcbiAgICB0aGlzLmluamVjdENzc1J1bGUoXHJcbiAgICAgIGAudWkta2V5Ym9hcmQge1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XHJcbiAgICAgICAgbGVmdDogMDtcclxuICAgICAgICB0b3A6IGF1dG87XHJcbiAgICAgICAgYm90dG9tOiAwO1xyXG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgfWBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEN1c3RvbUtleWJvYXJkRm9jdXNDbGFzcygpIHtcclxuICAgIHRoaXMuaW5qZWN0Q3NzUnVsZShcclxuICAgICAgYC51aS1rZXlib2FyZC1oYXMtZm9jdXMge1xyXG4gICAgICAgIHotaW5kZXg6IDkwMDtcclxuICAgICAgfWBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluamVjdENzc1J1bGUocnVsZSkge1xyXG4gICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpIGFzIGFueTtcclxuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XHJcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcclxuICAgIHN0eWxlLnNoZWV0Lmluc2VydFJ1bGUocnVsZSk7XHJcbiAgfVxyXG59XHJcblxyXG4iXX0=
@@ -1,19 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { NgModule } from '@angular/core';
6
- import { VirtualKeyboardDirective } from './virtual-keyboard.directive';
7
- var VirtualKeyboardModule = /** @class */ (function () {
8
- function VirtualKeyboardModule() {
9
- }
10
- VirtualKeyboardModule.decorators = [
11
- { type: NgModule, args: [{
12
- declarations: [VirtualKeyboardDirective],
13
- exports: [VirtualKeyboardDirective]
14
- },] }
15
- ];
16
- return VirtualKeyboardModule;
17
- }());
18
- export { VirtualKeyboardModule };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1rZXlib2FyZC5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2FtLXNlbmlvci92aXJ0dWFsLWtleWJvYXJkLyIsInNvdXJjZXMiOlsibGliL3ZpcnR1YWwta2V5Ym9hcmQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXhFO0lBQUE7SUFJcUMsQ0FBQzs7Z0JBSnJDLFFBQVEsU0FBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztvQkFDeEMsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7aUJBQ3BDOztJQUNvQyw0QkFBQztDQUFBLEFBSnRDLElBSXNDO1NBQXpCLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZpcnR1YWxLZXlib2FyZERpcmVjdGl2ZSB9IGZyb20gJy4vdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtWaXJ0dWFsS2V5Ym9hcmREaXJlY3RpdmVdLFxyXG4gIGV4cG9ydHM6IFtWaXJ0dWFsS2V5Ym9hcmREaXJlY3RpdmVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaXJ0dWFsS2V5Ym9hcmRNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -1,9 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- /*
6
- * Public API Surface of virtual-keyboard
7
- */
8
- export { VirtualKeyboardModule } from './lib/virtual-keyboard.module';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzYW0tc2VuaW9yL3ZpcnR1YWwta2V5Ym9hcmQvIiwic291cmNlcyI6WyJwdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHQSxzQ0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB2aXJ0dWFsLWtleWJvYXJkXHJcbiAqL1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi92aXJ0dWFsLWtleWJvYXJkLm1vZHVsZSc7XHJcbiJdfQ==
@@ -1,10 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- /**
6
- * Generated bundle index. Do not edit.
7
- */
8
- export { VirtualKeyboardModule } from './public_api';
9
- export { VirtualKeyboardDirective as ɵa } from './lib/virtual-keyboard.directive';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtLXNlbmlvci12aXJ0dWFsLWtleWJvYXJkLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNhbS1zZW5pb3IvdmlydHVhbC1rZXlib2FyZC8iLCJzb3VyY2VzIjpbInNhbS1zZW5pb3ItdmlydHVhbC1rZXlib2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUEsc0NBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcblxuZXhwb3J0IHtWaXJ0dWFsS2V5Ym9hcmREaXJlY3RpdmUgYXMgybVhfSBmcm9tICcuL2xpYi92aXJ0dWFsLWtleWJvYXJkLmRpcmVjdGl2ZSc7Il19
@@ -1 +0,0 @@
1
- {"version":3,"file":"sam-senior-virtual-keyboard.js.map","sources":["ng://@sam-senior/virtual-keyboard/lib/virtual-keyboard.directive.ts","ng://@sam-senior/virtual-keyboard/lib/virtual-keyboard.module.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 '../../node_modules/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"],"names":[],"mappings":";;;;;;;AAAA;;;;;;;;;MAWM,cAAc;;;;AAAG,CAAC,OAAO;;UACvB,cAAc,sBAAG,MAAM,EAAO;IACpC,OAAO,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CACtE,CAAA;MAKY,wBAAwB;;;;;IAkCnC,YACS,UAAsB,EACV,YAAuB;QADnC,eAAU,GAAV,UAAU,CAAY;QACV,iBAAY,GAAZ,YAAY,CAAW;QAjC3B,qBAAgB,GAA0B,QAAQ,CAAC;QACnD,iBAAY,GAA6B,OAAO,CAAC;QAUjD,gBAAW,GAAG,IAAI,CAAC;QAUlB,0BAAqB,GAAG,IAAI,YAAY,EAAE,CAAC;QAC5C,uBAAkB,GAAG,IAAI,YAAY,EAAW,CAAC;QAE3D,kBAAa,GAAG,KAAK,CAAC;QAErB,UAAK,GAAG,EAAE,CAAC;KAQd;;;;;IAhCL,IAAoB,gBAAgB,CAAC,gBAAyB;QAC5D,IAAI,gBAAgB,EAAE;YACpB,IAAI,CAAC,eAAe,sBAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAe,CAAC;YACpE,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAClE,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC9B,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;aACnE;SACF;KACF;;;;IAED,IACW,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;;;;;IACD,IAAW,YAAY,CAAC,cAAuB;QAC7C,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC;QACpC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KAClD;;;;IAiBD,WAAW;QACT,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YACjD,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC;SACnD;KACF;;;;IAED,WAAW;QACT,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC5B,IAAI,CAAC,qBAAqB;iBACvB,QAAQ,EAAE;iBACV,WAAW,EAAE;iBACb,OAAO,EAAE,CAAC;SACd;KACF;;;;;IAEO,iBAAiB;QACvB,QACE,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE;YACrC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,EACnD;KACH;;;;;IAEO,yBAAyB;;cACzB,eAAe,sBAAG,EAAE,EAAmB;QAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;SAC7B;QACD,eAAe,CAAC,UAAU,GAAG,KAAK,CAAC;QACnC,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,eAAe,CAAC;KACxB;;;;;IAEO,yBAAyB;QAC/B,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI;SACb,CAAC;KACH;;;;;IAEO,iBAAiB;;YACnB,YAAY,GAAG,EAAE;QACrB,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc,EAAE;YACxC,YAAY,GAAG;gBACb,MAAM,EAAE;oBACN,qBAAqB;oBACrB,4BAA4B;oBAC5B,qBAAqB;oBACrB,wBAAwB;iBACzB;aACF,CAAC;SACH;aAAM,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;YACxC,YAAY,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACjD;QACD,OAAO,YAAY,CAAC;KACrB;;;;;IAEO,yBAAyB;QAC/B,OAAO;YACL,MAAM,EAAE;gBACN,qBAAqB;gBACrB,4BAA4B;gBAC5B,qBAAqB;gBACrB,qBAAqB;gBACrB,8BAA8B;aAC/B;YACD,KAAK,EAAE;gBACL,qBAAqB;gBACrB,4BAA4B;gBAC5B,qBAAqB;gBACrB,qBAAqB;gBACrB,8BAA8B;aAC/B;YACD,KAAK,EAAE;gBACL,0BAA0B;gBAC1B,uBAAuB;gBACvB,+BAA+B;aAChC;YACD,KAAK,EAAE;gBACL,sCAAsC;gBACtC,mCAAmC;gBACnC,4BAA4B;gBAC5B,+BAA+B;aAChC;SACF,CAAC;KACH;;;;;IAEO,qBAAqB;;cACrB,eAAe,GAAG,IAAI,CAAC,yBAAyB,EAAE;QACxD,IAAI,IAAI,CAAC,gBAAgB,KAAK,UAAU,EAAE;YACxC,eAAe,CAAC,QAAQ,GAAG,KAAK,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE;YACtC,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;QACD,eAAe,CAAC,GAAG,GAAG;YACpB,aAAa,EAAE,0BAA0B;SAC1C,CAAC;QAEF,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC3D,eAAe,CAAC,MAAM,GAAG,QAAQ,CAAC;QAClC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAExD,OAAO,eAAe,CAAC;KACxB;;;;;IAEO,iBAAiB;QACvB,IAAI,CAAC,2BAA2B,EAAE,CAAC;KACpC;;;;;IAEO,aAAa;;;;cAGb,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO;QAC7C,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;KAC3B;;;;;IAEO,eAAe;;cACf,MAAM,sBAAG,IAAI,CAAC,eAAe,EAAO;QAC1C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC/C;;;;;;IAEO,QAAQ,CAAC,KAAK;;cACd,oBAAoB,GAAG,IAAI,WAAW,CAAC,sBAAsB,EAAE,KAAK,CAAC;QAC3E,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,eAAe,YAAY,gBAAgB,EAAE;;kBAC9C,eAAe,sBAAG,IAAI,CAAC,eAAe,EAAoB;;;;kBAG1D,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;YACxF,IAAI,IAAI,CAAC,YAAY,EAAE;;sBACf,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO;gBAC7C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACtB,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC/B,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC1B,WAAW,CAAC,sBAAsB,EAAE,CAAC;aACtC;;;;YAID,UAAU;;;YAAC;gBACT,eAAe,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACjC,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC;aAC1D,EAAC,CAAC;SACJ;KACF;;;;;IAEO,sBAAsB;QAC5B,IAAI,CAAC,aAAa,CAChB;;;;;;;QAOE,CACH,CAAC;KACH;;;;;IAEO,2BAA2B;QACjC,IAAI,CAAC,aAAa,CAChB;;QAEE,CACH,CAAC;KACH;;;;;;IAEO,aAAa,CAAC,IAAI;;cAClB,KAAK,sBAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAO;QACpD,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KAC9B;;;YA9NF,SAAS,SAAC;gBACT,QAAQ,EAAE,sBAAsB;aACjC;;;;YAlByC,UAAU;YAC3C,SAAS,uBAsDb,QAAQ;;;+BAjCV,KAAK;2BACL,KAAK;+BACL,KAAK;0BASL,KAAK;2BACL,KAAK;oCASL,MAAM;iCACN,MAAM;;;;;;;AC5CT,MAOa,qBAAqB;;;YAJjC,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,wBAAwB,CAAC;gBACxC,OAAO,EAAE,CAAC,wBAAwB,CAAC;aACpC;;;;;;;;;;;;;;;"}