systelab-virtual-keyboard 0.0.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 +37 -0
- package/esm2022/lib/constants.mjs +32 -0
- package/esm2022/lib/systelab-virtual-keyboard-overlay.service.mjs +123 -0
- package/esm2022/lib/systelab-virtual-keyboard.component.mjs +352 -0
- package/esm2022/lib/systelab-virtual-keyboard.config.mjs +3 -0
- package/esm2022/lib/systelab-virtual-keyboard.directive.mjs +190 -0
- package/esm2022/lib/systelab-virtual-keyboard.module.mjs +45 -0
- package/esm2022/public-api.mjs +7 -0
- package/esm2022/systelab-virtual-keyboard.mjs +5 -0
- package/fesm2022/systelab-virtual-keyboard.mjs +739 -0
- package/fesm2022/systelab-virtual-keyboard.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/constants.d.ts +21 -0
- package/lib/constants.d.ts.map +1 -0
- package/lib/systelab-virtual-keyboard-overlay.service.d.ts +26 -0
- package/lib/systelab-virtual-keyboard-overlay.service.d.ts.map +1 -0
- package/lib/systelab-virtual-keyboard.component.d.ts +43 -0
- package/lib/systelab-virtual-keyboard.component.d.ts.map +1 -0
- package/lib/systelab-virtual-keyboard.config.d.ts +7 -0
- package/lib/systelab-virtual-keyboard.config.d.ts.map +1 -0
- package/lib/systelab-virtual-keyboard.directive.d.ts +42 -0
- package/lib/systelab-virtual-keyboard.directive.d.ts.map +1 -0
- package/lib/systelab-virtual-keyboard.module.d.ts +15 -0
- package/lib/systelab-virtual-keyboard.module.d.ts.map +1 -0
- package/package.json +28 -0
- package/public-api.d.ts +5 -0
- package/public-api.d.ts.map +1 -0
- package/systelab-virtual-keyboard.d.ts.map +1 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2020 - 2024 - Instrumentation Laboratory Company and Systelab Technologies, SA. All rights reserved.
|
|
3
|
+
* NOTICE: All information contained herein is and remains the property of Instrumentation Laboratory Company and its
|
|
4
|
+
* affiliates, if any. The intellectual and technical concepts contained herein are proprietary to Instrumentation
|
|
5
|
+
* Laboratory Company and its affiliates and may be covered by U.S. and foreign patents and patent applications, and/or
|
|
6
|
+
* are protected by trade secret or copyright law. Dissemination of this information or reproduction of this material is
|
|
7
|
+
* strictly forbidden unless prior written permission is Instrumentation Laboratory Company.
|
|
8
|
+
*/
|
|
9
|
+
import { Directive, HostListener, Inject, Input, Optional, } from '@angular/core';
|
|
10
|
+
import { DOCUMENT } from '@angular/common';
|
|
11
|
+
import { SystelabVirtualKeyboardInputTypes, SystelabVirtualKeyboardLayouts } from './constants';
|
|
12
|
+
import { VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "./systelab-virtual-keyboard-overlay.service";
|
|
15
|
+
export class SystelabVirtualKeyboardDirective {
|
|
16
|
+
onDocumentClick(event) {
|
|
17
|
+
const simpleKeyboardElement = document.querySelector('.simple-keyboard');
|
|
18
|
+
const showKeyboardButtonClicked = event.target?.classList.contains('virtual-keyboard-show-button');
|
|
19
|
+
if (!simpleKeyboardElement?.contains(event.target) &&
|
|
20
|
+
!this.elementRef?.nativeElement?.contains(event.target) &&
|
|
21
|
+
!this.showKeyboardButtonElement?.contains(event.target) &&
|
|
22
|
+
!showKeyboardButtonClicked) {
|
|
23
|
+
if (this.overlayService.isCreated()) {
|
|
24
|
+
this.overlayService.destroy();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
onDocumentScroll() {
|
|
29
|
+
if (this.overlayService.isCreated()) {
|
|
30
|
+
// update position and size on scroll
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
set vkEnabled(enabled) {
|
|
34
|
+
if (typeof enabled === 'string') {
|
|
35
|
+
this.enabled = true;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.enabled = enabled;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
;
|
|
42
|
+
get vkEnabled() {
|
|
43
|
+
return this.enabled;
|
|
44
|
+
}
|
|
45
|
+
get vkFixedBottom() {
|
|
46
|
+
return this.fixedBottom;
|
|
47
|
+
}
|
|
48
|
+
set vkFixedBottom(fixedBottom) {
|
|
49
|
+
if (typeof fixedBottom === 'string') {
|
|
50
|
+
this.fixedBottom = true;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.fixedBottom = fixedBottom;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
get vkDebug() {
|
|
57
|
+
return this.debug;
|
|
58
|
+
}
|
|
59
|
+
set vkDebug(debug) {
|
|
60
|
+
this.debug = debug;
|
|
61
|
+
}
|
|
62
|
+
get vkConfig() {
|
|
63
|
+
return this.config;
|
|
64
|
+
}
|
|
65
|
+
set vkConfig(config) {
|
|
66
|
+
this.config = config;
|
|
67
|
+
}
|
|
68
|
+
constructor(elementRef, overlayService, renderer, document, virtualKeyboardConfig) {
|
|
69
|
+
this.elementRef = elementRef;
|
|
70
|
+
this.overlayService = overlayService;
|
|
71
|
+
this.renderer = renderer;
|
|
72
|
+
this.document = document;
|
|
73
|
+
this.virtualKeyboardConfig = virtualKeyboardConfig;
|
|
74
|
+
this.enabled = false;
|
|
75
|
+
this.fixedBottom = false;
|
|
76
|
+
this.debug = false;
|
|
77
|
+
this.config = this.virtualKeyboardConfig;
|
|
78
|
+
}
|
|
79
|
+
ngOnInit() {
|
|
80
|
+
this.attachKeyboardIcon();
|
|
81
|
+
}
|
|
82
|
+
ngAfterViewInit() {
|
|
83
|
+
if (this.vkEnabled) {
|
|
84
|
+
const keyboardIcon = this.elementRef.nativeElement.parentElement.querySelector('i');
|
|
85
|
+
keyboardIcon.addEventListener('click', this.togglePanel.bind(this));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
ngOnDestroy() {
|
|
89
|
+
if (this.overlayService.isCreated()) {
|
|
90
|
+
this.overlayService.destroy();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
togglePanel() {
|
|
94
|
+
if (this.overlayService.isOpen()) {
|
|
95
|
+
this.closePanel();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
this.openPanel();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
openPanel() {
|
|
102
|
+
if (this.overlayService.isCreated()) {
|
|
103
|
+
this.overlayService.destroy();
|
|
104
|
+
}
|
|
105
|
+
if (this.overlayService.hasAttached()) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const currentLayout = this.getLayout(this.elementRef.nativeElement);
|
|
109
|
+
this.panelRef = this.overlayService.create(this.inputOrigin(), this.vkFixedBottom, currentLayout);
|
|
110
|
+
this.panelRef.instance.debug = this.vkDebug;
|
|
111
|
+
this.panelRef.instance.setActiveInput(this.elementRef.nativeElement);
|
|
112
|
+
this.panelRef.instance.setLayout(currentLayout);
|
|
113
|
+
this.panelRef.instance.closePanel.subscribe(() => this.closePanel());
|
|
114
|
+
}
|
|
115
|
+
getLayout(activeInputElement) {
|
|
116
|
+
if (this.config?.hasOwnProperty('layout')) {
|
|
117
|
+
return this.config.layout;
|
|
118
|
+
}
|
|
119
|
+
if (this.isInputAlphabetic(activeInputElement)) {
|
|
120
|
+
return SystelabVirtualKeyboardLayouts.default;
|
|
121
|
+
}
|
|
122
|
+
else if (this.isInputNumeric(activeInputElement)) {
|
|
123
|
+
return SystelabVirtualKeyboardLayouts.numeric;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
return SystelabVirtualKeyboardLayouts.default;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
isInputAlphabetic(activeInputElement) {
|
|
130
|
+
const inputType = activeInputElement?.type;
|
|
131
|
+
return inputType && [SystelabVirtualKeyboardInputTypes.text, SystelabVirtualKeyboardInputTypes.password].some((i) => i === inputType);
|
|
132
|
+
}
|
|
133
|
+
isInputNumeric(activeInputElement) {
|
|
134
|
+
const inputType = activeInputElement?.type;
|
|
135
|
+
return inputType && [SystelabVirtualKeyboardInputTypes.number].some((i) => i === inputType);
|
|
136
|
+
}
|
|
137
|
+
closePanel() {
|
|
138
|
+
this.overlayService.destroy();
|
|
139
|
+
}
|
|
140
|
+
inputOrigin() {
|
|
141
|
+
return this.elementRef.nativeElement;
|
|
142
|
+
}
|
|
143
|
+
attachKeyboardIcon() {
|
|
144
|
+
if (this.vkEnabled) {
|
|
145
|
+
const child = this.document.createElement('i');
|
|
146
|
+
child.classList.add('fa');
|
|
147
|
+
child.classList.add('fa-keyboard');
|
|
148
|
+
child.classList.add('virtual-keyboard-show-button');
|
|
149
|
+
this.renderer.appendChild(this.elementRef.nativeElement.parentElement, child);
|
|
150
|
+
this.showKeyboardButtonElement = child;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardDirective, deps: [{ token: i0.ElementRef }, { token: i1.SystelabVirtualKeyboardOverlayService }, { token: i0.Renderer2 }, { token: DOCUMENT }, { token: VIRTUAL_KEYBOARD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
154
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: SystelabVirtualKeyboardDirective, selector: "input[vkEnabled], textarea[vkEnabled]", inputs: { vkEnabled: "vkEnabled", vkFixedBottom: "vkFixedBottom", vkDebug: "vkDebug", vkConfig: "vkConfig" }, host: { listeners: { "document:click": "onDocumentClick($event)", "window:touchmove": "onDocumentScroll($event)", "window:touchend": "onDocumentScroll($event)", "window:wheel": "onDocumentScroll($event)" } }, ngImport: i0 }); }
|
|
155
|
+
}
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardDirective, decorators: [{
|
|
157
|
+
type: Directive,
|
|
158
|
+
args: [{
|
|
159
|
+
selector: 'input[vkEnabled], textarea[vkEnabled]',
|
|
160
|
+
}]
|
|
161
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.SystelabVirtualKeyboardOverlayService }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
162
|
+
type: Inject,
|
|
163
|
+
args: [DOCUMENT]
|
|
164
|
+
}] }, { type: undefined, decorators: [{
|
|
165
|
+
type: Optional
|
|
166
|
+
}, {
|
|
167
|
+
type: Inject,
|
|
168
|
+
args: [VIRTUAL_KEYBOARD_CONFIG]
|
|
169
|
+
}] }], propDecorators: { onDocumentClick: [{
|
|
170
|
+
type: HostListener,
|
|
171
|
+
args: ['document:click', ['$event']]
|
|
172
|
+
}], onDocumentScroll: [{
|
|
173
|
+
type: HostListener,
|
|
174
|
+
args: ['window:touchmove', ['$event']]
|
|
175
|
+
}, {
|
|
176
|
+
type: HostListener,
|
|
177
|
+
args: ['window:touchend', ['$event']]
|
|
178
|
+
}, {
|
|
179
|
+
type: HostListener,
|
|
180
|
+
args: ['window:wheel', ['$event']]
|
|
181
|
+
}], vkEnabled: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], vkFixedBottom: [{
|
|
184
|
+
type: Input
|
|
185
|
+
}], vkDebug: [{
|
|
186
|
+
type: Input
|
|
187
|
+
}], vkConfig: [{
|
|
188
|
+
type: Input
|
|
189
|
+
}] } });
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHaEcsT0FBTyxFQUFpQyx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUFLNUcsTUFBTSxPQUFPLGdDQUFnQztJQUUzQyxlQUFlLENBQUMsS0FBOEI7UUFDNUMsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDekUsTUFBTSx5QkFBeUIsR0FBSSxLQUFLLENBQUMsTUFBc0IsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDcEgsSUFDRSxDQUFDLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBYyxDQUFDO1lBQ3RELENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFjLENBQUM7WUFDL0QsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFjLENBQUM7WUFDL0QsQ0FBQyx5QkFBeUIsRUFDMUI7WUFDQSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JB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LENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7U0FDeEM7SUFDSCxDQUFDOzhHQXJLVSxnQ0FBZ0MsMEhBNkVqQyxRQUFRLGFBQ0ksdUJBQXVCO2tHQTlFbEMsZ0NBQWdDOzsyRkFBaEMsZ0NBQWdDO2tCQUg1QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1Q0FBdUM7aUJBQ2xEOzswQkE4RUksTUFBTTsyQkFBQyxRQUFROzswQkFDZixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHVCQUF1Qjt5Q0E1RTdDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFtQjFDLGdCQUFnQjtzQkFIZixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDM0MsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQzFDLFlBQVk7dUJBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVNwQyxTQUFTO3NCQURaLEtBQUs7Z0JBY0YsYUFBYTtzQkFEaEIsS0FBSztnQkFjRixPQUFPO3NCQURWLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMCAtIDIwMjQgLSBJbnN0cnVtZW50YXRpb24gTGFib3JhdG9yeSBDb21wYW55IGFuZCBTeXN0ZWxhYiBUZWNobm9sb2dpZXMsIFNBLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTk9USUNFOiAgQWxsIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgYW5kIHJlbWFpbnMgdGhlIHByb3BlcnR5IG9mIEluc3RydW1lbnRhdGlvbiBMYWJvcmF0b3J5IENvbXBhbnkgYW5kIGl0c1xuICogYWZmaWxpYXRlcywgaWYgYW55LiAgVGhlIGludGVsbGVjdHVhbCBhbmQgdGVjaG5pY2FsIGNvbmNlcHRzIGNvbnRhaW5lZCBoZXJlaW4gYXJlIHByb3ByaWV0YXJ5IHRvIEluc3RydW1lbnRhdGlvblxuICogTGFib3JhdG9yeSBDb21wYW55IGFuZCBpdHMgYWZmaWxpYXRlcyBhbmQgbWF5IGJlIGNvdmVyZWQgYnkgVS5TLiBhbmQgZm9yZWlnbiBwYXRlbnRzIGFuZCBwYXRlbnQgYXBwbGljYXRpb25zLCBhbmQvb3JcbiAqIGFyZSBwcm90ZWN0ZWQgYnkgdHJhZGUgc2VjcmV0IG9yIGNvcHlyaWdodCBsYXcuIERpc3NlbWluYXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbiBvciByZXByb2R1Y3Rpb24gb2YgdGhpcyBtYXRlcmlhbCBpc1xuICogc3RyaWN0bHkgZm9yYmlkZGVuIHVubGVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gaXMgSW5zdHJ1bWVudGF0aW9uIExhYm9yYXRvcnkgQ29tcGFueS5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnRSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dFR5cGVzLCBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbXBvbmVudCB9IGZyb20gJy4vc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRPdmVybGF5U2VydmljZSB9IGZyb20gJy4vc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC1vdmVybGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWcsIFZJUlRVQUxfS0VZQk9BUkRfQ09ORklHIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbmZpZyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lucHV0W3ZrRW5hYmxlZF0sIHRleHRhcmVhW3ZrRW5hYmxlZF0nLFxufSlcbmV4cG9ydCBjbGFzcyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgY29uc3Qgc2ltcGxlS2V5Ym9hcmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNpbXBsZS1rZXlib2FyZCcpO1xuICAgIGNvbnN0IHNob3dLZXlib2FyZEJ1dHRvbkNsaWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2aXJ0dWFsLWtleWJvYXJkLXNob3ctYnV0dG9uJyk7XG4gICAgaWYgKFxuICAgICAgIXNpbXBsZUtleWJvYXJkRWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpICYmXG4gICAgICAhdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkgJiZcbiAgICAgICF0aGlzLnNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSAmJlxuICAgICAgIXNob3dLZXlib2FyZEJ1dHRvbkNsaWNrZWRcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm92ZXJsYXlTZXJ2aWNlLmlzQ3JlYXRlZCgpKSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzp0b3VjaG1vdmUnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6dG91Y2hlbmQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6d2hlZWwnLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50U2Nyb2xsKCkge1xuICAgIGlmICh0aGlzLm92ZXJsYXlTZXJ2aWNlLmlzQ3JlYXRlZCgpKSB7XG4gICAgICAvLyB1cGRhdGUgcG9zaXRpb24gYW5kIHNpemUgb24gc2Nyb2xsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHNldCB2a0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbiB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgZW5hYmxlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgfVxuICB9O1xuICBnZXQgdmtFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGZpeGVkQm90dG9tID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCB2a0ZpeGVkQm90dG9tKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpeGVkQm90dG9tO1xuICB9XG4gIHNldCB2a0ZpeGVkQm90dG9tKGZpeGVkQm90dG9tOiBib29sZWFuIHwgc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBmaXhlZEJvdHRvbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuZml4ZWRCb3R0b20gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpeGVkQm90dG9tID0gZml4ZWRCb3R0b207XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWJ1ZyA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgdmtEZWJ1ZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWJ1ZztcbiAgfVxuICBzZXQgdmtEZWJ1ZyhkZWJ1ZzogYm9vbGVhbikge1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlnOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZztcbiAgQElucHV0KClcbiAgZ2V0IHZrQ29uZmlnKCk6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gIH1cbiAgc2V0IHZrQ29uZmlnKGNvbmZpZzogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgcGFuZWxSZWYhOiBDb21wb25lbnRSZWY8U3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb21wb25lbnQ+O1xuICBwcml2YXRlIHNob3dLZXlib2FyZEJ1dHRvbkVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXlTZXJ2aWNlOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE92ZXJsYXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBhbnksXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWSVJUVUFMX0tFWUJPQVJEX0NPTkZJRykgcHJpdmF0ZSB2aXJ0dWFsS2V5Ym9hcmRDb25maWc6IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnLFxuICApIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMudmlydHVhbEtleWJvYXJkQ29uZmlnO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hdHRhY2hLZXlib2FyZEljb24oKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy52a0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGtleWJvYXJkSWNvbiA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcignaScpO1xuICAgICAga2V5Ym9hcmRJY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50b2dnbGVQYW5lbC5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5pc0NyZWF0ZWQoKSkge1xuICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVQYW5lbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlblBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUGFuZWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVNlcnZpY2UuaXNDcmVhdGVkKCkpIHtcbiAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuZGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vdmVybGF5U2VydmljZS5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudExheW91dCA9IHRoaXMuZ2V0TGF5b3V0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIHRoaXMucGFuZWxSZWYgPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNyZWF0ZSh0aGlzLmlucHV0T3JpZ2luKCksIHRoaXMudmtGaXhlZEJvdHRvbSwgY3VycmVudExheW91dCk7XG4gICAgdGhpcy5wYW5lbFJlZi5pbnN0YW5jZS5kZWJ1ZyA9IHRoaXMudmtEZWJ1ZztcbiAgICB0aGlzLnBhbmVsUmVmLmluc3RhbmNlLnNldEFjdGl2ZUlucHV0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnBhbmVsUmVmLmluc3RhbmNlLnNldExheW91dChjdXJyZW50TGF5b3V0KTtcbiAgICB0aGlzLnBhbmVsUmVmLmluc3RhbmNlLmNsb3NlUGFuZWwuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2VQYW5lbCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGF5b3V0KGFjdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMge1xuICAgIGlmICh0aGlzLmNvbmZpZz8uaGFzT3duUHJvcGVydHkoJ2xheW91dCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcubGF5b3V0O1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0lucHV0QWxwaGFiZXRpYyhhY3RpdmVJbnB1dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRMYXlvdXRzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzSW5wdXROdW1lcmljKGFjdGl2ZUlucHV0RWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZExheW91dHMubnVtZXJpYztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFN5c3RlbGFiVmlydHVhbEtleWJvYXJkTGF5b3V0cy5kZWZhdWx0O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNJbnB1dEFscGhhYmV0aWMoYWN0aXZlSW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlucHV0VHlwZSA9IGFjdGl2ZUlucHV0RWxlbWVudD8udHlwZTtcbiAgICByZXR1cm4gaW5wdXRUeXBlICYmIFtTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZElucHV0VHlwZXMudGV4dCwgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRJbnB1dFR5cGVzLnBhc3N3b3JkXS5zb21lKChpKSA9PiBpID09PSBpbnB1dFR5cGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0lucHV0TnVtZXJpYyhhY3RpdmVJbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5wdXRUeXBlID0gYWN0aXZlSW5wdXRFbGVtZW50Py50eXBlO1xuICAgIHJldHVybiBpbnB1dFR5cGUgJiYgW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkSW5wdXRUeXBlcy5udW1iZXJdLnNvbWUoKGkpID0+IGkgPT09IGlucHV0VHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlUGFuZWwoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5U2VydmljZS5kZXN0cm95KCk7XG4gIH1cblxuICBwcml2YXRlIGlucHV0T3JpZ2luKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hLZXlib2FyZEljb24oKSB7XG4gICAgaWYgKHRoaXMudmtFbmFibGVkKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpO1xuICAgICAgY2hpbGQuY2xhc3NMaXN0LmFkZCgnZmEnKTtcbiAgICAgIGNoaWxkLmNsYXNzTGlzdC5hZGQoJ2ZhLWtleWJvYXJkJyk7XG4gICAgICBjaGlsZC5jbGFzc0xpc3QuYWRkKCd2aXJ0dWFsLWtleWJvYXJkLXNob3ctYnV0dG9uJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQsIGNoaWxkKTtcbiAgICAgIHRoaXMuc2hvd0tleWJvYXJkQnV0dG9uRWxlbWVudCA9IGNoaWxkO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { SystelabVirtualKeyboardDirective } from './systelab-virtual-keyboard.directive';
|
|
4
|
+
import { OverlayModule } from '@angular/cdk/overlay';
|
|
5
|
+
import { VIRTUAL_KEYBOARD_CONFIG } from './systelab-virtual-keyboard.config';
|
|
6
|
+
import { SystelabVirtualKeyboardOverlayService } from './systelab-virtual-keyboard-overlay.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export const factory = () => {
|
|
9
|
+
const systelabVirtualKeyboardModuleCreated = factory._systelabVirtualKeyboardModuleCreated || false;
|
|
10
|
+
if (systelabVirtualKeyboardModuleCreated) {
|
|
11
|
+
throw new Error('SystelabVirtualKeyboardModuleCreated.forRoot imported to many times');
|
|
12
|
+
}
|
|
13
|
+
factory._systelabVirtualKeyboardModuleCreated = true;
|
|
14
|
+
};
|
|
15
|
+
export class SystelabVirtualKeyboardModule {
|
|
16
|
+
static forRoot(conf) {
|
|
17
|
+
return {
|
|
18
|
+
ngModule: SystelabVirtualKeyboardModule,
|
|
19
|
+
providers: [
|
|
20
|
+
SystelabVirtualKeyboardOverlayService,
|
|
21
|
+
{
|
|
22
|
+
provide: VIRTUAL_KEYBOARD_CONFIG, useValue: conf
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
static forChild() {
|
|
28
|
+
return {
|
|
29
|
+
ngModule: SystelabVirtualKeyboardModule,
|
|
30
|
+
providers: [],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
34
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardModule, declarations: [SystelabVirtualKeyboardDirective], imports: [CommonModule, OverlayModule], exports: [SystelabVirtualKeyboardDirective] }); }
|
|
35
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardModule, imports: [CommonModule, OverlayModule] }); }
|
|
36
|
+
}
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: SystelabVirtualKeyboardModule, decorators: [{
|
|
38
|
+
type: NgModule,
|
|
39
|
+
args: [{
|
|
40
|
+
imports: [CommonModule, OverlayModule],
|
|
41
|
+
declarations: [SystelabVirtualKeyboardDirective],
|
|
42
|
+
exports: [SystelabVirtualKeyboardDirective],
|
|
43
|
+
}]
|
|
44
|
+
}] });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkL3NyYy9saWIvc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQWlDLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUcsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBRXBHLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7SUFDMUIsTUFBTSxvQ0FBb0MsR0FBSSxPQUFlLENBQUMscUNBQXFDLElBQUksS0FBSyxDQUFDO0lBQzdHLElBQUksb0NBQW9DLEVBQUU7UUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0tBQ3hGO0lBQ0EsT0FBZSxDQUFDLHFDQUFxQyxHQUFHLElBQUksQ0FBQztBQUNoRSxDQUFDLENBQUM7QUFPRixNQUFNLE9BQU8sNkJBQTZCO0lBQ2pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBb0M7UUFDeEQsT0FBTztZQUNMLFFBQVEsRUFBRSw2QkFBNkI7WUFDdkMsU0FBUyxFQUFFO2dCQUNULHFDQUFxQztnQkFDckM7b0JBQ0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxJQUFJO2lCQUNqRDthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUTtRQUNwQixPQUFPO1lBQ0wsUUFBUSxFQUFFLDZCQUE2QjtZQUN2QyxTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUM7SUFDSixDQUFDOzhHQWxCVSw2QkFBNkI7K0dBQTdCLDZCQUE2QixpQkFIekIsZ0NBQWdDLGFBRHJDLFlBQVksRUFBRSxhQUFhLGFBRTNCLGdDQUFnQzsrR0FFL0IsNkJBQTZCLFlBSjlCLFlBQVksRUFBRSxhQUFhOzsyRkFJMUIsNkJBQTZCO2tCQUx6QyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7b0JBQ3RDLFlBQVksRUFBRSxDQUFDLGdDQUFnQyxDQUFDO29CQUNoRCxPQUFPLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztpQkFDNUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkRGlyZWN0aXZlIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRDb25maWcsIFZJUlRVQUxfS0VZQk9BUkRfQ09ORklHIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLmNvbmZpZyc7XG5pbXBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi9zeXN0ZWxhYi12aXJ0dWFsLWtleWJvYXJkLW92ZXJsYXkuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBmYWN0b3J5ID0gKCkgPT4ge1xuICBjb25zdCBzeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZUNyZWF0ZWQgPSAoZmFjdG9yeSBhcyBhbnkpLl9zeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZUNyZWF0ZWQgfHwgZmFsc2U7XG4gIGlmIChzeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZUNyZWF0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbGFiVmlydHVhbEtleWJvYXJkTW9kdWxlQ3JlYXRlZC5mb3JSb290IGltcG9ydGVkIHRvIG1hbnkgdGltZXMnKTtcbiAgfVxuICAoZmFjdG9yeSBhcyBhbnkpLl9zeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZUNyZWF0ZWQgPSB0cnVlO1xufTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgT3ZlcmxheU1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW1N5c3RlbGFiVmlydHVhbEtleWJvYXJkRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZj86IFN5c3RlbGFiVmlydHVhbEtleWJvYXJkQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRPdmVybGF5U2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFZJUlRVQUxfS0VZQk9BUkRfQ09ORklHLCB1c2VWYWx1ZTogY29uZlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZm9yQ2hpbGQoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogU3lzdGVsYWJWaXJ0dWFsS2V5Ym9hcmRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of systelab-virtual-keyboard
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/constants';
|
|
5
|
+
export * from './lib/systelab-virtual-keyboard.directive';
|
|
6
|
+
export * from './lib/systelab-virtual-keyboard.module';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGlCQUFpQixDQUFDO0FBRWhDLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyx3Q0FBd0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygc3lzdGVsYWItdmlydHVhbC1rZXlib2FyZFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnN0YW50cyc7XG5leHBvcnQgeyBTeXN0ZWxhYlZpcnR1YWxLZXlib2FyZENvbmZpZyB9IGZyb20gJy4vbGliL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQubW9kdWxlJztcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVsYWItdmlydHVhbC1rZXlib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQvc3JjL3N5c3RlbGFiLXZpcnR1YWwta2V5Ym9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|