@design.estate/dees-domtools 2.5.3 → 2.5.6
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/dist_bundle/bundle.js +187 -40857
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/domtools.classes.domtools.d.ts +14 -4
- package/dist_ts/domtools.classes.domtools.js +115 -80
- package/dist_ts/domtools.classes.keyboard.d.ts +9 -0
- package/dist_ts/domtools.classes.keyboard.js +349 -14
- package/dist_ts/domtools.classes.scroller.d.ts +6 -1
- package/dist_ts/domtools.classes.scroller.js +70 -29
- package/dist_ts/domtools.classes.thememanager.d.ts +3 -0
- package/dist_ts/domtools.classes.thememanager.js +21 -9
- package/dist_ts/domtools.elementbasic.js +7 -4
- package/dist_ts/domtools.pluginexports.d.ts +1 -11
- package/dist_ts/domtools.pluginexports.js +2 -12
- package/license +2 -2
- package/package.json +4 -5
- package/readme.md +187 -371
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/domtools.classes.domtools.ts +136 -81
- package/ts/domtools.classes.keyboard.ts +374 -15
- package/ts/domtools.classes.scroller.ts +80 -29
- package/ts/domtools.classes.thememanager.ts +21 -8
- package/ts/domtools.elementbasic.ts +6 -3
- package/ts/domtools.pluginexports.ts +11 -22
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/dees-domtools',
|
|
6
|
-
version: '2.5.
|
|
6
|
+
version: '2.5.6',
|
|
7
7
|
description: 'A package providing tools to simplify complex CSS structures and web development tasks, featuring TypeScript support and integration with various web technologies.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSw4QkFBOEI7SUFDcEMsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHFLQUFxSztDQUNuTCxDQUFBIn0=
|
|
@@ -4,6 +4,9 @@ import { Scroller } from './domtools.classes.scroller.js';
|
|
|
4
4
|
import { WebSetup } from '@push.rocks/websetup';
|
|
5
5
|
import { ThemeManager } from './domtools.classes.thememanager.js';
|
|
6
6
|
import { Keyboard } from './domtools.classes.keyboard.js';
|
|
7
|
+
declare global {
|
|
8
|
+
var deesDomTools: DomTools | undefined;
|
|
9
|
+
}
|
|
7
10
|
export interface IDomToolsState {
|
|
8
11
|
virtualViewport: TViewport;
|
|
9
12
|
jwt: string;
|
|
@@ -39,19 +42,25 @@ export declare class DomTools {
|
|
|
39
42
|
scroller: Scroller;
|
|
40
43
|
themeManager: ThemeManager;
|
|
41
44
|
keyboard: Keyboard | null;
|
|
45
|
+
disposed: boolean;
|
|
42
46
|
domToolsReady: plugins.smartpromise.Deferred<unknown>;
|
|
43
47
|
domReady: plugins.smartpromise.Deferred<unknown>;
|
|
44
48
|
globalStylesReady: plugins.smartpromise.Deferred<unknown>;
|
|
49
|
+
private readonly initializationPromise;
|
|
50
|
+
private readonly managedDomNodes;
|
|
51
|
+
private readonly readyStateChangedFunc;
|
|
45
52
|
constructor(optionsArg: IDomToolsContructorOptions);
|
|
46
|
-
private
|
|
47
|
-
private
|
|
48
|
-
private
|
|
53
|
+
private runOncePromiseMap;
|
|
54
|
+
private initialize;
|
|
55
|
+
private tryMarkDomReady;
|
|
56
|
+
private trackManagedDomNode;
|
|
57
|
+
private getHeadOrBodyElement;
|
|
49
58
|
/**
|
|
50
59
|
* run a function once and always get the Promise of the first execution
|
|
51
60
|
* @param identifierArg the indentifier arg identifies functions. functions with the same identifier are considered equal
|
|
52
61
|
* @param funcArg the actual func arg to run
|
|
53
62
|
*/
|
|
54
|
-
runOnce<T>(identifierArg: string, funcArg: () => Promise<T>): Promise<
|
|
63
|
+
runOnce<T>(identifierArg: string, funcArg: () => Promise<T>): Promise<T>;
|
|
55
64
|
/**
|
|
56
65
|
* allows to set global styles
|
|
57
66
|
* @param stylesText the css text you want to set
|
|
@@ -72,4 +81,5 @@ export declare class DomTools {
|
|
|
72
81
|
* @param optionsArg the website info
|
|
73
82
|
*/
|
|
74
83
|
setWebsiteInfo(optionsArg: plugins.websetup.IWebSetupConstructorOptions): Promise<void>;
|
|
84
|
+
dispose(): void;
|
|
75
85
|
}
|
|
@@ -13,59 +13,39 @@ export class DomTools {
|
|
|
13
13
|
* setups domtools
|
|
14
14
|
*/
|
|
15
15
|
static async setupDomTools(optionsArg = {}) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
if (optionsArg.ignoreGlobal) {
|
|
17
|
+
const domToolsInstance = new DomTools(optionsArg);
|
|
18
|
+
await domToolsInstance.initializationPromise;
|
|
19
|
+
return domToolsInstance;
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
let domToolsInstance;
|
|
24
|
-
if (!globalThis.deesDomTools) {
|
|
25
|
-
globalThis.deesDomTools = new DomTools(optionsArg);
|
|
26
|
-
domToolsInstance = globalThis.deesDomTools;
|
|
27
|
-
// lets make sure the dom is ready
|
|
28
|
-
const readyStateChangedFunc = () => {
|
|
29
|
-
if (document.readyState === 'interactive' || document.readyState === 'complete') {
|
|
30
|
-
domToolsInstance.elements.headElement = document.querySelector('head');
|
|
31
|
-
domToolsInstance.elements.bodyElement = document.querySelector('body');
|
|
32
|
-
// Initialize keyboard now that document.body exists
|
|
33
|
-
domToolsInstance.keyboard = new Keyboard(document.body);
|
|
34
|
-
domToolsInstance.domReady.resolve();
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
// Check current state immediately to avoid race condition
|
|
38
|
-
if (document.readyState === 'interactive' || document.readyState === 'complete') {
|
|
39
|
-
readyStateChangedFunc();
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
document.addEventListener('readystatechange', readyStateChangedFunc);
|
|
43
|
-
}
|
|
44
|
-
domToolsInstance.domToolsReady.resolve();
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
domToolsInstance = globalThis.deesDomTools;
|
|
48
|
-
}
|
|
49
|
-
await domToolsInstance.domToolsReady.promise;
|
|
50
|
-
return domToolsInstance;
|
|
51
|
-
})();
|
|
52
|
-
return await DomTools.initializationPromise;
|
|
21
|
+
if (globalThis.deesDomTools && !globalThis.deesDomTools.disposed) {
|
|
22
|
+
await globalThis.deesDomTools.initializationPromise;
|
|
23
|
+
return globalThis.deesDomTools;
|
|
53
24
|
}
|
|
54
|
-
|
|
55
|
-
// ignoreGlobal case - create isolated instance
|
|
25
|
+
if (!DomTools.initializationPromise) {
|
|
56
26
|
const domToolsInstance = new DomTools(optionsArg);
|
|
57
|
-
|
|
27
|
+
globalThis.deesDomTools = domToolsInstance;
|
|
28
|
+
DomTools.initializationPromise = domToolsInstance.initializationPromise
|
|
29
|
+
.then(() => domToolsInstance)
|
|
30
|
+
.catch((error) => {
|
|
31
|
+
if (globalThis.deesDomTools === domToolsInstance) {
|
|
32
|
+
globalThis.deesDomTools = undefined;
|
|
33
|
+
}
|
|
34
|
+
DomTools.initializationPromise = null;
|
|
35
|
+
throw error;
|
|
36
|
+
});
|
|
58
37
|
}
|
|
38
|
+
return await DomTools.initializationPromise;
|
|
59
39
|
}
|
|
60
40
|
/**
|
|
61
41
|
* if you can, use the static asysnc .setupDomTools() function instead since it is safer to use.
|
|
62
42
|
*/
|
|
63
43
|
static getGlobalDomToolsSync() {
|
|
64
44
|
const globalDomTools = globalThis.deesDomTools;
|
|
65
|
-
if (!globalDomTools) {
|
|
45
|
+
if (!globalDomTools || globalDomTools.disposed) {
|
|
66
46
|
throw new Error('You tried to access domtools synchronously too early');
|
|
67
47
|
}
|
|
68
|
-
return
|
|
48
|
+
return globalDomTools;
|
|
69
49
|
}
|
|
70
50
|
// ========
|
|
71
51
|
// INSTANCE
|
|
@@ -98,46 +78,71 @@ export class DomTools {
|
|
|
98
78
|
scroller = new Scroller(this);
|
|
99
79
|
themeManager = new ThemeManager(this);
|
|
100
80
|
keyboard = null; // Initialized after DOM ready to avoid accessing document.body before it exists
|
|
81
|
+
disposed = false;
|
|
101
82
|
domToolsReady = plugins.smartpromise.defer();
|
|
102
83
|
domReady = plugins.smartpromise.defer();
|
|
103
84
|
globalStylesReady = plugins.smartpromise.defer();
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
85
|
+
initializationPromise;
|
|
86
|
+
managedDomNodes = [];
|
|
87
|
+
readyStateChangedFunc = () => {
|
|
88
|
+
this.tryMarkDomReady();
|
|
89
|
+
};
|
|
90
|
+
constructor(optionsArg) {
|
|
91
|
+
this.initializationPromise = this.initialize();
|
|
92
|
+
}
|
|
93
|
+
runOncePromiseMap = new Map();
|
|
94
|
+
async initialize() {
|
|
95
|
+
this.tryMarkDomReady();
|
|
96
|
+
if (this.domReady.status === 'pending') {
|
|
97
|
+
document.addEventListener('readystatechange', this.readyStateChangedFunc);
|
|
98
|
+
}
|
|
99
|
+
if (this.domToolsReady.status === 'pending') {
|
|
100
|
+
this.domToolsReady.resolve();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
tryMarkDomReady() {
|
|
104
|
+
if (this.disposed || this.domReady.status !== 'pending') {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (document.readyState !== 'interactive' && document.readyState !== 'complete') {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (!document.head || !document.body) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
this.elements.headElement = document.head;
|
|
114
|
+
this.elements.bodyElement = document.body;
|
|
115
|
+
if (!this.keyboard) {
|
|
116
|
+
this.keyboard = new Keyboard(document.body);
|
|
117
|
+
}
|
|
118
|
+
document.removeEventListener('readystatechange', this.readyStateChangedFunc);
|
|
119
|
+
this.domReady.resolve();
|
|
120
|
+
}
|
|
121
|
+
trackManagedDomNode(elementArg) {
|
|
122
|
+
this.managedDomNodes.push(elementArg);
|
|
123
|
+
return elementArg;
|
|
124
|
+
}
|
|
125
|
+
getHeadOrBodyElement() {
|
|
126
|
+
const targetElement = this.elements.headElement || document.head || this.elements.bodyElement || document.body;
|
|
127
|
+
if (!targetElement) {
|
|
128
|
+
throw new Error('DomTools could not find a DOM target element to attach resources to');
|
|
129
|
+
}
|
|
130
|
+
return targetElement;
|
|
131
|
+
}
|
|
108
132
|
/**
|
|
109
133
|
* run a function once and always get the Promise of the first execution
|
|
110
134
|
* @param identifierArg the indentifier arg identifies functions. functions with the same identifier are considered equal
|
|
111
135
|
* @param funcArg the actual func arg to run
|
|
112
136
|
*/
|
|
113
137
|
async runOnce(identifierArg, funcArg) {
|
|
114
|
-
|
|
115
|
-
if (!
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
this.runOnceResultMap.addToMap(identifierArg, result);
|
|
121
|
-
}
|
|
122
|
-
catch (error) {
|
|
123
|
-
// Store error so waiting callers can receive it
|
|
124
|
-
this.runOnceErrorMap.addToMap(identifierArg, error);
|
|
125
|
-
}
|
|
126
|
-
finally {
|
|
127
|
-
// Always remove running flag to prevent permanent stuck state
|
|
128
|
-
this.runOnceTrackerStringMap.removeString(runningId);
|
|
129
|
-
}
|
|
138
|
+
let runOncePromise = this.runOncePromiseMap.get(identifierArg);
|
|
139
|
+
if (!runOncePromise) {
|
|
140
|
+
runOncePromise = Promise.resolve().then(async () => {
|
|
141
|
+
return await funcArg();
|
|
142
|
+
});
|
|
143
|
+
this.runOncePromiseMap.set(identifierArg, runOncePromise);
|
|
130
144
|
}
|
|
131
|
-
return await
|
|
132
|
-
return !stringMap?.includes(runningId);
|
|
133
|
-
}, () => {
|
|
134
|
-
// Check if there was an error and re-throw it
|
|
135
|
-
const error = this.runOnceErrorMap.getByKey(identifierArg);
|
|
136
|
-
if (error) {
|
|
137
|
-
throw error;
|
|
138
|
-
}
|
|
139
|
-
return this.runOnceResultMap.getByKey(identifierArg);
|
|
140
|
-
});
|
|
145
|
+
return await runOncePromise;
|
|
141
146
|
}
|
|
142
147
|
// setStuff
|
|
143
148
|
/**
|
|
@@ -146,10 +151,10 @@ export class DomTools {
|
|
|
146
151
|
*/
|
|
147
152
|
async setGlobalStyles(stylesText) {
|
|
148
153
|
await this.domReady.promise;
|
|
149
|
-
const styleElement = document.createElement('style');
|
|
154
|
+
const styleElement = this.trackManagedDomNode(document.createElement('style'));
|
|
150
155
|
styleElement.type = 'text/css';
|
|
151
156
|
styleElement.appendChild(document.createTextNode(stylesText));
|
|
152
|
-
this.
|
|
157
|
+
this.getHeadOrBodyElement().appendChild(styleElement);
|
|
153
158
|
}
|
|
154
159
|
/**
|
|
155
160
|
* allows to set global styles
|
|
@@ -158,13 +163,15 @@ export class DomTools {
|
|
|
158
163
|
async setExternalScript(scriptLinkArg) {
|
|
159
164
|
await this.domReady.promise;
|
|
160
165
|
const done = plugins.smartpromise.defer();
|
|
161
|
-
const script = document.createElement('script');
|
|
166
|
+
const script = this.trackManagedDomNode(document.createElement('script'));
|
|
162
167
|
script.src = scriptLinkArg;
|
|
163
|
-
script.addEventListener('load',
|
|
168
|
+
script.addEventListener('load', () => {
|
|
164
169
|
done.resolve();
|
|
165
170
|
});
|
|
166
|
-
|
|
167
|
-
|
|
171
|
+
script.addEventListener('error', () => {
|
|
172
|
+
done.reject(new Error(`Failed to load external script: ${scriptLinkArg}`));
|
|
173
|
+
});
|
|
174
|
+
this.getHeadOrBodyElement().append(script);
|
|
168
175
|
await done.promise;
|
|
169
176
|
}
|
|
170
177
|
/**
|
|
@@ -172,11 +179,20 @@ export class DomTools {
|
|
|
172
179
|
* @param cssLinkArg a url to an external stylesheet
|
|
173
180
|
*/
|
|
174
181
|
async setExternalCss(cssLinkArg) {
|
|
175
|
-
|
|
182
|
+
await this.domReady.promise;
|
|
183
|
+
const done = plugins.smartpromise.defer();
|
|
184
|
+
const cssTag = this.trackManagedDomNode(document.createElement('link'));
|
|
176
185
|
cssTag.rel = 'stylesheet';
|
|
177
186
|
cssTag.crossOrigin = 'anonymous';
|
|
178
187
|
cssTag.href = cssLinkArg;
|
|
179
|
-
|
|
188
|
+
cssTag.addEventListener('load', () => {
|
|
189
|
+
done.resolve();
|
|
190
|
+
});
|
|
191
|
+
cssTag.addEventListener('error', () => {
|
|
192
|
+
done.reject(new Error(`Failed to load external stylesheet: ${cssLinkArg}`));
|
|
193
|
+
});
|
|
194
|
+
this.getHeadOrBodyElement().append(cssTag);
|
|
195
|
+
await done.promise;
|
|
180
196
|
}
|
|
181
197
|
/**
|
|
182
198
|
* allows setting of website infos
|
|
@@ -186,5 +202,24 @@ export class DomTools {
|
|
|
186
202
|
await this.websetup.setup(optionsArg);
|
|
187
203
|
await this.websetup.readyPromise;
|
|
188
204
|
}
|
|
205
|
+
dispose() {
|
|
206
|
+
if (this.disposed) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
this.disposed = true;
|
|
210
|
+
document.removeEventListener('readystatechange', this.readyStateChangedFunc);
|
|
211
|
+
this.keyboard?.dispose();
|
|
212
|
+
this.keyboard = null;
|
|
213
|
+
this.scroller.dispose();
|
|
214
|
+
this.themeManager.dispose();
|
|
215
|
+
for (const managedDomNode of this.managedDomNodes) {
|
|
216
|
+
managedDomNode.remove();
|
|
217
|
+
}
|
|
218
|
+
this.managedDomNodes.length = 0;
|
|
219
|
+
if (globalThis.deesDomTools === this) {
|
|
220
|
+
globalThis.deesDomTools = undefined;
|
|
221
|
+
DomTools.initializationPromise = null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
189
224
|
}
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLmNsYXNzZXMuZG9tdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQWtCLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBZTFELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNELE1BQU0sQ0FBQyxxQkFBcUIsR0FBNkIsSUFBSSxDQUFDO0lBRXRFOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBeUMsRUFBRTtRQUMzRSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QixNQUFNLGdCQUFnQixHQUFHLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sZ0JBQWdCLENBQUMscUJBQXFCLENBQUM7WUFDN0MsT0FBTyxnQkFBZ0IsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqRSxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUM7WUFDcEQsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ2pDLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRCxVQUFVLENBQUMsWUFBWSxHQUFHLGdCQUFnQixDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUI7aUJBQ3BFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDNUIsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxVQUFVLENBQUMsWUFBWSxLQUFLLGdCQUFnQixFQUFFLENBQUM7b0JBQ2pELFVBQVUsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO2dCQUN0QyxDQUFDO2dCQUNELFFBQVEsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7Z0JBQ3RDLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsT0FBTyxNQUFNLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMscUJBQXFCO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsV0FBVztJQUNKLFFBQVEsR0FHWDtRQUNGLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFdBQVcsRUFBRSxJQUFJO0tBQ2xCLENBQUM7SUFFSyxRQUFRLEdBQWEsSUFBSSxRQUFRLENBQUM7UUFDdkMsVUFBVSxFQUFFO1lBQ1YsS0FBSyxFQUFFLEVBQUU7U0FDVjtLQUNGLENBQUMsQ0FBQztJQUVJLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDakQsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQWlCLFVBQVUsRUFBRTtRQUNsRixlQUFlLEVBQUUsUUFBUTtRQUN6QixHQUFHLEVBQUUsRUFBWTtLQUNsQixDQUFDLENBQUM7SUFFSSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUNsRCxLQUFLLEVBQUUsS0FBSztLQUNiLENBQUMsQ0FBQztJQUVJLFdBQVcsR0FBRztRQUNuQixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7UUFDbEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztRQUM1QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7S0FDM0IsQ0FBQztJQUVLLFNBQVMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDOUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxRQUFRLEdBQW9CLElBQUksQ0FBQyxDQUFDLGdGQUFnRjtJQUNsSCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWpCLGFBQWEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdDLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFdkMscUJBQXFCLENBQWdCO0lBQ3JDLGVBQWUsR0FBYyxFQUFFLENBQUM7SUFDaEMscUJBQXFCLEdBQUcsR0FBRyxFQUFFO1FBQzVDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDLENBQUM7SUFFRixZQUFZLFVBQXNDO1FBQ2hELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVPLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO0lBRXhELEtBQUssQ0FBQyxVQUFVO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssYUFBYSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDaEYsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxRQUFRLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sbUJBQW1CLENBQW9CLFVBQWE7UUFDMUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDL0csSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsT0FBTyxDQUFJLGFBQXFCLEVBQUUsT0FBeUI7UUFDdEUsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQTJCLENBQUM7UUFDekYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNqRCxPQUFPLE1BQU0sT0FBTyxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsT0FBTyxNQUFNLGNBQWMsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztJQUNYOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxlQUFlLENBQUMsVUFBa0I7UUFDN0MsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUM1QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQy9FLFlBQVksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBQy9CLFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGlCQUFpQixDQUFDLGFBQXFCO1FBQ2xELE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDNUIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQVEsQ0FBQztRQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsbUNBQW1DLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBa0I7UUFDNUMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUM1QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBUSxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBTSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUM7UUFDMUIsTUFBTSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDakMsTUFBTSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFDekIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUF3RDtRQUNsRixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU1QixLQUFLLE1BQU0sY0FBYyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNsRCxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVoQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDckMsVUFBVSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDcEMsUUFBUSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQyJ9
|
|
@@ -119,6 +119,7 @@ export declare class Keyboard {
|
|
|
119
119
|
private domNode;
|
|
120
120
|
private mapCombosToHandlers;
|
|
121
121
|
private pressedKeys;
|
|
122
|
+
private listening;
|
|
122
123
|
constructor(domNode: Element | Document);
|
|
123
124
|
keyEnum: typeof Key;
|
|
124
125
|
on(keys: Key[]): plugins.smartrx.rxjs.Subject<KeyboardEvent>;
|
|
@@ -126,9 +127,17 @@ export declare class Keyboard {
|
|
|
126
127
|
startListening(): void;
|
|
127
128
|
stopListening(): void;
|
|
128
129
|
clear(): void;
|
|
130
|
+
dispose(): void;
|
|
129
131
|
private handleKeyDown;
|
|
130
132
|
private checkMatchingKeyboardSubjects;
|
|
131
133
|
private handleKeyUp;
|
|
132
134
|
private areAllKeysPressed;
|
|
133
135
|
private registerKeys;
|
|
136
|
+
private normalizeKeys;
|
|
137
|
+
private resolveKey;
|
|
138
|
+
private resolveKeyFromCode;
|
|
139
|
+
private resolveKeyFromKey;
|
|
140
|
+
private resolveKeyFromKeyCode;
|
|
141
|
+
private createKeyboardEvent;
|
|
142
|
+
private getKeyDescriptor;
|
|
134
143
|
}
|