mount-observer 0.1.13 → 0.1.15
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/Events.js +9 -0
- package/Events.ts +12 -0
- package/MountObserver.js +21 -0
- package/MountObserver.ts +27 -0
- package/README.md +406 -69
- package/{DefineCustomElementHandler.js → handlers/DefineCustomElement.js} +103 -99
- package/handlers/DefineCustomElement.ts +123 -0
- package/handlers/EnhanceMountedElement.js +99 -0
- package/handlers/EnhanceMountedElement.ts +116 -0
- package/handlers/Events.js +110 -0
- package/handlers/EvtRt.js +59 -0
- package/handlers/GenIds.js +37 -0
- package/handlers/GenIds.ts +45 -0
- package/handlers/HTMLInclude.js +393 -0
- package/handlers/HTMLInclude.ts +453 -0
- package/handlers/HoistTemplate.js +77 -0
- package/handlers/HoistTemplate.ts +89 -0
- package/handlers/MountObserver.js +941 -0
- package/handlers/MountObserverScript.js +78 -0
- package/handlers/MountObserverScript.ts +89 -0
- package/handlers/ScriptExport.js +83 -0
- package/handlers/ScriptExport.ts +97 -0
- package/handlers/SharedMutationObserver.js +78 -0
- package/handlers/arr.js +16 -0
- package/handlers/connectionMonitor.js +122 -0
- package/handlers/elementIntersection.js +73 -0
- package/handlers/emitEvents.js +187 -0
- package/handlers/getRegistryRoot.js +52 -0
- package/handlers/loadImports.js +129 -0
- package/handlers/mediaQuery.js +90 -0
- package/handlers/rootSizeObserver.js +131 -0
- package/handlers/upShadowSearch.js +70 -0
- package/handlers/withScopePerimeter.js +22 -0
- package/index.js +2 -2
- package/index.ts +2 -2
- package/package.json +13 -3
- package/types/assign-gingerly/types.d.ts +244 -0
- package/types/be-a-beacon/types.d.ts +3 -0
- package/types/global.d.ts +29 -0
- package/types/id-generation/types.d.ts +26 -0
- package/types/mount-observer/types.d.ts +330 -0
- package/upShadowSearch.js +6 -3
- package/upShadowSearch.ts +6 -3
package/Events.js
CHANGED
|
@@ -5,6 +5,7 @@ export const dismountEventName = 'dismount';
|
|
|
5
5
|
export const disconnectEventName = 'disconnect';
|
|
6
6
|
export const mediamatchEventName = 'mediamatch';
|
|
7
7
|
export const mediaunmatchEventName = 'mediaunmatch';
|
|
8
|
+
export const resolvedEventName = 'resolved';
|
|
8
9
|
export class MountEvent extends Event {
|
|
9
10
|
mountedElement;
|
|
10
11
|
modules;
|
|
@@ -67,3 +68,11 @@ export class MediaUnmatchEvent extends Event {
|
|
|
67
68
|
this.mountConfig = mountConfig;
|
|
68
69
|
}
|
|
69
70
|
}
|
|
71
|
+
export class ResolvedEvent extends Event {
|
|
72
|
+
static eventName = resolvedEventName;
|
|
73
|
+
export;
|
|
74
|
+
constructor(exportValue) {
|
|
75
|
+
super(ResolvedEvent.eventName);
|
|
76
|
+
this.export = exportValue;
|
|
77
|
+
}
|
|
78
|
+
}
|
package/Events.ts
CHANGED
|
@@ -8,6 +8,7 @@ export const dismountEventName = 'dismount';
|
|
|
8
8
|
export const disconnectEventName = 'disconnect';
|
|
9
9
|
export const mediamatchEventName = 'mediamatch';
|
|
10
10
|
export const mediaunmatchEventName = 'mediaunmatch';
|
|
11
|
+
export const resolvedEventName = 'resolved';
|
|
11
12
|
|
|
12
13
|
export class MountEvent extends Event implements IMountEvent {
|
|
13
14
|
static eventName: typeof mountEventName = mountEventName;
|
|
@@ -61,3 +62,14 @@ export class MediaUnmatchEvent extends Event {
|
|
|
61
62
|
super(MediaUnmatchEvent.eventName);
|
|
62
63
|
}
|
|
63
64
|
}
|
|
65
|
+
|
|
66
|
+
export class ResolvedEvent extends Event {
|
|
67
|
+
static eventName: typeof resolvedEventName = resolvedEventName;
|
|
68
|
+
|
|
69
|
+
export: any;
|
|
70
|
+
|
|
71
|
+
constructor(exportValue: any) {
|
|
72
|
+
super(ResolvedEvent.eventName);
|
|
73
|
+
this.export = exportValue;
|
|
74
|
+
}
|
|
75
|
+
}
|
package/MountObserver.js
CHANGED
|
@@ -41,6 +41,7 @@ export class MountObserver extends EventTarget {
|
|
|
41
41
|
#elementNotifiers = new WeakMap();
|
|
42
42
|
#notifierMountedElements = new WeakSet();
|
|
43
43
|
#subObservers;
|
|
44
|
+
#whenDefinedResolved = false;
|
|
44
45
|
#mergeHandlerDefaults(config) {
|
|
45
46
|
const doValue = config.do;
|
|
46
47
|
// Only process if do is a string (single handler reference)
|
|
@@ -167,6 +168,24 @@ export class MountObserver extends EventTarget {
|
|
|
167
168
|
// Update the init config with merged result
|
|
168
169
|
this.#init = mergedConfig;
|
|
169
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Waits for custom elements to be defined before mounting.
|
|
173
|
+
* Only runs once per observer instance.
|
|
174
|
+
*/
|
|
175
|
+
async #waitForWhenDefined(rootNode) {
|
|
176
|
+
// Skip if already resolved or not configured
|
|
177
|
+
if (this.#whenDefinedResolved || !this.#init.whenDefined) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
// Get the custom element registry from the root node
|
|
181
|
+
const registry = rootNode.customElementRegistry || customElements;
|
|
182
|
+
// Normalize to array
|
|
183
|
+
const tagNames = arr(this.#init.whenDefined);
|
|
184
|
+
// Wait for all tags to be defined
|
|
185
|
+
await Promise.all(tagNames.map(tag => registry.whenDefined(tag)));
|
|
186
|
+
// Mark as resolved so we don't check again
|
|
187
|
+
this.#whenDefinedResolved = true;
|
|
188
|
+
}
|
|
170
189
|
/**
|
|
171
190
|
* Creates and initializes sub-observers from the `with` property.
|
|
172
191
|
* Each sub-observer observes the same root node as the parent.
|
|
@@ -272,6 +291,8 @@ export class MountObserver extends EventTarget {
|
|
|
272
291
|
this.#assignTentatively = assignTentatively;
|
|
273
292
|
}
|
|
274
293
|
this.#rootNode = new WeakRef(observedNode);
|
|
294
|
+
// Wait for whenDefined if specified (must be first check)
|
|
295
|
+
await this.#waitForWhenDefined(observedNode);
|
|
275
296
|
// Create sub-observers from `with` property
|
|
276
297
|
await this.#createSubObservers(observedNode);
|
|
277
298
|
// Set up media query if specified (needs rootNode to be set first)
|
package/MountObserver.ts
CHANGED
|
@@ -65,6 +65,7 @@ export class MountObserver<TKeys extends string = string> extends EventTarget im
|
|
|
65
65
|
#elementNotifiers = new WeakMap<Element, EventTarget>();
|
|
66
66
|
#notifierMountedElements = new WeakSet<Element>();
|
|
67
67
|
#subObservers: Map<string, MountObserver> | undefined;
|
|
68
|
+
#whenDefinedResolved = false;
|
|
68
69
|
|
|
69
70
|
#mergeHandlerDefaults(config: MountConfig): MountConfig {
|
|
70
71
|
const doValue = config.do;
|
|
@@ -220,6 +221,29 @@ export class MountObserver<TKeys extends string = string> extends EventTarget im
|
|
|
220
221
|
this.#init = mergedConfig;
|
|
221
222
|
}
|
|
222
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Waits for custom elements to be defined before mounting.
|
|
226
|
+
* Only runs once per observer instance.
|
|
227
|
+
*/
|
|
228
|
+
async #waitForWhenDefined(rootNode: Node): Promise<void> {
|
|
229
|
+
// Skip if already resolved or not configured
|
|
230
|
+
if (this.#whenDefinedResolved || !this.#init.whenDefined) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Get the custom element registry from the root node
|
|
235
|
+
const registry = (rootNode as any).customElementRegistry || customElements;
|
|
236
|
+
|
|
237
|
+
// Normalize to array
|
|
238
|
+
const tagNames = arr(this.#init.whenDefined);
|
|
239
|
+
|
|
240
|
+
// Wait for all tags to be defined
|
|
241
|
+
await Promise.all(tagNames.map(tag => registry.whenDefined(tag)));
|
|
242
|
+
|
|
243
|
+
// Mark as resolved so we don't check again
|
|
244
|
+
this.#whenDefinedResolved = true;
|
|
245
|
+
}
|
|
246
|
+
|
|
223
247
|
/**
|
|
224
248
|
* Creates and initializes sub-observers from the `with` property.
|
|
225
249
|
* Each sub-observer observes the same root node as the parent.
|
|
@@ -379,6 +403,9 @@ export class MountObserver<TKeys extends string = string> extends EventTarget im
|
|
|
379
403
|
|
|
380
404
|
this.#rootNode = new WeakRef(observedNode);
|
|
381
405
|
|
|
406
|
+
// Wait for whenDefined if specified (must be first check)
|
|
407
|
+
await this.#waitForWhenDefined(observedNode);
|
|
408
|
+
|
|
382
409
|
// Create sub-observers from `with` property
|
|
383
410
|
await this.#createSubObservers(observedNode);
|
|
384
411
|
|