@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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-domtools',
6
- version: '2.5.3',
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 runOnceTrackerStringMap;
47
- private runOnceResultMap;
48
- private runOnceErrorMap;
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<unknown>;
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
- // If initialization is already in progress and we're not ignoring global, wait for it
17
- if (!optionsArg.ignoreGlobal && DomTools.initializationPromise) {
18
- return await DomTools.initializationPromise;
16
+ if (optionsArg.ignoreGlobal) {
17
+ const domToolsInstance = new DomTools(optionsArg);
18
+ await domToolsInstance.initializationPromise;
19
+ return domToolsInstance;
19
20
  }
20
- // Create initialization promise to prevent race conditions
21
- if (!optionsArg.ignoreGlobal) {
22
- DomTools.initializationPromise = (async () => {
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
- else {
55
- // ignoreGlobal case - create isolated instance
25
+ if (!DomTools.initializationPromise) {
56
26
  const domToolsInstance = new DomTools(optionsArg);
57
- return domToolsInstance;
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 globalThis.deesDomTools;
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
- constructor(optionsArg) { }
105
- runOnceTrackerStringMap = new plugins.lik.Stringmap();
106
- runOnceResultMap = new plugins.lik.FastMap();
107
- runOnceErrorMap = new plugins.lik.FastMap();
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
- const runningId = `${identifierArg}+runningCheck`;
115
- if (!this.runOnceTrackerStringMap.checkString(identifierArg)) {
116
- this.runOnceTrackerStringMap.addString(identifierArg);
117
- this.runOnceTrackerStringMap.addString(runningId);
118
- try {
119
- const result = await funcArg();
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 this.runOnceTrackerStringMap.registerUntilTrue((stringMap) => {
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.elements.headElement.appendChild(styleElement);
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', function () {
168
+ script.addEventListener('load', () => {
164
169
  done.resolve();
165
170
  });
166
- const parentNode = document.head || document.body;
167
- parentNode.append(script);
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
- const cssTag = document.createElement('link');
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
- document.head.append(cssTag);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLmNsYXNzZXMuZG9tdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQWtCLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBVzFELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNELE1BQU0sQ0FBQyxxQkFBcUIsR0FBNkIsSUFBSSxDQUFDO0lBRXRFOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBeUMsRUFBRTtRQUMzRSxzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0QsT0FBTyxNQUFNLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztRQUM5QyxDQUFDO1FBRUQsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0IsUUFBUSxDQUFDLHFCQUFxQixHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzNDLElBQUksZ0JBQTBCLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzdCLFVBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ25ELGdCQUFnQixHQUFHLFVB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
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2RvbXRvb2xzLmNsYXNzZXMuZG9tdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQWtCLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBZTFELE1BQU0sT0FBTyxRQUFRO0lBQ25CLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNELE1BQU0sQ0FBQyxxQkFBcUIsR0FBNkIsSUFBSSxDQUFDO0lBRXRFOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBeUMsRUFBRTtRQUMzRSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QixNQUFNLGdCQUFnQixHQUFHLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sZ0JBQWdCLENBQUMscUJBQXFCLENBQUM7WUFDN0MsT0FBTyxnQkFBZ0IsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqRSxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUM7WUFDcEQsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ2pDLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDcEMsTUFBTSxnQkFB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
@@ -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
  }